问题标签 [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.
antlr - Stringtemplate 模板参数总是被评估为一个字符串
我正在使用 Antlr 4 RC1(完整的 jar)来解析语法,构建自定义 ast,并使用 stringtemplate4 从该 AST 生成代码(我使用 antlr jar 中的 stringtemplate 类)。在模板中,我调用另一个带有 bean 列表的模板,例如
然后在子模板中我得到一个字符串列表(每个字符串都是评估为字符串的 bean 之一)。但我需要的是 java bean 的列表(例如带有属性的简单 java 对象),因为我想处理 bean 的属性而不是 bean 的值,例如
在我看来,模板的参数总是被评估为字符串。这是预期的行为吗?如果是,我还应该写什么?
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
视为两个令牌abc
,def
而不是abcdef
,我理解为什么(当 Lexer 看到-\n
它发出ID
令牌时abc
,丢弃-\n
并def
作为新令牌开始。)。解析器看到abc
def\n
而不是abcdef\n
.
问题是,有没有办法让解析器将abc-\ndef\n
其视为一个令牌而不是两个?
另一方面,如果源代码 =abc -\ndef\n
那么它应该合法地发出 2 个令牌,因为 和 之间有abc
空格-\n
。
antlr4 - antlr4 sql语法
ANTLR4 有可用的 sql 语法吗?如果是这样,我在哪里可以找到它?
有一个来自 ANTLR wiki 的链接,但链接已损坏:语法列表
antlr4 - 调试ANTLR4语法
我是 ANTLR 的 n00b 并且通过尝试让 ASN.1 解析器在 ANTLR4 中运行而变得更大。我目前正处于将输入文件传递给 grun 并看到诸如“第 1:12029 行在输入时没有可行的替代方案......”之类的错误的阶段
我试图将这与我的规则的一些问题联系起来,但通过字符数定位有问题的输入是一个挑战。ANTLR 解析器将输入视为单行是正常的,还是因为规则问题(我在 OSX 系统上)而无法识别 EOL?如果将输入视为一长行是正常的,有人可以推荐一种用于在文件中定位给定字符位置的工具吗?
java - ANTLR 从 Java 反编译
我在 .java 文件中有 ANTLR 3 的 Parser 和 Lexer 的 Java 源代码,并希望查看所有规则等背后的实际语法。
甚至可能吗?
antlr4 - 需要一个 ANTLR4 树行走线索
自从我的(一个)编译器课程以来已经有很多年了,如果这个问题不恰当,请原谅我。我也是 ANTLR 和 C 而不是 Java 编码器的新手。我想做的是描述我的问题,然后寻求最佳技术的建议。
我正在尝试将 ASN.1 作品翻译成 ML。例如,
进入
我的(简化的)ASN1 语法是:
“The Definitive ANTLR4 Reference”中的几个示例演示了在 BaseListener 中覆盖某些 enterNode 或 exitNode 方法,所需的一切都在 Node 的上下文中。我的问题是我想覆盖enterTypeAssignment
and exitTypeAssignment
,但我需要的一些信息位于解析树上更高(例如分配)或更低(例如枚举)的节点中。
这里是否有足够的描述来询问我是否应该使用访问者或侦听器模式?任何关于关注哪些书本示例的建议将不胜感激。
我对蛮力方法有一些运气:
但可能有一个更优雅的解决方案......
更新:我得到了我想要的结果,方法是在树下的途中将 TerminalNodes 保存在全局变量中,并让这些变量可以访问以覆盖树下更远的侦听器中的方法。有没有更好的方法从给定节点访问父或祖父上下文?
antlr - ANTLR 4 树注入/重写运算符
在 ANTLR 3 中,您可以执行以下操作:
知道如何在新版本中做到这一点吗?
parsing - ANTLR 4:语法错误和“输入时没有可行的替代方案”
我正在使用这样的ANTLR 4:
以及以下语法:
我有以下输出:
我认为我的语法有错误,但我没有看到。你有想法吗?
为了您的帮助,在此先感谢。
lexer - 如何使用 antlr 4 TokenStream 作为可迭代流?
我使用 antlr 4 创建了一个词法分析器,用于对土耳其自然语言文本进行标记,我需要做的是有一个标记流,我可以一个一个地获取标记。如果我像这样使用 CommonTokenStream ,它会返回一个列表:
但是我不想构建一个令牌列表,因为我的输入可能很大,我只想要这样的东西:
我会迭代直到获得 EOF 令牌。
是否有允许我迭代令牌的令牌流?
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: