问题标签 [lalr]
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.
grammar - 如何解决班次/减少冲突?
我正在使用 CUP 创建我的论文所需的解析器。我的语法有移位/减少冲突。我有这个生产规则:
我有这个警告:
现在,我实际上希望它改变,所以我很好,但我的教授告诉我要找到解决冲突的方法。我瞎了。我一直在阅读有关 if/else 冲突的信息,但对我而言,情况似乎并非如此。你能帮助我吗?
PS:IDENTIFIER、LPAREN "(" 和 RPAREN ")" 是终端,parlist 和 command 不是。
parsing - LALR 解析器生成器实现问题
我目前正在尝试实现一个 LALR 解析器生成器,如“编译器原理技术和工具”(也称为“龙书”)中所述。
很多已经奏效了。解析器生成器当前能够生成完整的 goto-graph。
转到图:
我在实现生成动作表的算法时遇到了麻烦!我的算法计算以下输出:
sx... 转移到状态 x
rx... 减少到状态 x
r? 意味着我不知道如何获取解析器应该减少的状态(?)。有谁知道一个算法得到?使用上面的goto-graph?
如果有什么描述不够清楚,请询问,我会尽力解释得更好!谢谢你的帮助!
parsing - Packrat 解析与 LALR 解析
许多网站声明 Packrat 解析器可以在线性时间内解析输入。
所以乍一看,它们比 yacc 或 bison 工具构建的 LALR 解析器更快。
我想知道当使用普通输入(如编程语言源文件)而不是任何理论输入进行测试时,packrat 解析器的性能是否比 LALR 解析器的性能更好/更差。
有谁可以解释这两种方法之间的主要区别。
谢谢!
parsing - 使用 Gold Parser 和 Klimstra 引擎的模板类
我正在使用 GOLD 解析器的“创建骨架程序”中的 Klimstra 的 VB.NET 模板,但生成的模板具有带有 overrides 关键字的方法并继承自TemplateParser
..
我应该创建 TemplateParser 类还是有创建它的工具?我认为“创建骨架”函数创建了一个模板,我应该继承并为“MustOverride”方法提供实现,但现在我不知道。
我正在关注一个教程,看起来我们必须使用工具创建它,但我不确定。我不知道该教程是否非常过时(它的日期为 2005 年)并且 GOLD 解析器改变了这种机制。这是我正在关注的教程:http: //www.codeproject.com/KB/recipes/IntrotoGoldParser.aspx
c++ - 如何从 Lemon 语法中删除函数调用歧义?
我有以下柠檬语法(从真正的语法简化):
在以下状态下,我无法修复 shift-reduce 冲突:
我的想法是问题在于 a=(b(c)) 和 (a=b)(c) 之间的歧义,但我原以为赋予函数调用比赋值更高的优先级可以解决它。任何想法可能是什么情况?
parsing - LL 解析器比 LR 解析器有什么优势?
LL 解析器与 LR 解析器相比有哪些优势,以保证它们在当今的解析器生成器工具中相对受欢迎?
根据Wikipedia,LR 解析似乎比 LL 具有优势:
LR解析比LL解析可以处理更大范围的语言,并且在错误报告方面也更好,即当输入不符合语法时,它会尽快检测到语法错误。这与 LL(k)(或更糟糕的是,LL(*) 解析器)形成对比,后者可能会由于回溯而将错误检测推迟到语法的不同分支,这通常会使错误更难在具有长公共前缀的析取中定位.
注意:这不是家庭作业。当我发现 Antlr 是一个 LL 解析器生成器时,我感到很惊讶(尽管它的名字中有“LR”!)。
java - Java CUP 资源,还在用吗?
我最近的任务是编写使用 Java CUP 的代码。有人还在用吗?我在上面找到了一些小资源,但在主站点Java Cup Website上似乎没有太多文档。如果有任何邮件列表或用户,我想知道。顺便说一句,我不能使用慕尼黑人维护的新引擎,我必须坚持使用 0.1 版。
lalr - 将 LALR 转换为 LL
我有 SABLECC 的这个(工作)LALR 语法:
我试图将它转换为使用 ANTLR(LL 解析器生成器)的 XText。我在转换这两个左递归规则时遇到了麻烦:
我该怎么做?我认为我应该使用运算符优先级,但现在我不能只是以LL 的方式思考。
java - 如何为 Java 中的某些语法编写 LALR 解析器?
我想编写 Java 代码来为我的语法构建一个 LALR 解析器。有人可以推荐一些书籍或一些链接,我可以在其中学习如何为 LALR 解析器编写 Java 代码吗?
parsing - 如何理解 LALR Shift/Reduce 算法
我正在尝试阅读Niklaus Wirth 的Compiler Construction。在第 23 页,他开始描述 LALR 如何在x*(y+z)
给定以下语法的情况下解析表达式:
他继续将减少显示为:
动作是 S(表示移位)或 R(表示减少……为了清楚起见,我添加了行号)。所以我想我了解如何从步骤 1 到 4 以及从 4 到 20,但我不了解 4 本身。例如,步骤 1 将 x 压入堆栈。x 表示规则“F”的 RHS,因此会发生缩减 -> F。F 表示规则“T”的第一个“OR”,因此可能会发生另一个缩减 -> T。如果这是正确的(我不是确定是吗?),那么为什么不将 T 也替换为 E,因为 T 代表规则“E”的 RHS 的第一个“或”。是不是因为规则 E 有一个隐含的“EOF”可以这么说(因为我们还没有达到 EOF,所以它不能减少)?或者是因为它在这一点上是模棱两可的(T也代表规则T的RHS的第二个“OR”的第一部分......即,T "*" F)? 还是完全是别的东西?
谢谢!