问题标签 [dangling-else]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - Bison Flex 减少/减少悬挂 else 与中间动作的冲突
我目前正在将我的一个有趣的项目转移到 bison/flex 作为解析器,并且在解决减少/减少冲突时遇到了麻烦:
注意:以 code_ 为前缀的东西是中间动作
有人可以向我解释如何正确解决这个问题以及为什么“首选”解决方案是错误的或不起作用?谢谢,X39
parser-generator - Beaver 解析器生成器移位减少冲突连接到悬空 else
我正在向 Beaver 解析器生成器提供(生成的)语法。多个 shift-reduce 冲突是由该规则中的悬空 else 问题引起的:
我认为悬空 else 不会有问题,因为该工具默认选择 SHIFT,这是对悬空 else 问题 AFAIK 的公认解决方案。但是,有一些问题,因为我有 16 个其他警告,我不明白为什么:
结果是在 StatementArray3 中有垃圾注入到 else 分支中(完全错误的类型,一个 List 而不是 Optional,充满了从以下语句中吞噬的东西)。有人可以解释一下,所有这些减少班次的冲突是由什么引起的(除了明显的第一个冲突)吗?请注意,语法是从类模型生成的,所以这个问题的非常具体的解决方案不是最好的,我需要一般地解决这类问题,或者改变语法。
由另一种方法生成的前面的语法(我想避免)产生了这个语法:
在编译过程中没有冲突,但是对于以下输入:
解析器在运行时失败,只是跳过 else 并将第二个分配视为顶级:
完整的有问题的语法(去掉 %import、%typeof 和{: ... :}
):
bison - 野牛难悬垂的其他去除
我正试图摆脱我语法中的其他悬而未决的东西。终端是大写字母。我有:
我试过这种方法
我现在被卡住了,不知道该怎么办。我应该如何在这里正确地移除悬空的 else ?谢谢你的帮助。
编辑1:我尝试了这种方法,我得到了更少的移位/减少冲突和更多的减少/减少冲突我想这是不对的:D但它是
antlr4 - 最新的 ANTLR4 如何解决“悬而未决”的歧义?
我正在使用antlr 'org.antlr:antlr4:4.9.2'
并遇到“悬空的其他”歧义问题;请参阅以下语法IfStat.g4
。
我针对输入测试了这个语法"if a then if b then c else d"
。正如预期的那样,它被解析为“if a then (if b then c else d)”。ANTLR4 如何解决这种歧义?