这两个语法是否相等?

时间:2017-11-25 09:50:36

标签: parsing compiler-construction grammar context-free-grammar lr

我有以下语法含糊不清,当然不是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个问题。

  1. 2个最终语法是否相等?我通过说这两个语法必须接受相同的句子来定义平等。看来他们确实如此。
  2. 我删除T规则是否正确?我的练习要求我将第一个改为slr1,我想出的是最后一个。 Thx in advanced,对不起我的英文。

0 个答案:

没有答案