问题标签 [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.

0 投票
1 回答
951 浏览

antlr4 - 是 ANTLR4 EOF 错误还是我的错误

这是我精简的 ANTLR4 语法(注意我使用常量 false 来替换返回 false 的方法):

我的测试文件只包含 1 个单词“hello”,测试结果如下:

为什么当我添加一个语义谓词(虽然这里是一个虚拟的)作为替代时,它一直说“输入 '< EOF >' 的第 1:5 行没有可行的替代方案”?如果我删除带有错误语义谓词的替代项,则错误会按预期消失。

PS:我正在使用 antlr-4.0-complete.jar

0 投票
1 回答
236 浏览

javascript - 确定 ECMAScript 赋值表达式的左侧或右侧

我正在开发一个为 ECMAScript 文件的文本构建符号表的解析应用程序。我遇到的问题是在处理带有ParseTreeListener.

这是使用Chris Lambrou 的 ANTLR 语法,它似乎与ECMAScript 规范中的官方语法非常接近。有一个名为 的解析器规则leftHandSideExpression,但这是具有欺骗性的,因为当在 TestRig GUI 中显示时,它也始终显示在表达式的右侧。

这是一项需要访问者模式的任务吗?

欣赏建议。

0 投票
1 回答
668 浏览

antlr4 - 类 JSON 语言的语法

我正在尝试为类似 JSON 的语言设计语法。主要区别在于属性名称不需要双引号(尽管可以),并且数字只是整数(没有浮点数)。

这是一个例子:

这是我的(尝试)语法:

但是,尝试在我的示例输入上运行 TestRig,我得到

有什么想法我哪里出错了吗?

谢谢你的时间!

托马斯

0 投票
2 回答
15716 浏览

antlr - “解析器规则中的隐式令牌定义”需要担心吗?

我正在使用 ANTLR 和 ANTLRWorks 2 创建我的第一个语法。我已经基本完成了语法本身(它识别用所描述语言编写的代码并构建正确的解析树),但除此之外我还没有开始任何事情。

让我担心的是,解析器规则中每个第一次出现的标记都带有黄色曲线下划线,上面写着“解析器规则中的隐式标记定义”。

例如,在这条规则中,'var'有那个曲线:

它看起来如何:

在此处输入图像描述

奇怪的是,ANTLR 本身似乎并不介意这些规则(在进行测试台测试时,我在解析器生成器输出中看不到任何这些警告,只是在我的机器上安装了不正确的 Java 版本),所以这只是 ANTLRWorks 抱怨。

是否需要担心或者我应该忽略这些警告?我应该在词法分析器规则中明确声明所有标记吗?官方圣经The Defintive ANTLR Reference中的大多数例子似乎都是按照我编写代码的方式完成的。

0 投票
1 回答
2006 浏览

c++ - 解析 C++ 源代码时 ANTLR4 相互左递归错误

我正在尝试解析 cpp 源语法的一个子集。以下 ANTLR4 解析器规则直接从 c++ 语言规范中复制而来(连字符被下划线代替):

但是当 org.antlr.v4.Tool 解析语法时出现此错误:

错误(119):cppProcessor.g4::: 以下规则集是相互左递归的 [direct_abstract_declarator]

好像是direct_abstract_declarator?左侧的语法会导致错误。我应该如何纠正它?为什么ANTLR4不支持?

手动将规则重构为这种形式不会产生错误:

那么ANTLR4在处理左递归规则时是否可以直接支持第一种语法呢?

0 投票
3 回答
1508 浏览

antlr - NetBeans 平台语言和 ANTLR 词法分析器

如何使 NetBeans LexerInput 适应 ANTLR 的 CharStream。我有下一个实现,但效果不佳。我想通过 ANTLR 词法分析器向 NetBeans 平台添加一种新语言。

Lexer 只发出 EOF,但令牌类型没问题,我不明白。

0 投票
1 回答
60 浏览

antlr4 - 基准跳过注释“#;” 在使用 ANTLR4 为 R6RS 制作解析器时

我正在尝试为 R6RS 编写词法分析器/解析器,但我遇到了数据跳过评论

这是我的词法分析器/解析器规则的一部分:

现在,我想像这样写skipDatum: '#;' datum -> skip。不幸的是,解析器规则不允许->skip. 两者都SKIPDATUM: '#;' datum -> skip不起作用,因为词法分析器规则不能引用解析器规则。

在我看来,虽然“注释掉”是词法分析器的责任,而“构造数据”是解析器的责任,但#;两者都需要规则。

这是我目前的解决方案:

虽然它正在工作,但它看起来很丑陋;在我真的想用 写规则的地方datum,我总是必须这样写skipDatum* datum skipDatum*

有没有更好的解决方案?提前致谢。

0 投票
1 回答
554 浏览

antlr4 - 使 ANTLR4 解析树可序列化

是否可以保存由 ANTLR4 生成的解析树?例如,通过使 ParseTree 或其子类可序列化。

我想使用 ANTLR4 来解析我项目中的源文件。我的项目很大,包含数百个源文件。通常,我需要遍历几个源文件的解析树来获取我想要的信息。完整的语法非常庞大,即使只解析 1 个源文件也需要一段时间。因此,每次我启动工具以获取 1 条信息(例如函数的调用者)时,再次解析所有源文件是不切实际的。如果我可以只解析一次并将解析器输出保存到硬盘中,那就太好了。

0 投票
1 回答
1733 浏览

grammar - 将终端分组到集合中

将端子分组

这个警告是什么意思?我该如何解决?

这是我指的代码

0 投票
1 回答
1709 浏览

antlr4 - ANTLR4 API 显示任意 ParseTree

ANTLR4 当前的 TestRig 工具支持 -gui 选项来解析整个输入文件并以图形方式显示整个结果解析树。我们是否可以先获取解析树,对其进行修改并调用一些 API 以图形方式显示解析树的子集/子树。

我的输入源文件很大,无法查看 TestRig 显示的标准解析树。更重要的是,我想过滤掉很多不相关的语法,专注于验证那些我需要测试的语法。但是从TestRig提供的标准巨大解析树中很难定位到一小部分信息。