问题标签 [gppg]

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.

0 投票
6 回答
9426 浏览

grammar - 转变减少冲突

我在理解我知道没有歧义的语法的移位/减少冲突时遇到问题。该案例是 if else 类型之一,但它不是“悬空 else”问题,因为我有强制 END 子句分隔代码块。

这是 gppg 的语法(它是一个类似于 Bison 的编译器编译器......这不是回声):

这是冲突输出:

我已经切换了所有内容,并且我确实知道如何解决它,但是该解决方案涉及放弃“elseif”上的左递归以进行右递归。

我已经浏览了我在互联网上找到的关于这个问题的所有稀缺文档(我在最后发布了一些链接),但仍然没有找到一个优雅的解决方案。我知道 ANTLR,我现在不想考虑它。请将您的解决方案限制为 Yacc/Bison 解析器。

我会很欣赏优雅的解决方案,我设法通过消除 /* empty */ 规则和复制所有需要空列表的内容来做到这一点,但在我正在研究的更大的语法中,它最终就像“意大利面条语法综合症”一样。

以下是一些链接:

http://nitsan.org/~maratb/cs164/bison.html

http://compilers.iecc.com/comparch/article/98-01-079

GPPG,我正在使用的解析器

野牛手册

0 投票
3 回答
1852 浏览

c# - 使用 C# 和 gppg,我将如何构建抽象语法树?

有没有办法做到这一点几乎是开箱即用的?

我可以编写一个大方法,使用收集到的标记来确定哪些叶子应该放在哪些分支中,最后填充一个 TreeNode 对象,但是由于 gppg 已经使用提供的正则表达式处理了所有事情,我想知道是否有更简单的方法吗?即使没有,任何关于如何最好地解决创建 AST 问题的指针都将不胜感激。

抱歉,如果我说了什么愚蠢的话,我才刚刚开始玩编译器游戏。:)

0 投票
2 回答
294 浏览

parsing - 帮助解决 Shift/Reduce 冲突 - 尝试建模 (XA)* (XB)*

我试图模拟 EBNF 表达式

我已经建立了 yacc(我使用 MPPG)语法,它似乎代表了这一点,但它与我的测试表达式不匹配。

我要匹配的测试用例是

来自词法分析器的令牌流是

语法分析表明存在“Shift/Reduce 冲突,KW_Declare 上的状态 6”。我试图用“%left PrologHeaderList PrologBodyList”解决这个问题,但两种解决方案都不起作用。

KW_Declare KW_Namespace KW_Variable 分隔符都是具有值“declare”、“naemsapce”、“variable”、“;”的标记。

0 投票
3 回答
19971 浏览

parsing - 让 YACC 输出一个 AST(token tree)

是否可以让 YACC(或者我是 MPPG)输出一个抽象语法树(AST)。

我正在阅读的所有内容都表明让 YACC 执行此操作很简单,但我正在努力了解您如何知道何时在构建树中的节点时向上移动它。

0 投票
1 回答
782 浏览

c# - GPPG (bison) - 如何实现一个“表达表达”的概念

我们正在使用 GPPG(本质上是 C# 的野牛)为编程语言生成解析器。一切都很好,除了一个非常讨厌的地方。我们正在解析的语言有一种“隐式比较”规则,其中“表达式表达式”应该被解释为“表达式 == 表达式”。

例如,这是一个完全有效的陈述:

这显然在解析器生成期间引入了各种冲突。我第一次尝试解决它们是沿着这些思路进行的(为简洁起见进行了编辑)。我试图对规则进行一些重构,它似乎不再模棱两可了,但我一定只是遗漏了一些明显的东西。

这是一个非常小的语法,显示了我遇到的冲突,以及我如何尝试解决它,但不起作用

任何帮助将不胜感激

0 投票
2 回答
377 浏览

parsing - D 中的 gppg/gplex 等价物?

当我使用 C# 工作时,我发现gppggplex解析器/词法分析器生成器非常适合我的需求。我想知道 D 编程语言是否有类似的东西(即,一个实用程序,给定 BNF 或 EBNF 中的语法,输出 D 代码,将该语言 lexes/parses 为抽象语法树)。

我找到的最接近的是Goldie,但我很难理解它,以至于我无法启动和运行任何东西。

0 投票
5 回答
8673 浏览

c# - 解析器生成器:如何一起使用 GPLEX 和 GPPG?

在浏览了关于好的 C# 解析器生成器的帖子后,我偶然发现了 GPLEX 和 GPPG。我想使用 GPLEX 生成令牌,以便 GPPG 解析和创建树(类似于 lex/yacc 关系)。但是,我似乎找不到关于这两者如何相互作用的例子。使用 lex/yacc,lex 返回由 yacc 定义的标记,并且可以将值存储在 yylval 中。这是如何在 GPLEX/GPPG 中完成的(他们的文档中缺少它)?

附件是我想转换为 GPLEX 的 lex 代码:

谢谢!安德鲁

0 投票
1 回答
127 浏览

c# - GPPG-Grammar - 永远不会使用的规则

我的一些语法规则有问题。

语法如下:

使用输入检查:

对于此输入,应使用以“defLine”为首的产生式的第二条规则。

为什么不呢?将始终使用第三条规则并引发错误

非常感谢您的帮助,亚历克斯