antlr4相关内容

ANTLR4 歧义语法

我想实现以下行为:User:class 应该被解析为 Object - User;类型 - 类,也Us:er:class 应该结果 Object - Us:er;类型 - 类.我无法使第二部分工作,只要我添加 : 作为 WORD 的合法符号,它就会将整个输入解析为一个对象 Object - Us:er:class.我的语法: 语法草图;/** 解析器规则*/输入:(对象)+ EOF ;对象:对象 ..
发布时间:2021-11-11 04:10:53 其他开发

ANTLR孤岛文法和消耗过多的非贪婪规则

我遇到了孤岛语法和用于消耗“除我想要的之外的所有东西"的非贪婪规则的问题. 预期结果: 我的输入文件是一个 C 头文件,包含函数声明以及类型定义、结构、注释和预处理器定义.我想要的输出只是函数声明的解析和后续转换.我想忽略其他一切. 设置和我尝试过的: 我尝试 lex 和解析的头文件非常统一和一致.每个函数声明前面都有一个链接宏PK_linkage_m,并且所有函数都返回相 ..
发布时间:2021-11-11 04:10:50 其他开发

Antlr4在jsx中解析templateLiteral

我尝试使用在grammars-v4项目中定义的语法(https://github.com/antlr/grammars-v4/tree/master/javascript/jsx) 来解析 jsx 文件.当我解析下面的代码片段时, let str =`${dsName}${parameterStr ?`( ${parameterStr} )` : ""}${returns ?`{${return ..
发布时间:2021-11-11 04:10:47 其他开发

如何使用 ANTLR4 解析嵌套源文件 - 再试一次

我在 Terrence Parr 的一篇文章中找到了代码(转载如下),该文章展示了如何在 ANTLR3 for Java 中处理 INCLUDE 文件.我试图将它添加到我与 ANTLR4(带有 C++ 目标)一起使用的语法中,但是当我尝试生成解析器时,出现错误 error(50):: 语法错误:'^' 对我来说完全出乎意料错误(50)::语法错误:不匹配的输入'->'匹配规则时期待 SEMI错误 ..
发布时间:2021-11-11 04:10:39 其他开发

ANTLR4 行注释和文本解析问题

我正在编写 C++ 头样式文件的解析器,并面临正确处理行注释的问题. CustomLexer.g4 词法分析器语法 CustomLexer;空格:[ \r\n\t]+ ->跳过;COMMENT_START : '//' ->推模式(COMMENT_MODE);PRAGMA : '#pragma';部分:'@部分';定义:'#define';UNDEF : '#undef';如果如果';EL ..
发布时间:2021-11-11 04:10:36 其他开发

如何在 Python3 的 ANTLR4 中捕获无关输入?

是的,这几乎是 如何在 ANTLR4 中捕获无关输入的重复? - 但在 Java 的情况下,我需要一个 Python 解决方案,而移植 Java 解决方案对我不起作用! ANTLR4 正在写入以下“错误":到控制台.我希望这导致硬停止,但解析器继续并最终重新同步: line 12:28 外来输入 'FREDDY' 期望 {'AS', ... 我希望这是一个致命的错误. 因此,我定义 ..
发布时间:2021-11-11 04:10:32 Python

如何使用递归使 ANTLR 消耗所有可用元素?

这是我的语法: 语法测试;文字:foo EOF;富:'X'|'('富')'|富'!|富尾巴;尾巴: (' ' foo)+; 这是它完美解析的输入: X (X!(X)!(X X X)!!!) X 然而,输出树有太多 tail 元素,正如我之前解释的 此处.可以解决这个问题吗? 解决方案 感谢@kaby76,找到了解决方案: foo:“X"尾巴?|'(' foo ')' 尾巴?|'! ..
发布时间:2021-11-11 04:10:29 Java开发

如何使用 ANTLR4 解析嵌套的源文件?

我以前问过这个问题(略有不同),但当时没有足够理解答案,无法给出明智的反馈(叹气). 我需要能够在任意点将文件包含在其他文件中,因此我需要能够使用单个解析树拥有一堆文件. 如果我自己写这个(而且我过去已经这样做了),我的解析器会识别“Include xyz"或“Import abc",并且会导致词法分析器暂停从当前文件读取,推动它文件在堆栈上,并继续从新文件中读取字符,直到用完为止. ..
发布时间:2021-11-11 04:10:26 其他开发

如何在 ANTLR4 中终止词法分析器

是否有一种简单的方法可以终止词法分析器? 有些令牌我还不想处理.但我也希望 Lexer 在输入确实包含这些标记时发出警报.我的简单策略是在一个动作中抛出一个 RuntimeException: CHARIZING: '#@' {throw new RuntimeException("charizing op 不支持");}; 但是该操作会产生编译错误,因为生成的 Lexer 在该操作之后 ..
发布时间:2021-11-11 04:10:21 其他开发

在ANTLR中所有情况下都可以消除左递归吗?

说我有以下内容 语法 #1 expr:expr 和 expr|expr 或 expr|基本的; 然后变成了这个. 语法#2 expr:和Expr|基本的;andExpr: orExpr AND orExpr;orExpr: ... 或 ...; 但我仍然不明白这将如何解决问题?在语法 #1 我可以表达 真假真假真假真假真假 我可以用 Grammar #1 保持这样的链接.但 ..
发布时间:2021-11-11 04:10:18 其他开发

Antlr4,如何报告特定的语法错误

我正在尝试使用 antlr4 为我的简单语法编写一些错误检查. 语法本身是由函数构造的. 即 FUNCTION hello (n){......}函数主 (n) {......} 我不确定它是如何捕捉特定错误的,例如缺少函数名称或缺少主函数 这是我的 ErrorListener 的样子 import org.antlr.v4.runtime.*;导入 org.antlr.v ..
发布时间:2021-11-11 04:10:11 其他开发

antlr 4:所有这些令牌都应该出现在 AST 中吗?

我的最终目标是将结构化文件解析为内存中对象树,然后我可以对其进行操作.我使用的文件格式相当复杂,大约有 200 个关键字/标签,这似乎是学习解析器/词法分析器框架的一个很好的理由. 不幸的是,有太多的概念(以及数百个教程和指南),到目前为止的学习过程感觉就像试图用消防水管喝水.所以我正在采取一些非常微薄的婴儿步骤,从 这个例子. 我修改了语法以创建以下测试 Nano.g4: 语法纳米 ..
发布时间:2021-11-11 04:10:08 其他开发

Antlr 4 解析大型 c 文件需要永远

我有一个大型 c 代码文件 (>9000 LoC) 并尝试使用以下语法解析它: https://github.com/antlr/grammars-v4/blob/master/c/C.g4 我等了一个多小时才中止.该机器是带有4GB内存的Core 2 Duo L9400.最大 java vm-heap-size 设置为 2GB.它不会产生任何解析错误,但它根本没有完成. 在做了 ..
发布时间:2021-11-11 04:10:06 其他开发

ANTLRWorks 2.1:在 Eclipse 中生成 Lexer+Parser 导致 UUID 异常

我是 ANTLR 和 ANTLRWorks 的新手,所以我很困惑:我正在使用 ANTLRWorks 2.1 来创建语法并随后创建词法分析器和解析器(Java 目标).然后,我创建了一个小型 Eclipse 项目,并从 ANTLRWorks 导入了 ANTLR4 jar 以手动调用词法分析器和解析器,如 ANTLR 书籍示例中所述.运行应用程序时出现以下异常: Caused by: java.la ..
发布时间:2021-11-11 04:10:03 其他开发

在 ANTLR 中规范化标记文本

ANTLR 有没有办法将某些标记标记为具有规范输出? 例如,给定语法(摘录) words : FOO BAR BAZFOO : [Ff] [Oo] [Oo]酒吧:[Bb] [Aa] [Rr]BAZ : [Bb] [Aa] [Zz]SP : [ ] ->频道(隐藏); words 将匹配“FOO BAR BAZ"、“foo bar baz"、“Foo bAr baZ"等 当我调用 T ..
发布时间:2021-11-11 04:10:00 其他开发

在 Antlr 中跳过不匹配的输入

有没有办法在语法中指定我想跳过所有与任何规则不匹配的输入(否则会引发识别错误)? 解决方案 是的.实现取决于您需要/想要跳过的位置. 在词法分析器中,最后一条规则如: 未知:.->跳过 ;//或 ->频道(隐藏); 将消耗任何其他不匹配的输入字符,但会阻止它们被解析器标记和考虑.您确实希望一次匹配一个字符,以便在每个输入文本索引处所有其他词法分析器规则都有机会首先匹配. 同 ..
发布时间:2021-11-11 04:09:57 其他开发

使用 Java 在 ANTLR4 中绘制解析树

我是 ANTLR4 的新手,当我第一次在命令行中尝试它时,我使用的是带有 gui 参数的 grun.现在我正在开发一个 Java 应用程序,我想在执行我的 Java 程序时显示相同的对话框. 我成功生成了 ParseTree,我可以浏览它.但我也想显示它.我认为它与 TreeViewer 类有关,但我不知道如何使用它. 谢谢 解决方案 TreeViewer 是一个 Swing ..
发布时间:2021-11-11 04:09:54 Java开发