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

antlr - 在 antlr4 中使用错误令牌

这是我试图输入的语法

一切正常,但当我给

它按预期在第一个字符串上给了我一个错误,但我想要的是解析第二个命令忽略第一个' altasder table;'

我怎样才能实现它???

我已经使用了 DefualtError 策略,但仍然没有工作

主类:公共类主{

我的输出:

为什么它不移动到第二个命令?

0 投票
1 回答
463 浏览

antlr - 自定义错误处理程序方法无法处理令牌识别错误

这是我的 .g4 文件:

我的主要课程:

我的CutomErrorHandler班级:

当我给出输入altasdere table ; alter table ;时,它不会解析第二个命令,因为它在第一个命令中发现了错误。我的主要课程的输出是

0 投票
1 回答
1305 浏览

compilation - 使用 ANTLR 生成中间代码和目标代码

作为我们编译器相关类的编程任务的一部分。我建议我的老师使用ANTLR而不是 flex bison,在这里他要求我确保它完成我们想要的所有操作,即词汇、句法和语义分析(下图中的前三个步骤),我是很确定使用ANTLR构建这样的分析器非常容易。还有编译器的中间代码和目标代码生成阶段(下图中的其余阶段),这真的让我很困惑。我曾期望此类工具必须为用户提供进行此类生成的工具,但即使在作者编写的参考书中,我也没有找到任何解释如何做到这一点的东西。

在此处输入图像描述

这里的任何人都可以向我解释如何做到这一点,或者只是向我指出可以帮助我说服老师的写作材料。

0 投票
2 回答
395 浏览

antlr - 将 ANTLR v2 语法迁移到 ANTLR v4

我们有一个为 antlr V2 编写的语法,我想迁移到 antlr v4。有迁移指南吗?我还想知道对现有 V2 语法的修改,以便我们能够很好地利用 v4 功能。

0 投票
0 回答
50 浏览

java - ANTLR 2 不生成 AST 文件

我收到了一个废弃的专有 Java 代码库的 tarball,它使用 ANTLR 2.7.6 来生成词法分析器、解析器和 AST。在 tarball 中有一个文件夹,其中包含其他内容

  • 名称.g
  • 名称AST.class
  • 名称AST.java
  • NameLexer.class
  • NameLexer.java
  • NameLexer.smap
  • NameParser.class
  • 名称解析器.java
  • NameParser.smap

我想要做的是用一个整洁的 Gradle 项目替换手动生成的 ANTLR 代码和丑陋的构建脚本。所以我把 .g 文件放在我的项目中,并包含了Gradle ANTLR 插件

但是,当我运行 Gradle 构建时,在build/generated-srcNameAST.java 文件中没有生成,导致编译时缺少符号错误。

我四处寻找,我唯一能找到的是buildAST应该设置的,而且确实 Name.g 包含以下内容。

我的语法文件src/main/antlr/pkgname按照文档存储,生成的代码最终在正确的位置。我无法共享语法文件,但由于我有一个工作 JAR 和提供的编译代码,我认为它们是正确的。

为什么 ANTLR 不生成 AST 文件?

build.gradleInteliJ 当前生成的文件如下所示

0 投票
1 回答
58 浏览

java - 当属性值包含关键字时,尝试使用 antlr2 解析 edifact 文件时出错

我有一个忘恩负义的任务来修复用于解析 edifact 文件的旧 antlr2 解析器中的错误。不幸的是,我对 antlr2 或解析器一点也不熟悉,我无法让它工作。

edifact 文件如下所示:

有几个不同的段,以关键字开头。例如 XYZ 或 ABC。关键字后面跟着不同的属性值,都用' + '分隔。属性值可能为空。每个段都以'结尾。

问题是,只要数据属性包含关键字,解析器就会抛出错误:

意外令牌:XYZ

XYZ +公司+++ XYZ +zip+street'

这是语法文件的摘录:

非常感谢任何帮助:)。

0 投票
1 回答
34 浏览

antlr - 无法理解 Antlr 工具错误解析语法

第 85 行是statement规则。我真的不知道为什么会失败。请帮忙?

这与 Antlr2 顺便说一句。是的,是的,超级老,是的,是的……

谢谢!

0 投票
0 回答
25 浏览

antlr - 否定词法分析器规则/令牌

我正在尝试匹配(并忽略)c 样式的块注释。对我来说,顺序是 (1)/*后跟 (2) 任何其他/**/直到 (3) */

但是 Antlr 不像我那样思考 ;)

所以错误信息有点神秘,但我认为它试图说只有范围、单字符替代或标记替代可以被否定。但这不是我所拥有的吗?两者BLOCK_COMMENT_START都是BLOCK_COMMENT_END令牌。我错过了什么?

非常感谢您的帮助。

0 投票
0 回答
81 浏览

java - ANTLR 2 令牌流多路复用:为什么我的令牌出现故障?

我正在用java编写多行字符串(文本块)的语法。文本块的开始和结束的分隔符是三引号。我可以成功地解析和构建文本块及其内容的 AST,除了一个问题:TEXT_BLOCK_START令牌是在第二个词法分析器的令牌之后返回的。我以此为指导:流程图。根据 ANTLR2 文档,我实现它的方式应该产生所需的令牌流:

TEXT_BLOCK_START-> content from second lexer, etc...->TEXT_BLOCK_END

我尝试更改操作和分隔符的顺序、规则的顺序以及使用select()而不是selector.push().

以下是主类的重要部分:

词法分析器(主词法分析器)规则:

二级词法分析器规则:

如上所述,一切都按预期解析,除了令牌流如下所示:

content from second lexer, etc...-> TEXT_BLOCK_END->TEXT_BLOCK_START

我在这里想念什么?