如何识别语法是LR还是SLR?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何识别语法是LR还是SLR?相关的知识,希望对你有一定的参考价值。
这个语法是LR(0)还是SLR(1)?
S -> E $
E -> T + E | T
T -> x
答案
下图证明这个语法不在LR(0)中(它有一个shift减少冲突):
+--------------+ E +------------+
| |----------> | S -> E . $ |
| S -> . E $ | +------------+
| E -> . T + E |
| E -> . T | T +--------------+ state 2
| T -> . x |----------> | E -> T . + E | This state contains a
| | | E -> T . | Shift-Reduce conflict.
+--------------+ +--------------+
| | + ^
| x V | T
| +--------------+
V | E -> T + . E |
+---------------+ x | E -> . T + E | +--------------+
| T -> x . | <---------| E -> . T |--------> | E -> T + E . |
+---------------+ | T -> . x | +--------------+
+--------------+
但是,它在SLR(1)中是因为状态2中的冲突可以通过使用+标记不在FOLLOW(E)中的事实来解决。由于SLR(1)解析器可以提前看1个标记,如果下一个标记是+(并通过这样做解决冲突),它们可以决定在状态2中移位。
如果SLR(1)解析器处于状态2,而下一个令牌是+,为什么不选择reduce?
好吧,假设解析器选择减少E - > T.然后最终将读取+标记,它将跟随E或E导出的其他变量(在此语法中只有S)。但E和S都没有+令牌(立即)跟随他们!
以上是关于如何识别语法是LR还是SLR?的主要内容,如果未能解决你的问题,请参考以下文章