我需要为表达式构造一个解析器,允许只有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