資源簡介
1. 使用如下文法:
E ? E+T | T
T ? T*F | F
F ? (E) | id
2. 對于任意給定的輸入串(詞法記號流)進行語法分析,要求采用LR分析器來完成。手工構造LR分析表,利用移進-歸約分析算法(P71 圖3.12)輸出(P73 表3.8)對應的動作部分。如:
輸入:id*+id/(id+id)#
輸出:移進
按 F->id歸約
按 T->F歸約
移進
error
……
3. 要有一定的錯誤處理功能。即對錯誤能提示,并且能在一定程度上忽略盡量少的記號來進行接下來的分析。
例如:
從狀態0開始的記號流為:bm
將b移進之后,棧里的情況應該為: 0 b 2
此時查表發現 action[2,m]=error
輸出打印:error
把A和狀態1相繼壓入棧,用戶指針后移到FOLLOW(A)對應的元素繼續分析。
4. 利用P94頁的表3.13的方式將錯誤進行分類提示,即給出具體的出錯信息。
擴展:
在已有文法的基礎上再加上減法“-”和除法“/”對應的產生式構成最終的文法。從而使得記號流可以處理帶括號的加、減、乘、除四則運算。
代碼片段和文件信息
評論
共有 條評論