问题标签 [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.
sockets - 使用 Antlr 从永无止境的流中解析数据
Antlr 是否适合在要解析的文本之后从没有 EOF 的流中解析数据?根据我的观察,词法分析器在收到下一个标记的第一个字符之前不会发出当前标记。最重要的是 - 解析器似乎不会发出规则,直到收到下一条规则的第一个令牌。这是我尝试过的一个简单语法:
然后我将生成的解析器与 UnbufferedCharStream 和 UnbufferedTokenStream 一起使用:
当流变得“快速”时 - 没有任何反应。
当' b '进来-进入规则' fox '
然后是 ' roun ' - 什么都没有(流中有 2 个标记 - 还没有一个标记是 leser 的!)
只有在“ f ”之后,侦听器才访问第一个标记:“ quick ”
然后 - “牛”上什么都没有
在新行(unix)上:访问令牌'棕色'
现在流中包含所有数据(4 个标记),但只有 2 个标记被识别。
我发现为了通过系统推送这些标记,流可以发出 2 个标记,即语法已知的任何标记。它可能是 2 个额外的新行,或者我们说“狐狸”和“棕色”。只有这样标记“ fox ”和“ \n ”才被访问,解析器退出规则“ fox ”并完成解析。
这是一个错误还是一个功能?有没有办法消除这种滞后?
谢谢!
java - 导入使用不同模式的 ANTLR4 词法分析器语法
我正在尝试将词法分析器语法导入另一个词法分析器语法。导入的语法使用不同的模式(在 XMLLexer 示例模式 INSIDE 和 PROC_INSTR 中)。
编译时,我收到一个错误,即未定义与模式名称对应的变量。
作为一个具体的例子,我在 XMLLexer 之上定义了一个 HTMLLexer(来自 antlr4 书)并得到以下错误:
我可以通过使用附加标记重新定义顶级词法分析器中的模式来克服此错误,但是作为默认模式,其他模式中的导入标记无法识别。
如果我在主词法分析器定义中内联导入的部分,则解析器可以工作,但我想使用导入功能进行干净的分离。(不适用于 xml/html 示例,但在另一种情况下。)
是否可以使用导入使其工作,还是 antlr4 的限制?
antlr4 - 使用参数测试规则
我正在尝试在我的解析器中测试一些子规则,以检查变体。我正在检查的规则是表达式规则
在生成的解析中,方法签名是:
我无法确定要作为 _p 参数传递的值。
当我在解析器中检查对表达式方法的调用时,我看到 0 被传递。但是,当我尝试直接调用 parser.expression(0) 时,我得到一个空指针异常。
调用此子规则以启用单元测试的推荐方法是什么?
作为参考,这是我正在尝试编写的单元测试平台的代码:
antlr4 - ANTLR 后记树
您可以使用 antlr4 TestRig-ps
生成 PostScript 树。我看不到我的树。
后记:
GhostView 中的错误:
eclipse - 如何使用 ANTLR4 和 Maven 自动生成 lexer+parser?
我是 ANTLR4 的新手,似乎 v4 没有 Eclipse-Plug-In。因此,最好从 .g4 语法自动构建 Java 源代码。我有一个简单的空 Maven 项目,带有 src/main/java、src/test/java。在哪里放置 .g4 文件?如何使用 Maven 自动构建语法?
我自己的 POM 测试失败:
日食 说:
antlr4 - ANTLR4:匹配所有输入选项exaclty一次
在 ANTLR 中,如何制定规则以任何顺序仅匹配其所有备选方案一次?
IE
我希望 'example' 和 'example2' 在进入下一条规则之前只匹配一次。
应匹配以下输入:
或者
但不是以下输入:
antlrworks - 组合语法中未识别来自导入语法的词法分析器模式。单击“在 testRig 中运行”Antlrworks2 后出现编译错误
我正在使用 Antlrworks2。词法分析器语法中定义了“词法模式”。我结合了导入词法分析器语法的语法。从组合语法生成代码后,它将生成两个 .java 文件。例如:如果我的组合语法文件名为“xyz.g4”,则 java 文件名为“xyzLexer.java”、“xyzParser.java”。但是当我在 Antlrworks2 中单击“在 TestRig 中运行”时,它会在控制台中出现以下错误。
正如我在 CDFCombinedGrammarLexer.java 中观察到的(在上面的示例 xyzLexer.java 中),“词法模式”的代码不存在。我可以在从实际词法分析器文件生成的 java 文件中找到 mode 的代码。
下面是我可以在实际的词法分析器生成的 java 文件中看到的代码。
有什么帮助吗???我在等!!!
提前致谢!
antlr4 - ANTLR4:在侦听器中获取特定规则的令牌列表
我正在扩展 ANTLR4 中的侦听器,并且我想获取与解析器中的特定规则相关联的所有标记,有没有这样做的方法?
IE
如何告诉我的听众在输入解析规则时查找值CONFIG
和时间?EQUALS
myConfiguration
我可以使用某种 for 循环吗?
我可以通过解析器类看到有一个标记列表,但我找不到与当前规则关联的标记列表。
我问这个的原因是为了避免重新输入我在侦听器和语法中需要的令牌名称。通过这样做,我可以检查是否已找到该特定规则中的每个令牌类型,而无需手动输入名称。
antlr4 - ANTLR4:树结构
我正在扩展 baseClass 侦听器并尝试读取一些值,但是顺序中似乎没有任何层次结构。
我的语法的精简版如下:
然而,这个实现的解析树在 config_options 级别(终端级别)是平坦的,即规则开始有许多 config_options 的子节点,但 EQUALS 不是 config_options 子树的根,所有 TOKENS 都将规则 config_options 作为根节点。如何使其中一个终端成为根节点?
在这个特定的规则中,我不希望捕获任何空格,我知道有 -> skip 是针对词法分析器的,但是在某些情况下我确实想要空格。即在字符串 '"'(ALPHANUM|' ')'"'
(注意: ^ 似乎不起作用)
输入示例是:
键=abcdefg
键=90weata
键=acbefg9
我要做的就是提取键和值对。我希望“=”是根,两个孩子是键和值。
parsing - ANTLR4 整数解析失败
我正在尝试使用 antlr 4 解析文件,但我不明白为什么不解析多于一位的整数(第 79:44 行在输入“17”处没有可行的替代方案)。
这是整个语法http://pastebin.com/rxktvUBi
这是int的定义
这根本不起作用。这个版本
仅适用于 1 位整数。
这是未解析的行的示例
问题出在
请注意,如果我使用标识符
而不是整数
这样可行。
为什么?任何想法?