我有以下语法含糊不清,当然不是slr1:
E -> E+A+A | E+A-A | E-A+A | E-A-A | T
T -> T+A | T-A | A
A -> A*B | A/B | B
B -> (E) | x
我使用了转换规则:
E -> E + T -----> E -> TE'
E' -> +TE' | ε
所以第一个语法转换成了这个:
E -> T E' .
E' -> + A + A E' .
E' -> + A - A E' .
E' -> - A + A E' .
E' -> - A - A E' .
E' -> .
T -> A T' .
T' -> + A T' .
T' -> - A T' .
T' -> .
A -> B A' .
A' -> * B A' .
A' -> / B A' .
A' -> .
B -> ( E ) .
B -> x .
这解决了歧义,但它仍然不是slr1。转型是正确的。之后我删除了T规则,然后将它们安装到E'。所以slr1的最终语法如下:
E -> A E' .
E' -> + A + A E' .
E' -> + A - A E' .
E' -> - A + A E' .
E' -> - A - A E' .
E' -> + A .
E' -> - A .
E' -> .
A -> B A' .
A' -> * B A' .
A' -> / B A' .
A' -> .
B -> ( E ) .
B -> x .
现在我有2个问题。