資源簡介
這個里面的都是測試數(shù)據(jù),總共得分5分。從控制臺輸入,不能從文件中讀取。實現(xiàn)了基本功能,加分項目都沒有去實現(xiàn),沒有函數(shù)數(shù)組這些的實現(xiàn)。這是用C++語言寫的,新建parser類別要選C++,其他對于VS的配置和C語言一樣。for語句用的是枚舉所有情況,你可以自行修改。
對預備工作中自然語言描述的簡化C編譯器的語言特性的語法,設計上下文無關(guān)文法進行描述
借助Yacc工具實現(xiàn)語法分析器
考慮語法樹的構(gòu)造:
1.語法樹數(shù)據(jù)結(jié)構(gòu)的設計:節(jié)點類型的設定,不同類型節(jié)點應保存哪些信息,多叉樹的實現(xiàn)方式
2.實現(xiàn)輔助函數(shù),完成節(jié)點創(chuàng)建、樹創(chuàng)建等功能
3.利用輔助函數(shù),修改上下文無關(guān)文法,設計翻譯模式
4.修改Yacc程序,實現(xiàn)能構(gòu)造語法樹的分析器
考慮符號表處理的擴充
1.完成語法分析后,符號表項應增加哪些標識符的屬性,保存語法分析的結(jié)果
2.如何擴充符號表數(shù)據(jù)結(jié)構(gòu),Yacc程序如何與Lex程序交互,正確填寫符號表項
以一個簡單的C源程序驗證你的語法分析器,可以文本方式輸出語法樹結(jié)構(gòu),以節(jié)點編號輸出父子關(guān)系,來驗證分析器的正確性,如下例:
main()
{
int a, b;
if (a == 0)
a = b + 1;
}
可能的輸出為:
0 : Type Specifier, integer, Children:
1 : ID Declaration, symbol: a Children:
2 : ID Declaration, symbol: b Children:
3 : Var Declaration, Children: 0 1 2
4 : ID Declaration, symbol: a Children:
5 : Const Declaration, value:0, Children:
6 : Expr, op: ==, Children: 4 5
7 : ID Declaration, symbol: a Children:
8 : ID Declaration, symbol: b Children:
9 : Const Declaration, value:1, Children:
10: Expr, op: +, Children: 8 9
11: Expr, op: =, Children: 7 10
12: if statement, Children: 6 11
13: compound statement, Children: 3 12

代碼片段和文件信息
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-02-17?20:20??語法分析\
?????文件?????3943445??2016-12-06?22:47??語法分析\CPlus.zip
?????文件?????????850??2016-12-18?23:56??語法分析\ex.txt
?????文件????????4556??2016-12-07?20:01??語法分析\mylexer.l
?????文件???????14715??2016-12-06?22:53??語法分析\myparser.y
-----------?---------??----------?-----??----
?????目錄???????????0??2017-02-17?20:20??語法分析\
?????文件?????3943445??2016-12-06?22:47??語法分析\CPlus.zip
?????文件?????????850??2016-12-18?23:56??語法分析\ex.txt
?????文件????????4556??2016-12-07?20:01??語法分析\mylexer.l
?????文件???????14715??2016-12-06?22:53??語法分析\myparser.y
評論
共有 條評論