问题标签 [antlr2]

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 回答
186 浏览

java - 如何从 antlr v2 转换为 v3 语法?

我在 ANTLR 的 v2 中有以下语法,我需要帮助将其转换为 v3

实际上我在下面尝试过,但不确定它是否相同,并且在尝试构建解析器时也会出现以下错误

并低于错误

如何转换"!" in v3 from v2?

请用你的专业知识帮助我......

我还有一个问题是如何在 v3 中在语法级别编写树解析器,就像在 v2 中我们以前以以下格式编写的一样

0 投票
0 回答
70 浏览

java - 我的带有可选标记的 ANTLR 语法在简单语句上失败

我使用 ANTLR 2.7 创建语法来解析简单的表达式,例如

它是简单的数字,可以有括号和可选的百分比字符

我的语法如下所示:

我可以成功解析例如

但它无法解析单个数字:

如果我删除其中一个| LPAREN^ parexpr RPAREN!: (NUMBER PCT) => NUMBER PCT^然后我可以解析一个数字(但显然不是其他表达式)。

我不明白为什么我不能用这个语法解析一个数字..?

请注意,我正在处理一个很久以前用这个版本实现的项目,我只是在扩展现有的东西。

0 投票
0 回答
107 浏览

java - Java 8 编译时堆要求/设置

最近,我将开发环境从 Java 6 升级到 Java 8。在编译期间(超过 4,000 个源文件),我在使用 Java 8 编译时遇到了 OutOfMemory 错误。为了解决这个问题,我不得不增加我的 ANT javac 任务memoryMaximumSize 属性值从 512m 到 1024m。

在使用任务管理器检查流程时,我可以看到为什么需要上述更改。编译进程内存利用率从大约 480 MB 增加到大约 960 MB。我有点犹豫是否盲目地实施这个改变。所以,我想知道:

为什么这个改变是必要的?

使用更多内存的 Java 8 编译器是否发生了变化?

是不是旧的 ANTLR 在与 Java 8 一起使用时效率低下?(这是我相信的)

我的环境:

  • Java 8u66(32 位)
  • 视窗 8
  • 日食火星(32 位)
  • ANTLR 2.7.7

如果您想知道为什么是 32 位,我们有一些 32 位的旧版 DLL(目前)无法替换。

0 投票
0 回答
67 浏览

java - ANTLR 2 SBT 插件依赖项

我在 build.sbt 中定义了以下内容

libraryDependencies += "antlr" % "antlr" % "2.7.7"

我已将我的sample.g文件放在 src/main/antlr 我的 java 文件也放在 src/main/java 中。

activator compile用来编译文件。编译 java 文件并创建类,但语法文件不会发生解析器和词法分析器文件生成。我是否需要设置任何其他配置才能自动生成文件?

请注意,语法文件是在某个时候写回的。移植到 ANTLR 3/4 需要付出巨大的努力。

0 投票
0 回答
44 浏览

java - ANTLR2 错误报告

当解析器/词法分析器遇到错误时,它会将其打印到console并恢复,以便进行解析。对于最终用户,这是一个API调用,我想告诉他解析错误,以便他纠正。目前,我只能检测到发生了错误。

我的问题:如何将错误消息传播给最终用户?我无法收到错误消息,因为这是在 ANTLR 生成的解析器/词法分析器文件中处理的。

为 Java 生成的语法。

编辑1:语法是在某个时候写的。所以,只需要ANTLR2中的解决方案。

编辑 2:我发现如果我们设置defaultErrorHandler=false;,那么默认的错误处理程序不会在词法分析器/解析器中生成,我们可以直接在处理代码中捕获这些异常。

0 投票
1 回答
62 浏览

parsing - ANTLR 2 解决关键字问题

我有一条规则需要用户提供一个字符串。目前,当用户给出我在语法中定义的关键字时,解析器会给出分段错误。

例如:

如果用户输入 calc/CALC 作为 strName,解析器会抛出 Seg Fault。我不确定如何避免这种情况。

编辑:我也想知道如何避免解析器给出分段错误。这会使我不想要的应用程序崩溃。我想在这些情况下优雅地退出而不是段错误。

PS:我需要 ANTLR 2 中的解决方案,因为存在依赖关系。

0 投票
0 回答
74 浏览

java - 为什么在使用 ANTLR 的 Eclipse (java) 中出现此错误

我正在使用 ANTLR 2.7.6,当我运行下一个类 Main.java

我收到以下错误: 第 3:30 行:期待 LT,找到 'l' 第 4:82 行:意外令牌:l 第 6:34 行:期待 GT,找到 '=' 第 6:58 行:期待 LT,找到'= ' 第 7:76 行:意外标记:l

我的 Parser.g 和我的 Lexer.g

0 投票
0 回答
107 浏览

antlr - Antlr "CASE" 错误路径

我正在使用 antlr 2.7.6。我正在为 plc 61131-3 ST 语言编写解析器,但我无法解决我的语法问题。

语法是:

问题发生在“enum_Value”为“case_Selection”时,解析器将其解释为新的“stmt”而不是它应该的新“Case_Selection”。例子:

在上面的示例中,它没有将“enum.liteal2”作为新的“case_Selection”,而是将其解释为“assign_Stmt”并给出错误,因为它没有找到 ':='。有没有办法尝试阅读最多的字符,直到我们找到':'或':='来了解我们是否真的有一个新的“stmt”?

谢谢!Edit1:更好的语法;

0 投票
1 回答
653 浏览

antlr - antlr2 到 antlr4 类说明符、选项、TOKENS 等

我需要将一个语法文件从 antlr2 语法重写为 antlr4 语法,并且有以下问题。

1) Bart Kiers 声明在这个SO 帖子中有一个严格的顺序:语法、选项、标记、@header、@members 。这篇antlr2.org 帖子不同意标头在选项之前。是否有资源说明 antlr4 的正确顺序(如果存在)?

2) 相同的 antlr2.org 帖子指出:“语法的选项部分,如果指定,必须紧跟在 ';' 类说明符:

但是,当使用 antlr4 运行时,任何类说明符都会产生此错误:

3) antlr4 中的选项发生了什么变化?表示当时没有规则级别的选项。

i.) antlr4 的自适应 LL(*) 解析算法是否不再需要 k 个令牌的lookhead?

ii.) antlr4 中是否有 exportVocab 的等价物?

iii.) antlr4 中是否有用于优化 codeGenMakeSwitchThreshold 和 codeGenBitsetTestThreshold 的等价物,或者它们已经过时了吗?

iv.) 是否有 defaultErrorHandler 的等价物?

v.) 我知道 antlr4 不再构建 AST。我仍在尝试了解这将如何影响当前生成的 *Parser.java 和 *Lexer.java 的使用。

4) 我当前的语法文件指定了一个 TOKENS 部分

我将双引号更改为单引号,将分号更改为逗号,将等号更改为冒号,以尝试消除每个语法错误,但出现此错误:

和其他人一起。重写看起来像:

所以我删除了 :'true' 和 :'false' 并且 TRUE 和 FALSE 将出现在生成的 MyGrammar.tokens 中,但我不确定它是否会像以前一样工作。

谢谢!

0 投票
1 回答
178 浏览

antlr4 - 将 AST 动作翻译重写为 ANTLR4

我有一个用 antlr2 语法编写的语法文件,需要帮助理解如何用 antlr4 语法重写一些解析器规则。我知道 antlr4 消除了构建 AST 的需要,所以我不确定如何处理AST 动作翻译的规则。ANTLR Tree Construction解释了一些语法以及如何使用 # 构造,但我仍然不确定如何阅读这些规则并重新编写它们。