加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 02:11:52 所属栏目:Java 来源:网络整理
导读:这是来自原始语法的小块,我必须实现递归的正确解析器.我们必须从它中删除歧义,左递归e.t.c,以便我们可以实现它的解析器.我已完成其他位,但无法弄清楚如何处理not运算符(?). 有效的表达式可能是. 1 ~1,(1 ~1)e.t.c. 我已经处理过括号,以及和或符号但不能处理?
这是来自原始语法的小块,我必须实现递归的正确解析器.我们必须从它中删除歧义,左递归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)

解决方法

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

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

Image displaying the solution

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读