问题标签 [antlrworks]

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

debugging - ANTLRWorks 调试错误

当我在 ANTLRWorks 3.4 中调试语法时,它给了我以下错误,

下面列出了给出上述错误的语法。

测试文件是,

有没有办法解决这个错误。这通常是如何发生的

谢谢你。

0 投票
2 回答
1043 浏览

antlr - 为什么在处理我的语法时 Antlr 进入无限循环

我创建了一个用于解析数学表达式的 ANTLR 语法和一个用于评估它们的第二个语法。当我认为构建一个 AST 然后重新解析以实际评估它是一种过多的操作时,我想重构我的语法以生成表示表达式的“术语”对象的层次结构,包括执行该特定逻辑的逻辑手术。然后可以简单地将根 Term 对象评估为具体结果。

我不得不重写很多语法,最后摆脱了最后一条错误消息。不幸的是,现在 ANTLR 似乎进入了一个无限循环。

有人可以帮我解决问题吗?我认为语法对某些人来说应该很有趣,因此我将其发布。(我应该承认,它基于我在 google 上找到的一个 garmmar,但我已经对其进行了很多修改以适应我的需要)。

非常感谢您的帮助。

克里斯

0 投票
1 回答
591 浏览

antlr - 解决可能的 ANTLR 语法歧义(以及一般改进提示)

我在构建能够解析 Python 3 的 AST 转储格式并将其转换为更易于使用的 AST 格式的语法时遇到问题。我决定为此编写一个 ANTLR 语法,但我在处理关键字块时遇到了问题(但出于某种原因,只有关键字块)。我把关键字语法隔离出来了,如图:

这旨在接受关键字列表(0个或更多带有逗号分隔符),其格式显示在关键字规则中。

如果您为上述语法提供以下(有效)输入,

关键字=[关键字(arg='name', value=Str(s='UGA')), 关键字(arg='rank', value=Str(s='2'))]

语法会认识到这一点,因为它应该。

但是,使用我编写的“完整”python 3 AST 格式语法(可在http://pastebin.com/ETrSVXvf找到以节省空间,上述两条规则分别位于第 106 行和第 109 行),它使用几乎完全相同的语法规则,在从上面显示的示例中解析第一个关键字匹配后,令牌流似乎少了几个字符,在针对关键字规则进行解析时产生以下输出:

我只能想到发生这种情况的一种可能性:由于语法中的歧义,某些东西被错误地标记,因为我用来检测多个关键字语句的模式适用于其他类型的语句。但是,我完全不知道语法中的歧义实际上在哪里。

此外,任何关于如何提高我的语法的一般改进技巧都将不胜感激!

0 投票
1 回答
1694 浏览

antlr - 即使不匹配,ANTLR 词法分析器规则也会消耗字符?

我有一个 antlr 词法分析器规则的奇怪副作用,我创建了一个(几乎)最小的工作示例来演示它。例如,在这个例子中,我想匹配字符串[0..1]。但是当我调试语法时,到达解析器的令牌流只包含[..1]. 第一个整数,无论​​它包含多少个数字,总是被消耗掉,我不知道这是怎么发生的。如果我删除FLOAT规则一切都很好,所以我猜错误在于该规则的某个地方。但由于它根本不应该匹配任何东西,[0..1]我很困惑。

对于我可能出错的任何指示,我都会很高兴。这是我的例子:

0 投票
1 回答
576 浏览

antlr - 忽略的下划线字母

如果我尝试在解释器中运行“___sad”以获取以下语法

解释器输出: 口译员 调试器输出: 调试器

解释器包含下划线字母,而调试器似乎只是忽略了它!我希望在这种情况下会出现某种异常(因为语法中只定义了“A”-“z”字母)。我的语法有什么问题?

0 投票
1 回答
249 浏览

java - Antlr AST 构建

我正在尝试使用 ANTLR 为以下语法构建 AST

对于上述内容,我如何根据输入在 NOT IN 或 IN 处构建有根树?还是有更好的方法?

同样对于像dicts这样的python,我如何构造一个ast,树,以MAP为根,每个键都有一个子MAP_PAIR:我猜值应该很棒

我尝试了几种带有标签和树重写的替代方案,但 antrlworks 总是抱怨

任何帮助,将不胜感激

0 投票
1 回答
892 浏览

java - ANTLR 以递归方式替换令牌

我有以下语法:

和来自Java的代码:

对于输入:array1[array2[array3[index]]],我想修改每个标识符。我期待看到输出:array1_[array_2[array3_[index_]]],但输出与输入相同。

所以问题是:为什么该setText()方法在这里不起作用?

编辑:

我通过以下方式修改了巴特的答案:

我想修改规则匹配的每个令牌qualifiedName。我尝试了上面的代码,对于输入,array1[array2[array3[index]]]我期望看到输出array1[array2[array3[index_]_]_]_,但只修改了最后一个标记:array1[array2[array3[index]]]_

我该如何解决这个问题?

0 投票
1 回答
133 浏览

parsing - ANTLR 中可能带有 > 和空格的标识符?

我尝试使用 ANTLR 编写具有以下细节的语法。

它可以解析如下标识符:

其中 foo > bar 是标识符,因为 if > 后跟一个字母,它包含标识符,否则它是大于运算符。

我应该解析类似的东西

其中 ( ) 是必要的。

我对这个主题和 ANTLR 真的很陌生,希望有人能提供帮助。

我目前有这个语法

但我不知道如何在 id 中的 > 和作为运算符的 > 之间切换。

0 投票
1 回答
639 浏览

java - 寻找下一个预期的令牌如果发生错误 ANTLR 3

我正在使用 ANTLR 3,我有一个问题是,如果输入中发生任何错误,我如何找到下一个预期的令牌。我试图覆盖解析器的 getErrorMessage(RecognitionException e, String[] tokenNames),我可以得到错误,但我无法得到 What is next expected token 。如果有人可以提供帮助。提前致谢。

0 投票
1 回答
130 浏览

parsing - 支持布尔表达式中的可选引号

背景

几天来,我一直在使用 ANTLRWorks (V 1.4.3) 并尝试编写一个简单的布尔解析器。下面的组合词法分析器/解析器语法适用于大多数要求,包括支持带引号的空白文本作为布尔表达式的操作数。


问题

我希望语法适用于空白操作数而不需要引号。


例子

例如,表达式-

“左右”和中心

即使删除引号后也应该具有相同的解析树-

左右和中心。

我一直在学习回溯、谓词等,但似乎找不到解决方案。


代码

以下是我到目前为止所掌握的语法。感谢您对愚蠢错误的任何反馈:)。

词法分析器/解析器语法