摘要:前面提到的編譯器直譯器的進一步完善,即加入字串和注釋的處理。
字串和注釋不能由正規表示式的方式來處理。注釋的兩種形式是//abc,/*abc*/,這就會有巢狀和混用的問題;字串裡面會有轉義符,例如「a\」b「。這樣就不是正則語言了,而是成了上下文無關語言,正規表示式的處理方式無效。所以,我在tokenizer裡面用一段手寫的程式來提取注釋和字串。
而還有個問題是字元,字元最好與字串分開處理,雖然操作時往往混合拼接到一起,但是為了以後加上字元陣列的功能,還是作為乙個單獨的基本類別。這樣就有3個手寫的函式,getnote()、getstring()和getchar(),它們被gettoken()呼叫。
tokenizer中能傳遞注釋和字串,那麼parser就要作相應的修改。好在原來設計語言的時候,已經預留了字串和字元的非終結符表示,就連ast類和生成方法都已經寫好了。所以,parser裡面只需要完善一下對應介面的具體方法就好了。其次是ast類,要修改+操作符的操作。對字串或字元型別,就需要把左右子ast都提取出字串值然後拼接。其餘基本不需要改動。對注釋,目前不打算處理,編譯後直接丟棄了注釋的資訊。
完成加入注釋和字串功能後,第一版的編譯器告一段落。這個編譯器實現的功能,已經可以解決很多數學問題,斐波那契數、階乘、歐幾里得輾轉相除法,等等。但是功能還非常不夠,例如陣列、例如類、例如繼承封裝多型、例如泛型、例如函式式程式設計,等等。以後會慢慢加上,再把直譯器改為虛擬機器。工作還有很多,下面的一步是把parser generator改寫為glr方式。parser中預計會用樹結構代替lr(1)的符號棧結構。這就需要加乙個新的符號樹抽象類。
指令碼語言 shell指令碼
指令碼語言的特徵 指令碼語言 於批處理命令語言,但更接近於程式語言。與批處理命令語言的差別是,指令碼語言有變數和豐富的控制語句 與一般程式語言的差別是 指令碼語言變數的值主要是字串,語言的基本單位是命令 而程式語言變數主要是數值,語言的基本單位是表示式 指令碼語言一般是解釋執行的,速度低,但開發成本...
使用指令碼語言
dim myvar myvar hello world myvar 在這個例子中,option explicit語句強制所有的變數必須專門宣告。dim語句宣告了變數myvar。如果在使用變數前沒有宣告變數,vbscript就會給出執行時錯誤資訊 variable is undefined myvar...
shell指令碼語言
現在流行的指令碼語言有很多,例如php perl python shell等等,這些指令碼語言都有自己的牛x的地方。shell指令碼語言在unix linux系統上用途廣泛,它的優勢在於處理作業系統底層的業務,它利用大量的命令和函式來實現強大的功能,例如一鍵安裝 報警等等。1 在編寫指令碼語言的時候...