1. 程式人生 > >編譯原理-TEST語言詞法分析

編譯原理-TEST語言詞法分析

原始碼

分析程式碼:

{
    /*This a test program.*/
    int abc;
    int 1203;
    int [email protected];
    int i;
    int n;
    int b,c;
    int 2a;
    int a2;
    read n;
    n = 012345;
    for (i=1;i<=n; i= i+1)
    {
    abc=abc+i;
    }
    if(i!=n) n = n+i;
    if (!n) b = b+c;
    /*The loop ended
    write abc;
}

報錯資訊

設計詞法分析程式

一、實驗目的

1、根據 TEST 語言的詞法規則,分別寫出每條詞法規則對應的正則表示式; 2、將每一個正則表示式轉換為 NFA; 3、將多個 NFA 合併後進行確定化並化簡; 4、根據化簡後的 DFA 畫出流程圖; 5、參閱在實驗語言部分給出的 TEST 語言語法規則,確定單詞分類、單詞輸出方案; 6、編寫詞法分析程式; 7、對下面的 TEST 語言源程式進行詞法分析,將合法單詞存入 lex.txt,並報告詞法錯 誤及其位置。

二、實驗設計

1、寫出TEST語言每條詞法規則對應的正則文法或者正則表示式 識別符號 (a|…|z|A|…|Z)( a|…|z|A|…|Z|0|…|9)* 保留字 <if>|<else>|<for>|< while>|< do>|< int>|< write>|< read> 無符號整數 (1|…|9)(0|…|9)|0 分界符 ( | ) | ; | { | } 運算子 +|-|

|/|=|<|>|>=|<=|!=|== 註釋符 /* (其他符號)* */

2、對每個文法或者正則表示式分別構造NFA

3.將NFA合併,確定化,化簡得到最終的DFA。

1、設計的詞法分析程式是否滿足最長匹配原則?如果滿足請給出實現方案。如果不滿 足請給出改進方案。 最長匹配原則定義:指識別出的單詞有混淆時,按長度最長的來決定。例如,“<=”是 一個符號串,而不是分開成“<”和“=”單個字元。 我組設計的詞法分析程式符合最長匹配原則。 實現方案:畫出DFA和狀態表之後,按照表驅動進行編寫程式,達到目的。詳細實現方 案請看原始碼和狀態轉移圖。

2、給出單詞分類方案,並說明理由。 根據TEST語言可將單詞分為六類: ① 識別符號:字母開頭,後可接任意字母或數字; ② 保留字:識別符號的子集,包括:if、else、for、while、do、int、write、read; ③ 無符號整數: 由數字組成,但最高位不能為0,允許一位的0; ④ 分界符: (、 ) 、; 、{ 、} ⑤ 運算子:+、-、、/、=、<、>、>=、<=、!=、== ⑥ 註釋符: / 、 */

3、構建詞法分析程式一般過程是怎樣的?