LR(0)分析表构造算法到SLR(1)分析表构造算法的改进
LR(0)分析表构造算法到SLR(1)分析表构造算法的改进
本文介绍如何将用于构造LR(0)分析器的LR(0)分析表构造算法改进为用于构造SLR(1)分析器的SLR(1)分析表构造算法。
SLR(1)分析表构造算法
SLR(1)分析表构造算法是在LR(0)分析表构造算法的基础上,增加了对Follow集的计算,并使用Follow集来解决LR(0)分析表中存在的移进-归约冲突。
代码实现
以下是修改后的C#代码,用于构造SLR(1)分析表:csharppublic class SLRNode{ public string Left; public string Right; public HashSet
public class SLRitemsets{ public List
// ...其他代码...
public Table[][] GET_ANA(){ SLRAnaly(); // 调用SLRAnaly函数构造分析表 RStr_ANA += '\r\nSLR(1)分析表:\r\n '; // 修改输出字符串 // ...其他代码...}
public void SLRAnaly(){ // 新增:计算所有非终结符的Follow集合 foreach (char c in Nchar) { follow[c] = new HashSet
// ...其他代码...
// 构造DFA和LR分析表 // ...其他代码...}
// 计算First集的函数private HashSet
// 计算Follow集的函数// ...
// 判断是否为非终结符的函数private bool isNonFinalsymbol(char c){ // ..
原文地址: https://www.cveoy.top/t/topic/f0NX 著作权归作者所有。请勿转载和采集!