问题标签 [compiler-compiler]
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.
regex - 在 TinyPG 中使用 BNF 中的现有语言?
如何在 TinyPG中使用GOLD 元语法(RegExp + BNF)中的这些 BNF 语法?我是 BNF 的新手,所以大约需要进行什么样的转换才能将 BNF 转换为 EBNF?
我相信这应该很简单,因为 TinyPG 需要 RegExp + EBNF,而 GOLD 语法是 RegExp + BNF。
另外,是否有任何可用语言的 TinyPG 源代码,只是为了看看我需要做什么样的转换?
c# - 什么是 TinyPG,它是如何工作的?
什么是 TinyPG,它是如何工作的?我知道它是一个“编译器-编译器”,但我该如何开始并在 C# 中创建自己的编译器?
php - 这个语法不是LR(1)吗?
我正在为 PHP 开发解析生成器。目前我正在尝试实现规范的 LR(1) 解析器,但它在以下语法上输出 reduce-reduce 冲突。这个语法不是LR(1)吗?还是我应该重新检查我的算法?
Bison(-like) 表示法的语法:
编辑:
计算表:
和冲突:
c# - 用于 C# 输出的最快解析器生成器工具是什么?
我正在寻找一个解析器生成器工具,它可以提供 C# 输出并且相当快。我的目标是像文本一样解析 JSON 并从中创建 CLR 对象。我为此使用了 GOLD Parser 引擎,但结果证明它对我的需要来说很慢。任何人都可以向我推荐一个可以发出 C# 代码的好且快速的解析器生成器工具吗?我听说过 Irony 和 ANTLR,但没有使用过它们的经验。它们生成的解析器速度快得多还是有更好的选择?
javascript - 需要关于一个 LALR(1) 解析的帮助
我正在尝试解析一种无上下文的语言,称为Context Free Art。我使用类似 YACC 的 JS LALR(1) 解析器生成器JSCC在 Javascript 中创建了它的解析器。
以下面的 CFA (Context Free Art) 代码为例。此代码是有效的 CFA。
注意上面的A
and s
。s
是缩放 的命令CIRCLE
,但A
只是此规则的名称。在语言的语法中,我设置s
为标记SCALE
并A
属于标记STRING
(我有一个正则表达式来匹配字符串,它位于所有标记的底部)。
这工作正常,但在以下情况下它会中断。
这也是一个完全有效的代码,但是由于我的解析器在标记s
之后标记rule
为SCALE
标记,所以它错误地指出它正在期待STRING
.
现在我的问题是,是否有任何方法可以重写解析器的生产规则来解决这个问题?相关的生产规则是:-
我能想到的一个简单的解决方案是创建上述规则的副本,STRING
替换为SCALE
,但这只是需要此类修复的许多类似规则之一。此外,还有许多其他终端可以匹配到STRING
。所以这意味着太多的规则!
java - 支持Java变量关键字和运算符的解析器生成器(编译器-编译器)?
是否有任何支持不同关键字和运算符的解析器生成器(编译器-编译器)?
我的语言有可自定义的关键字和运算符(可以有多个符号并在其中包含字母)。我之前通过将特殊符号映射到运算符和关键字,然后使用 JFlex 绕过了这个问题。现在,随着语法高亮问题的出现(我们为此使用 RSyntaxPane),这根本行不通。
编辑:顺便说一句,我只需要词法分析器部分。
另外,一些例子:
在俄罗斯布局中,缺少大括号。在俄语翻译中:
关键字也可以本地化,例如“function”在俄语翻译中是“функция”。
java - Java的语法编译器编译器
我的公司正在尝试为 Android 编写一些软件。我们想使用 Java,并且公司软件的一个组件是 c++,因此需要移植(或者至少在尝试 NDK 之前需要尝试移植)。此代码是使用Accent创建的,它定义了语法语法。据我所知,最初的作者(现在已经走了)写了一个语法来指定如何指定一个语法,然后用那个语法和口音编译了一个编译器-编译器。编译器-编译器采用指定格式的语法并生成二进制代码来解析符合该语法的字符串。这是语法的示例片段:
我的问题是如何使用 Java,使用 Antlr 或其他一些工具来做到这一点。编译器-编译器-编译器对我来说似乎相当复杂。或者,我想知道如何轻松编译/解析这种包含语法和语义 XML 信息的语法。
parser-generator - 什么解析器生成器软件在 C# 上运行,使用左递归解析语言并可以生成抽象语法树?
我花了一上午的时间来了解 ANTLR 的基础知识,才发现它只是 LL。我需要在我的语法中保留左递归,以便语法树具有从左到右的关联性。
编辑 2: 最近我需要另一个解析器生成器。虽然 MPEx 和 MPPG 工作,但配置起来有些冗长,所以我想我会再看一遍。这次我遇到了 Hime Parser Generator——在一两个小时内,我就有一个解析器将基本表达式转换为可以编译和调用的 LINQ 表达式。这很简单,我推荐它而不是 MPEx 和 MPPG。
编辑 1: GOLD Parser 可以满足我的需要,但它的源不可用,因此无法使用它。
MPlex 和 MPPG 是 Microsoft 的官方产品,分别是 Lex/Flex 和 Bison/Yacc。关于它们的文档并不多,它们也不是上述开源项目的完全克隆,但可以用这些来做我需要的事情。如果你不需要处理现实世界的政治,我推荐 GOLD,因为它有一个很好的调试 GUI 和一切,但如果你被迫开源或微软官方项目,MPLex 和 MPPG可能是要走的路。请注意,上述两个应用程序实际上只是 GPLEX 和 GPPG 的衍生产品。后两者可能比微软的衍生产品更新,因为我认为微软放弃了这个项目。我能找到的有关 Microsoft 衍生产品的唯一文档包含在 VS 2008 SDK 中的两个 PDF 文件中。微软拿走了pdf' 尽管随 VS 2010 SDK 一起提供了 exe,但还是解释了它们的用法。不过,看起来 pdf 和 exe 都不会随 2012 一起提供。
antlr - 从 DSL 语法文件生成 java 类
我正在寻找一种从将填充 AST 的语法文件(类似 BNF/BNF)生成解析器的方法。但是,我还希望以开发人员可读的方式自动生成各种 AST 类。
示例:对于以下语法文件
我希望生成以下 Java 类(以我期望它们的字段为示例):
而且,在运行时,我希望表达式“1+1-2”生成以下对象图来表示 AST:
(不要介意运算符优先级)。
我一直在探索 DSL 解析器生成器(JavaCC/ANTLR 和朋友),我能找到的最接近的方法是使用 ANTLR 生成具有“enterExpression”和“leaveExpression”样式方法的侦听器类。我发现使用“multi”使用 JavaCC 和 jjtree 生成的代码有点相似——但它非常笨拙且难以使用。
我的语法需求有点简单——我想尽可能地自动化 AST 对象图的创建。
有什么提示吗?
parsing - 如何使用野牛创建自上而下的“树”结构?
我找到了这个例子,但它创建了自下而上的树。是否可以使用 bison、flex 创建树自上而下?
伪代码: