LL1布尔运算符Grammar实现Recursive的解析器

时间:2015-12-05 11:50:50

标签: java parsing compiler-construction

这是来自原始语法的小块,我必须实现递归的正确解析器。我们必须从它中删除歧义,左递归e.t.c,以便我们可以实现它的解析器。我已完成其他任务,但无法弄清楚如何处理not运算符(〜)。

有效的表达式可能是。 1& ~1,(1& ~1)e.t.c。

我已经处理了大括号,以及&和/或符号但不能处理〜符号。

这是原始语法。

A -> A & A 
A -> ~A
A -> (A)
A -> 0 | 1

我无法弄清楚如何处理

这是我的解决方案:

one -> two one'
one' -> ~one|^
two -> three two'
two' -> & three two'|^
three -> four three'
three' -> || four three' | ^
four -> (one) |0 |1 

当我实现它时,一切都适用于括号,或者操作符。但否定〜没有奏效。所以我认为语法没有正确地转换为LL(1)

1 个答案:

答案 0 :(得分:0)

最后,我花了很多时间后自己解决了这个问题。这是解决方案。

布尔值not或(〜)运算符的优先级高于上述语法中的任何其他运算符。在上面的解决方案中,我的优先级更低。这是正确的解决方案。

Image displaying the solution