这是编译原理的一次练习代码,自己写完之后放到这篇文章里供大家参考讨论。
题目要求如下
第3次上机—语法分析1 –递归下降
目的:熟练掌握自上而下的语法分析方法,并能用程序实现。
要求:
1. 使用的文法如下:
2. 对于任意给定的输入串(词法记号流)进行语法分析,递归下降方法实现。
3. 要有一定的错误处理功能。即对错误能提示,并且能在一定程度上忽略尽量 少的记号来进行接下来的分析。可以参考书上(《编译原理》 陈意云 张昱著 第三版)介绍的同步记号集合来处理。
可能的出错情况:idid*id, id**id, (id+id, +id*+id ……
4. 输入串以#结尾,输出推导过程中使用到的产生式。例如:
本人使用的python3
整体的思想是运用递归下降的方法,其中对于错误处理则采用了同步记号集合的方法
以上表格为加入了同步记号的分析表,我根据该表建立了字典chart,其中空的格子用-1代替,推导出空串的格子用0代替
#Analysis chart with synchronization mark
#-1 represents empty cell in the Analysis chart
#0 represents ξ in the Analysis chart
chart={"E id":"T E1","E1 id":-1,"T id":"F T1","T1 id":-1,"F id":"id",
"E +":-1,"E1 +":"+ T E1","T +":"synch","T1