使用LL(1)语法解决表达式中的歧义

时间:2017-02-08 15:35:21

标签: parsing grammar ll left-recursion

我需要为表达式构造一个解析器,允许只有2个运算符(AND& OR),这样两个运算符都不能在一个封闭的paranthesis中presenet。

例1:

(A AND B OR C) --> invalid
(A AND (B OR C)) --> valid

为Eg2:

(A AND (B OR C) OR D) --> invalid
((A AND (B OR C)) OR D) --> valid
(A AND ((B OR C) OR D)) --> valid

请注意:我对此非常陌生。我试过通过以下几个在线教程尝试使用LL(1)解析器。这是我迄今为止取得的成就。

E -> F E'
E' -> OR F E'
E' -> ''
F -> G F'
F' -> AND G F'
F' -> ''
G -> ( E )
G -> id

上述语法规则检查我是否只有有效的运算符&括号但不能识别歧义问题。我不期待这里的解决方案,但我只是想知道我是否走在正确的轨道上。因为在教程之一中,导师提到如果终端符号有多个查找,LL(1)解析器将无法工作。我知道我还没有遇到过这样的情况,但我会(特别是在制定解决模糊性的规则时)????

EDIT1

E -> F E'
E' -> OR F E'
E' -> AND F E'
E' -> ''
F -> ( E )
F -> id

编辑2:解决方案

E -> F E'
E' -> and F G
E' -> or F H
E' -> ''
G -> and F G
G -> ''
H -> or F H
H -> ''
F -> ( E )
F -> id

0 个答案:

没有答案
相关问题