【问题标题】:LL1 boolean operator Grammar to implement Recursive decent parserLL1布尔运算符语法实现递归下降解析器
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    • 1970-01-01
    • 2015-06-01
    相关资源
    最近更新 更多