我正在研究我的编译器概念但是我有点困惑...... 谷歌搜索让我无处可定。
SLR和LR(0)解析器是同一个吗?如果没有,那么差异是什么?
答案 0 :(得分:219)
答案 1 :(得分:1)
这就是我所学到的。通常LR(0)解析器可能有歧义,即表的一个框(您为创建解析器而导出)可以有多个值(或)以更好地放置它:解析器导致具有相同输入的两个最终状态。因此创建SLR解析器以消除这种歧义。为了构造它,找到导致goto状态的所有产品,在左侧找到生产符号的跟随,并且仅包括在下面出现的那些goto状态。这个转换意味着你不包括使用原始语法不可能的作品(因为状态不在下面的集合中)
答案 2 :(得分:0)
在 LR(0) 的解析表中,产生式的缩减规则放置在整行中,跨越所有终端,而在 SLR 解析表中,产生式的缩减规则仅放置在左侧的 Follow 集合中还原生产的非终端。
parsing-EMU这个工具对解析很有帮助,可以生成first、follow、LR(0)项集、LALR Evaluation等。你可以找到here。