递归下降分析LL(1)文法:算术表达式解析

需积分: 0 0 下载量 8 浏览量 更新于2024-08-04 收藏 381KB DOCX 举报
"该资源是一个关于递归下降语法分析的设计与实现的专题实验,主要讨论了LL(1)文法的使用,包括文法构造、错误检测、FIRST集和FOLLOW集的计算,并提供了测试用例进行程序验证。" 在这个专题实验中,学生需要设计一个递归下降分析程序,用于处理特定的算术表达式文法。文法G[E]被定义为: 1. E → TE' 2. E' → ATE' | ε 3. T → FT' 4. T' → MFT' | ε 5. F → (E) | i 6. A → + | - 7. M → * | / 这个文法允许表达式包含加减乘除操作,以及括号和标识符(用'i'表示)。实验的目标是实现一个能够处理词法分析输出二元式序列的程序,并判断这些序列是否符合给定的文法。 实验要求如下: - 输入串应是经过词法分析后的二元式序列,输出为判断结果。 - 程序需要能够检测输入串中的错误。 - 设计两个测试用例,一个正确,一个错误,以检验程序的正确性。 首先,由于文法已经没有左递归和回溯,所以可以直接进行递归下降分析。接着,我们计算了文法的FIRST集和FOLLOW集,例如,对于产生式E',它的FIRST集包含A和ε,而FOLLOW(E)集合包含')'和'#',这在表3-1中有详细展示。 在实现过程中,主要的数据结构包括`pair<int,string>`用于存储二元组,以及`vector<string>`来保存二元式序列。递归框图算法则指导了如何根据当前扫描的输入符号和子程序进行分析。 测试用例存放在名为test1.lexer和test2.lexer的文件中,分别代表合法和非法的输入。通过在命令行中运行`parse[name]`,可以执行这些测试用例,其中test1是一个符合文法的二元序列,test2则包含非法的文法输入。 实验的完成加深了对递归下降文法构造和实现的理解,同时也表明了不同专题之间可以通过二元式序列等方式进行有效衔接,为后续专题(如专题5)奠定了基础。