问题标签 [antlr4]

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 投票
1 回答
687 浏览

arraylist - ANTLR 中的多个返回值

我将 ANTLR4 与 Java 一起使用,我想存储规则在解析输入时返回的值。我使用这样的语法:

但发生的情况是打印的查询数($query.qs 大小)始终为 1。发生这种情况是因为每次在输入中识别出 QUERY 元素时,它都会添加到 $qs ArrayList 中,但是对于每个其他 QUERY,都会实例化一个新的 ArrayList,并且此查询会添加到这个新的 ArrayList 中。当所有查询都被识别时,db : 规则的操作被调用,但 $query.qs ArrayList 只有最后一个查询。我通过维护存储查询的全局 ArrayLists 解决了这个问题。但是,当规则返回并且没有我自己的全局 ArrayLists 时,还有另一种方法可以使用 ANTLR 吗?

非常感谢,迪莫斯。

0 投票
1 回答
1245 浏览

antlr4 - antlr4 解析器重用和预热

在我的用例中,我必须使用生成的解析树上的访问者将数千个小的独立表达式解析为树表示。当前为每个解析操作创建新的流、词法分析器和解析器实例。

我认为这可能不是最佳的。哪些对象实例可以在这样的设置中重复使用以利用 ANTLR4 的预热属性?线程安全性如何——这些实例中的哪些应该是线程本地的?重用词法分析器或解析器实例是否需要某种类型的重置?

0 投票
1 回答
2991 浏览

antlr4 - ANTLR 4:动态令牌

鉴于:

我想知道如何在运行时更改为例如START_DELIM和.END_DELIM<%%>

有谁知道如何在 ANTLR 4 中做到这一点?

谢谢。

0 投票
1 回答
4058 浏览

maven - 自定义 Maven 以在构建时自动创建 ANTLR4 语法 java 文件

如何编译 ANTLR4 语法作为 maven 构建的第一步?

手动从 *.g4 文件创建语法非常简单——在 Linux 上,只需java -jar /usr/local/lib/antlr-4.0-complete.jar grammarName.g4从控制台运行即可。这会创建一些需要在下一步构建中编译的 java 文件。

是否可以指示 maven 查找所有 *.g4 文件,然后为每个文件运行上述命令,然后继续构建?如果语法编译失败,构建也应该失败。

或者也许有一个插件可以处理这个任务?

我已经看到了这个答案- 缺点是它依赖于 IDE。我希望我的构建尽可能独立于 IDE 和系统(而且我使用的是 Netbeans,所以给出的答案是不可接受的)。

编辑

我已经尝试了benzonico的建议。我添加了其他答案中引用的 pom.xml 中列出的依赖项。这是我的 pom.xml 的样子:

Java 文件是从 g4 文件中自动生成的,但不幸的是有很多错误。它们与我在手动编译并且类路径错误时所拥有的非常相似。一些错误是:

0 投票
6 回答
6684 浏览

antlr4 - 如何获得有关 antlr4-maven-plugin 的帮助

Antlr4-maven-plugin 似乎不在 Antlr4 网站上的文档中。

0 投票
0 回答
166 浏览

antlr4 - ANTLR 4 可以生成推送解析器吗?

ANTLR 4 可以像 bison 那样生成推送解析器吗?参考:http ://www.gnu.org/software/bison/manual/html_node/Push-Decl.html

我想知道 ANTLR 是否是在数据转换管道中实现解析器阶段的好选择。系统的一种配置是由向上游推送 ByteBuffers 的源阶段驱动的。

我们已经购买了“Definitive ANTLR 4 Reference”的副本,但在书中快速搜索发现没有提到类似的内容。

0 投票
1 回答
981 浏览

java - 如何处理出现在表达式或变量名中的语言特定保留字

我已经在这个问题上工作了大约 4 个小时。这是我的 ANTLR V4 语法文件,我已将其精简为最简单的示例。

我的文件包含

当我尝试解析输入的此文件时,component我收到以下错误:mismatched input 'return' expecting Identifier. 我无法弄清楚为什么会发生此错误。

更新

如果我理解正确,这是因为return它是 Java 中的保留字,这就是他们以这种方式构建语法的原因。在我的语言中,Coldfusion Cfscriptreturn是有效的,只要它的范围是:local.return, variables.return, local["return"]. 这也适用于ifelsesavecontent许多其他词,所有这些词仅在范围内有效,但作为变量或表达式的第一项无效:if.blah = "something"无效,但blah.if = "something"有效。这意味着我会在每一个术语中遇到同样的问题,因为它们会与抓取它们的解析器规则相冲突。

综合 Bart 所说的,这是解决这个问题的一种干净的方法吗?

0 投票
1 回答
495 浏览

antlr - 如何将一个令牌的长度依赖于另一个令牌的值?

我想标记一些二进制数据,其中某些部分的长度取决于先前标记的值。你可以这样想:

假设长度是两个字节的无符号整数,表示二进制数据的长度(以字节为单位)。

如何使用 ANTLR 4 实现这种关联?

0 投票
1 回答
107 浏览

antlr - 语义谓词从 Antr3 到 Antr4 的翻译

在我的 Antlr3 语法中,我使用以下词法分析器规则来识别恒定的日期周期,例如“1 YEAR 4 MONTHS”:

(信用到期的信用,来自Bart Kiers)。

不幸的是,这种语法在 ANTLR4 中已经消失了。所以,我没有成功尝试以下方法:

那也是不成功的。

谁能帮我翻译成新格式?

杰森

0 投票
1 回答
1030 浏览

antlrworks - 从 ANTLR4 中的 Parser 访问解析的数据

我正在通过我的自定义语法处理我的输入文件,并提取标记并将它们以HashMap. 在 ANTLR 3 中,我能够通过rule()在解析器上调用方法来解析文件并获得HashMap类似parser.record.

这似乎在 ANTLR 4 中不起作用。我参考了这本书,看来我必须调用parser.init()才能开始解析,但我在解析器中看不到任何方法。

我使用 ANTLRWorks 2 来生成我的词法分析器和解析器文件。我没有生成监听器类。