问题标签 [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 回答
1272 浏览

antlr - Stringtemplate 模板参数总是被评估为一个字符串

我正在使用 Antlr 4 RC1(完整的 jar)来解析语法,构建自定义 ast,并使用 stringtemplate4 从该 AST 生成代码(我使用 antlr jar 中的 stringtemplate 类)。在模板中,我调用另一个带有 bean 列表的模板,例如

然后在子模板中我得到一个字符串列表(每个字符串都是评估为字符串的 bean 之一)。但我需要的是 java bean 的列表(例如带有属性的简单 java 对象),因为我想处理 bean 的属性而不是 bean 的值,例如

在我看来,模板的参数总是被评估为字符串。这是预期的行为吗?如果是,我还应该写什么?

0 投票
1 回答
916 浏览

escaping - 通过转义(忽略)继续符号和换行符('\n')在下一行继续标记(即 ID)的语法

IBM i 控制语言 (CL) 语句以\n(newline) 结尾,并在下一行使用+\n-\n继续一个长语句(从下一行-的位置 1 继续,从下一行+的第一个非空白字符继续)。我在书中使用了 ANTLR4 RC1 "Fun with Python Newlines" 示例,这是一个非常接近的匹配并且工作正常,前提是+or-继续字符不会拆分标记文本。例如,这在 CL 中有效:

-或者-

这是一个简单的测试装置的语法,仅支持ID-作为换行符:

注意:基于 lexmagic/SimplePy.g4

这是运行它的方法(在终端需要所有导出和别名之后):

ANTLR4 将ID视为两个令牌abcdef而不是abcdef,我理解为什么(当 Lexer 看到-\n它发出ID令牌时abc,丢弃-\ndef作为新令牌开始。)。解析器看到abc def\n而不是abcdef\n.

问题是,有没有办法让解析器将abc-\ndef\n其视为一个令牌而不是两个?

另一方面,如果源代码 =abc -\ndef\n那么它应该合法地发出 2 个令牌,因为 和 之间有abc空格-\n

0 投票
4 回答
22703 浏览

antlr4 - antlr4 sql语法

ANTLR4 有可用的 sql 语法吗?如果是这样,我在哪里可以找到它?

有一个来自 ANTLR wiki 的链接,但链接已损坏:语法列表

0 投票
1 回答
1287 浏览

antlr4 - 调试ANTLR4语法

我是 ANTLR 的 n00b 并且通过尝试让 ASN.1 解析器在 ANTLR4 中运行而变得更大。我目前正处于将输入文件传递给 grun 并看到诸如“第 1:12029 行在输入时没有可行的替代方案......”之类的错误的阶段

我试图将这与我的规则的一些问题联系起来,但通过字符数定位有问题的输入是一个挑战。ANTLR 解析器将输入视为单行是正常的,还是因为规则问题(我在 OSX 系统上)而无法识别 EOL?如果将输入视为一长行是正常的,有人可以推荐一种用于在文件中定位给定字符位置的工具吗?

0 投票
1 回答
548 浏览

java - ANTLR 从 Java 反编译

我在 .java 文件中有 ANTLR 3 的 Parser 和 Lexer 的 Java 源代码,并希望查看所有规则等背后的实际语法。

甚至可能吗?

0 投票
1 回答
1561 浏览

antlr4 - 需要一个 ANTLR4 树行走线索

自从我的(一个)编译器课程以来已经有很多年了,如果这个问题不恰当,请原谅我。我也是 ANTLR 和 C 而不是 Java 编码器的新手。我想做的是描述我的问题,然后寻求最佳技术的建议。

我正在尝试将 ASN.1 作品翻译成 ML。例如,

进入

我的(简化的)ASN1 语法是:

“The Definitive ANTLR4 Reference”中的几个示例演示了在 BaseListener 中覆盖某些 enterNode 或 exitNode 方法,所需的一切都在 Node 的上下文中。我的问题是我想覆盖enterTypeAssignmentand exitTypeAssignment,但我需要的一些信息位于解析树上更高(例如分配)或更低(例如枚举)的节点中。

这里是否有足够的描述来询问我是否应该使用访问者或侦听器模式?任何关于关注哪些书本示例的建议将不胜感激。

我对蛮力方法有一些运气:

但可能有一个更优雅的解决方案......


更新:我得到了我想要的结果,方法是在树下的途中将 TerminalNodes 保存在全局变量中,并让这些变量可以访问以覆盖树下更远的侦听器中的方法。有没有更好的方法从给定节点访问父或祖父上下文?

0 投票
2 回答
7783 浏览

antlr - ANTLR 4 树注入/重写运算符

在 ANTLR 3 中,您可以执行以下操作:

知道如何在新版本中做到这一点吗?

0 投票
1 回答
9469 浏览

parsing - ANTLR 4:语法错误和“输入时没有可行的替代方案”

我正在使用这样的ANTLR 4:

以及以下语法:

我有以下输出:

我认为我的语法有错误,但我没有看到。你有想法吗?

为了您的帮助,在此先感谢。

0 投票
1 回答
4024 浏览

lexer - 如何使用 antlr 4 TokenStream 作为可迭代流?

我使用 antlr 4 创建了一个词法分析器,用于对土耳其自然语言文本进行标记,我需要做的是有一个标记流,我可以一个一个地获取标记。如果我像这样使用 CommonTokenStream ,它会返回一个列表:

但是我不想构建一个令牌列表,因为我的输入可能很大,我只想要这样的东西:

我会迭代直到获得 EOF 令牌。

是否有允许我迭代令牌的令牌流?

0 投票
2 回答
8093 浏览

java - antlr 4 无法加载为词法分析器或解析器

我正在使用 antlr 4 来编写我的语法。我想看看我的语法生成的gui三。当我尝试在 antlr 站点(http://www.antlr.org/wiki/display/ANTLR4/Getting+Started+with+ANTLR+v4)上运行该示例时,它可以工作,但如果我尝试使用我的语法它不会不行。特别是,我还尝试使用“在 TestRig 中运行..”命令在 NetBeans 和 AntlrWorks 2 上运行语法,但结果是相同的错误消息““无法将故障加载为词法分析器或解析器”。

这是我的语法:

这是我的文件 build.xml: