回覆列表
  • 1 # 使用者3937226028394

    這是一個簡單的例項,實際的詞法分析器狀態轉換圖也不太複雜。

    狀態轉換圖易於程式設計實現。圖中每一個狀態對應一段程式,遇到分支可使用if語句實現,如果分支較多,可採用case語句,遇到迴路可採用while語句。在編寫狀態轉換圖對應程式時,將會用到下面的變數和函式。

    1、 Character

    全域性字元變數,用來存放最新讀入的字元。

    2、 Token

    字元陣列,用來存放已讀入的字元序列。

    3、 Getchar

    讀入一個字元的函式,從輸入字串中讀入一個字元到character中。

    4、 Getnbc

    讀入非空白字元的函式,檢查變數character中的字元是否為空白字元,若是,則呼叫getchar讀入下一個字元,直到character中的字元是非空白字元為止。

    5、 Concat

    連線字串的函式,把character中的字元連線到token陣列的末尾。例如,token的值為”abc”,character的值為’d’,呼叫concat函式後,token的值為abcd。

    6、 Letter

    判斷字母的函式,若character中的字元是字母,返回true值,否則返回false值。

    7、 Digit

    判斷數字的函式,若character中的字元是數字,返回true值,否則返回false值。

    8、 Retract

    回退字元的函式,將剛讀入的character中的字元回退到輸入字串中,並把character的值置為空白。

    9、 Reserve

    處理保留字的函式,對存放在token中的字串查表六字表,若查到,則表示該字串是一個保留字,則返回該保留字的型別編碼,否則返回0.

    10、symbol 處理識別符號的函式。對token中的字串查保留字表,若查到,則返回它在符號表中的位置編號,

    11、constant

    常數存入常數表的函式,將token中的數字串轉換成標準的二進位制值,存入常數表中,返回它在表中的位置編號。

    12、return

    返回二元式的函式,其中,num為單詞符號的型別編碼,val是token中的字串在符號表中的位置編號,或者是它在常數表中的位置編號,或者無定義。

    13、error

    出錯處理的函式,處理出現的詞法錯誤。有一類詞法錯誤可以在詞法分析時發現,如出現字母表以外的非法字元、不合規則的常數、識別符號的字首為保留字等。但還有一類詞法錯誤,例如,把if寫成fi,詞法分析會將fi當作識別符號處理,le ngth中間多了一個空格,詞法分析會將le和ngth當作兩個識別符號處理。這類詞法錯誤往往要推遲到語法分析時才能發現,不屬於函式處理的範疇。

  • 中秋節和大豐收的關聯?
  • 聽說汽車有庫存車,什麼是庫存車,庫存車有什麼不好的麼?