LL(1)语法分析器设计文档
一、 开发环境
本程序的编程环境为:基于 win10-64bit 操作系统,wings IDE 5 的集成测试环境,语言
为 python2.7。
二、 任务说明
对以下文法 G 进行语法分析。
文法起始符:E
非终结符:E T F
终结符: num ( ) + - * /
文法 G 的产生式为:
E -> E + T | E – T | T
T -> T * F | T / F | F
F -> ( E ) | num
要求对上述文法构造 LL1 分析表,并构造 LL1 预测分析程序。
文件集合:
1) LL1grammar.py:LL1 分析程序的脚本
2) get_FIRST_SET_AND_FOLLOW_SET.py:本程序衍生出的单独脚本,通用的 FIRST
集合 FOLLOW 集求解器。
3) FIRST_AND_FOLLOW_SET.txt:上面脚本生成的两集合,仅供演示通用脚本的效
果。
4) grammarInput.txt:程序的文法输入,有一定的格式约定以便于程序扫描,生
成程序中约定的 python 字典格式。
5) tokens.txt:测试串的输入,默认测试串是符合语法规范的。
6) LL1Result.txt:LL1 分析结果。
在本次实验中,按照以下两个主要步骤进行:
1、 得到文法 G 的 LL1 分析表
给定输入为文法 G(从 grammarInput.txt 以文件形式输入),输出为 LL1 分析表
TABLE,本程序中以 python 字典的形式存储此分析表。注意在这一步骤中文法 G 有被
消除左递归的过程,即输出了另一个文法 G’,文法 G’同时也是构造 LL1 分析表的输入。
2、 根据 LL1 分析表,构造 LL1 语法分析程序,并输出语法分析结果
给定输入(从 tokens.txt 以文件形式输入)为步骤 1 中得到的 TABLE,待识别的 token
序列(在本实验中简化为 python 字符串);输出为 LL1 语法分析过程。输出的内容被保
存在 LL1Result.txt 中,包括 LL1 分析表和 LL1 分析器的分析过程。
请注意,为简化程序,程序中没有设计具体的错误处理模块,而是采取简单的中断
机制来捕获语法错误。程序默认输入的 tokens 串是有效的且符合文法规范的,程序可
以确保在输入串合语法的情况下,输出一个正确、完整的 LL1 分析过程。
三、 设计思路