c++实现tiny语言的ll1语法分析器实现化简,消除 左公因子与左递归,输出first集合
时间: 2023-11-26 22:01:29 浏览: 115
首先,我们需要对tiny语言的文法进行分析,并且消除左递归和左公因子。然后我们可以构建LL(1)语法分析器,并且输出其对应的first集合。
在实现LL(1)语法分析器之前,需要进行下面几个步骤:
1. 消除左递归:通过替换文法规则来消除左递归,确保每个非终结符的产生式右部都不出现该非终结符并且在处理时始终选择非递归的选择。
2. 消除左公因子:如果文法存在左公因子,则需要对产生式进行重写,使得每个非终结符的产生式左部都不相同,并且它们的产生式右部都没有相同的前缀。
3. 构建LL(1)语法分析表: 对于每一个非终结符A和终结符a,在构造分析表的时候,可以根据LL(1)分析表的构造算法分析文法,找出每一个非终结符A以及每一个文法规则对应的终结符所对应的first集合。
4. 输出first集合:对每一个非终结符A,求出它的first集合,即以A为起始符号,能够推导出的所有终结符的集合。首先求出每个终结符的first集合,然后考虑每个非终结符的first集合。
在完成上述步骤之后,就可以得到LL(1)语法分析器的first集合。有了这个first集合,可以更方便的进行LL(1)语法分析器的构造和语法分析。
总的来说,实现tiny语言的LL(1)语法分析器化简、消除左公因子与左递归后,可以输出对应的first集合,这样可以为后续的语法分析工作提供便利。
阅读全文