代码中存在错误,具体表现在 SLR 分析表的构建上。经过分析,发现在 SLRAnaly() 函数中,对于某些非终结符的处理存在问题,导致 SLR 分析表构建错误。具体来说,当 dfa[i].symbol 为非终结符时,应该在状态表中添加状态 'N',但是代码中添加的是状态 'S',造成了混淆和错误。因此,需要修改 SLRAnaly() 函数中的代码,将状态 'S' 修改为状态 'N',即:

if (isFinalsymbol(dfa[i].symbol))
{
    int CID = FindID(Nchar, dfa[i].symbol);
    SLRAna[dfa[i].from][CID + Echar.Count] = new Table('N', dfa[i].to);
}
else
{
    int CID = FindID(Echar, dfa[i].symbol);
    SLRAna[dfa[i].from][CID] = new Table('S', dfa[i].to);
}

修改后的代码可以正确构建 SLR 分析表,避免了错误的发生。

SLR1 分析表构建错误分析及代码修正

原文地址: http://www.cveoy.top/t/topic/f0MQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录