问题标签 [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.
antlr - ANTLR中树表示的if语句
我有以下正确解析的 if 语句:
现在,我想将其解析为 AST。我是这样做的:
添加!
and ^
,因为->
构建指令似乎不起作用。
我的结果是一个有 3 个孩子的 AST:1 是条件,2 和 3 是语句块。else 部分是可选的:如果没有 else,则缺少节点 3。
问题是语句块总是空的。如何解决?
compiler-construction - 用于悬空 else 的 LL(1) 语法
在编译器构造中,主要的歧义问题之一是悬空 else。正如 Aho、Lam、Sethi 和 Ullman 在编译器:原理、技术和工具一书中所提到的,悬空 else 的语法不能与 LL(1) 解析器一起使用。
真的不能处理为LL(1)吗?
parsing - LL1 和悬空 else 的明确语法
我正在尝试使用用于扫描仪的 Flex 和一个名为 PGen 的特殊工具来定义语法来编写一个简单的编译器。
现在,我正在尝试解决悬而未决的明确语法问题。我已经搜索过了。
这是一个带有悬空 else 问题的语法:
这是解决此问题的语法(通过Berkeley 的幻灯片):
但是这个语法仍然不是 LL1 并且仍然是模棱两可的。
当我试图解决这种歧义并将其设为 LL1 时,我再次面临悬而未决的 else 问题。
谁能帮我找到一个明确的 LL1 嵌套 if 语法?
我在 Stack Overflow 上的问答中读到此语法不能成为 LL1。但我无法意识到如何解决这种歧义。
parsing - Lex 和 Yacc 的悬空 else 语法
我正在编写一个小型解析器来识别 Java 的一个子集,我遇到了一个我认为称为悬空 else 问题的问题。
我匹配 if-else 语句的语法是这样开始的:
但是我收到了 shift/reduce 错误,并且想要修复这些错误,而不仅仅是像大多数人推荐的那样让它们静音。
我已经将我的语法修改为这个语法,它消除了 shift/reduce 错误,但现在,它没有正确解析 else 语句。
我已经坚持了好几天了,无法解决如何解决它。
这是它应该解析的示例:
parsing - 如何解决 Coco/R 中的悬空问题?
我在 Coco/R 中有一个悬空的问题。我尝试了解Coco/R 用户手册并询问 Google,但我无法自己解决问题。
我将问题简化为以下 Coco/R 语法(保存在 中new4.atg
):
当我想用 构建编译器时coco.bat
,我得到了这个答案:
在Google的最佳结果中,我读到我可以声明IF(isXXXFollowYYY())
声明,但我不知道它如何以及是否是最佳解决方案。(在我的例子中:Expr = Test | If(isTestFollowID)Id Test
。但是在哪里isTestFollowID
声明?)
当我开始时,我不想收到任何警告coco.bat
。
ambiguous - 去除 LL(1) 语法中悬空 Else 引起的歧义
在编译器设计的悬空 else 问题的情况下,是否有理由在消除歧义之前将其保留?
我们正在将 CFG 转换为 LL(1) 语法,因此我的教授要求我们首先消除递归,然后消除左因子,然后消除语法中的歧义。但是,根据我的阅读,通常首先消除歧义。我不确定如何在左分解后消除歧义。
这就是我在左分解后得到的结果:
但是,据我了解,消除歧义需要重写语法,因此语法总是会产生类似的结果,对吧?
还是有其他方法可以做到这一点?据我所知,这是从悬空的 else 中消除歧义的唯一方法。
kotlin - 在 Kotlin 中悬挂其他
我有这个疑问,伙计们,我不知道;任何要理解的例子都会很棒。Kotlin 编程语言是否存在“悬空的 else”问题?如果存在问题,那么在这种情况下的原因是什么?
c - 悬空 else 查询(或阅读错误代码的练习)
我正在阅读的书(C How to Program with an into to C++ Global Edition,Deitel&Dietel,2016)提供了以下代码:请注意,这本书是在练习部分中呈现代码的方式,故意没有大括号和缩进。我会假设教你使用正确的缩进使阅读代码更容易。
输出是
这本书指出编译器总是将一个 else 与前一个 if 关联起来,除非通过放置大括号来告诉它这样做,所以通过那个逻辑,else 与之相关联
这是真的,否则不应该执行,给出的输出
并不是
所以我的问题是为什么这条线
在输出中?
c - c 中的 dangling-else 问题到底是什么?
代码怎么能这样工作?哪些 if-else 语句相互关联?那么为什么输出是这样的“$$$$$”?
compiler-construction - 在没有关联性声明的情况下解决 Bison 中的悬空 if、elsif 和 else
我正在为具有 if-elsif-else 语句并且似乎无法使我的语法明确的语言实现解析器。我们的编译器类获得了一份关于使用匹配/不匹配方法解决 if-else 语句的悬空 else 问题的讲义,如下所示:
为我们的语言提供的语法文档被定义为具有涉及 if - elsif- else 的产生式,其中:
其中小写字母是产生式,大写字母是终结符。
这些提供的产生式是模棱两可的,必须在野牛的语法实现中解决。这是我在将其实际实施到 Bison 中所取得的进展:
关于更改语法以适应 elsif 产生式的任何建议,类似于使用匹配和不匹配的语句来解决悬空的 if-else 问题并摆脱任何移位/减少和减少/减少错误?
编辑 1:我在更简单的语法版本上取得了更多进展,以确保 elsifLists 只能遵循匹配的语句:
但我仍然遇到转移/减少冲突:
编辑 2:我在简单语法方面取得了足够的进展,以确保 elsif 语句之前有匹配的语句。生成的语法是:
我已经更新了实际语言的解析器的实际语法,以确保不匹配的语句不能跟在 elsifList 之后,并且 elsifLists 只能跟在匹配的语句之后:
不过,由此产生的语法仍然给我 2 次移位/减少冲突: