问题标签 [antlr]

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 投票
2 回答
19184 浏览

java - 如何为 ANTLR 指定目标包?

如果我打电话:

...使用 antlr-3.1.3 解析器和词法分析器代码将在目录中生成outdir/sources/com/example。但是生成的类没有任何package声明。我需要他们在包里生活com.example

有没有办法指定目标包?

0 投票
4 回答
7680 浏览

java - ANTLR:“规则范围内缺少属性访问”问题

我正在尝试构建一个 ANTLR 语法来解析标记的句子,例如:

并有语法:

语法生成器missing attribute access on rule scope: nounPhrase在最后一行生成“”。

[我还是 ANTLR 的新手,虽然有些语法可以工作,但它仍然是反复试验。在运行如此小的语法时,我也经常收到“OutOfMemory”错误 - 欢迎任何帮助。]

我正在使用 ANTLRWorks 1.3 生成代码并在 Java 1.6 下运行。

0 投票
3 回答
3722 浏览

antlr - ANTLR 入门和避免常见错误

我已经开始学习 ANTLR,并且拥有 2007 年出版的《The Definitive ANTLR Reference》一书和 ANTLRWorks(一种用于创建语法的交互式工具)。而且,作为那种人,我从第 3 章开始。(“不耐烦的快速浏览”)。

这是一个相当痛苦的过程,特别是因为一些错误是相当难以理解的(例如,ANTLR:“规则范围内缺少属性访问”问题,这对我来说意味着“你搞错了”)。我还有一些非常简单的语法(仅限 3-4 个产品)和简单的输入(2 行),运行时会出现“OutOfMemory”错误。

ANTLR 站点很有用,但有些零散,一些 SO 用户评论 ( https://stackoverflow.com/questions/278480/good-tutorial-for-antlr ) 本书和教程期望入门级别很高。因此,我一直不愿意接近 ANTLR 讨论列表。

稍后我们开始掌握它。拥有可以轻轻扩展的简单可靠示例将很有用。这当然值得掌握,因为我们已经基于 ANTLR 改造了很多我们的思想。

一个问题是 ANTLR V3 与 V2 相比有显着的变化。SO(以及 ANTLR 页面上)的一个答案是指不再可用的 V2 语法。

一些关于 SO 的 ANTLR 问题对我有很大帮助,但找到它们有点临时。所以我想知道 SO 用户如何帮助减少学习过程的痛苦。(如果您参考参考书,指向特定页面会很有用)。

编辑。@duffymo 和 @JamesAnderson 已经证实 ANTLR 是一项艰苦的工作——主要是因为解析器很困难。(FWIW 我已经通过 LEX/YACC 等,毫无疑问 ANTLR 更强大且更易于使用。)我认为拥有可以避免污染的区域仍然很有用,例如:

  • 确保变量名的正确大写
  • 将包名称添加到词法分析器以及解析器
  • 注意规则的顺序,因为它会影响优先级

更多这样的东西会很有用。

0 投票
4 回答
1846 浏览

antlr - 这个语法是怎么回事?

问题是define规则匹配标记define, ID, as,但不匹配TYPE。我产生了 MissingTokenException。

如果我按如下方式内联 TYPE,它将按我的意图工作:


更新:fragment添加关键字是为了解决另一个冲突:The following token definitions can never be matched because prior tokens match the same input: TYPE.

0 投票
1 回答
380 浏览

c - 如何使用 ANTLR3C 生成介绍性识别器?

Definitive ANTLR Guide 从一个简单的识别器开始。使用语法逐字针对 C 运行时失败,因为 '%s' 对 ANTLR 意味着什么:

在这种情况下如何告诉 ANTLR 忽略 '%'?

0 投票
3 回答
7170 浏览

java - JavaCC 问题 - 生成的代码未找到所有解析错误

刚开始使用 JavaCC。但我有一个奇怪的行为。我想以标记(字母和数字)的形式验证输入,这些标记与符号(+、-、/)连接,并且可以包含括号。我希望这是可以理解的:)

在 main 方法中是一个字符串,它应该会产生错误,因为它有一个左括号和两个右括号,但是我没有得到解析异常 --> 为什么?

有人知道为什么我没有得到例外吗?

我在最初的尝试中遇到了左递归和选择冲突,但设法克服了它们。也许那里是我介绍的问题?!

哦 - 也许我的解决方案不是很好 - 忽略这个事实......或者更好,给一些建议;-)

文件:CodeParser.jj

编辑 - 2009 年 11 月 16 日

现在我尝试了ANTLR。

我更改了一些术语以更好地匹配我的问题域。我想出了以下代码(使用本网站上的答案),现在似乎可以完成工作:

顺便说一句... ANTLRWORKS 是一个很好的调试/可视化工具!帮了我很多。

附加信息
上面的代码匹配如下内容:

0 投票
1 回答
782 浏览

parsing - 使用 ANTLR 容忍格式错误的语句(例如,用于代码完成)

我有一个用于简单 DSL 的 ANTLR 语法,并且在没有语法错误的情况下一切正常。然而,现在我需要支持自动完成机制,我需要从我的树语法中获得可能的完成,这些语法对属性、函数等执行基本类型检查。

问题是,ANTLR 不是在本地statement级别报告语法错误,而是在解析树的更远处,例如在programorfunction级别。因此,而不是看起来像的 AST

我在树的顶部得到垃圾节点,因为未能匹配statement规则“冒泡”并阻止function规则匹配。

有没有办法编写一个包含“包罗万象”子句的规则来吃掉意想不到的令牌?

我在想类似的东西:

AST 中可能有任意数量的垃圾节点,但垃圾之前(最好是之后)的所有内容都应该是健全的。

我会很感激任何提示/建议/指针/等。我正在使用 ANTLR v3,Java 目标。

0 投票
2 回答
196 浏览

antlr - 使用 Antlr 构建查询语法中的隐式“和”问题

我一直在 ANTLR (C#) 中构建一个类似谷歌的查询语法解析器。

除了一件事,我已经完成了,我已经挣扎了很长时间,也没有解决。

如果用户输入“word1 word2 word3”,我希望解析器将其视为“word1 and word2 and word3”。所以实际上“和”在术语之间是可选的/隐含的。

我需要“and”来形成 AST 子树的根,如果“and”实际上不存在,这将不会顺利。即使使用前瞻/回溯,我也找不到正确的语法来使其工作。

这是我当前使用显式“and”的语法片段:

理想情况下,我想让 andexpression 看起来像这样:

但我得到 RewriteEmptyStreamException 解析字符串,如“羊狗鱼”。

如果有人对如何使我的“和”可选有任何提示,将不胜感激。

0 投票
2 回答
4054 浏览

antlr - 如何使用ANTLR解析xml文档

谁能告诉如何使用 ANTLR 工具(在 java 中)为 xml 文档创建我们自己的语法以及如何使用 ANTLR 工具(在 java 中)解析这些文档?

0 投票
2 回答
719 浏览

java - 如何序列化 antlr3 AST

我刚刚开始使用 antlr3 并试图序列化 .g 语法的 AST 输出。
谢谢,
乐赞