【发布时间】:2016-03-10 08:15:05
【问题描述】:
这是原始语法中的一小部分,我必须为此实现递归体面解析器。我们必须从中删除歧义,左递归等,以便我们可以实现它的解析器。我已经完成了其他部分,但不知道如何处理 not 运算符 (~)。
有效的表达式可能是。 1 & ~1, (1 & ~1) 等
我已经处理了大括号以及 & 和 or 符号,但无法处理 ~ 符号。
这是原始语法。
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)
【问题讨论】:
-
究竟是什么阻碍了您?它是前缀运算符的事实?或者解析
~0 & 1的歧义,也许? -
我认为问题在于我没有正确处理否定。我把它当作右联想。看看我的解决方案。我已经更新了问题。
标签: java parsing compiler-construction