问题标签 [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 投票
1 回答
1587 浏览

java - ANTLR/语法问题:计算器语言

我正在尝试为个人项目创建布尔表达式语言/语法。用户将能够以类似 Java 的语法编写字符串,并提供变量,这些变量将在稍后初始化变量时进行评估。Rain 例如,用户可能输入字符串

稍后,当变量 FOO 被初始化并等于 6 并且 BAR 等于 1 时,表达式的计算结果为 13>24,因此返回 false。

我正在使用 ANTLRworks 生成语法,虽然它看起来不错,但它不能正确解释负号。ANTLRworks 中的输入(由于某种原因)已更改:“(8-3)> 6”被读取为“(8> 6”(由于缺少右括号而无法运行)。我还没有实现变量查找还没有,但这里是迄今为止仅针对整数的语法:

它对除“-”符号之外的所有内容都正常工作。有谁知道解决这个问题的方法?

另外(我对 ANTLR 很陌生):我是否正确地进行了评估?或者我应该让语法定义结构并使用另一种方法来确定语句是真还是假?

0 投票
2 回答
196 浏览

antlr - 为什么我的语法适用于 *、-、/ 等运算符,而不适用于 +?

我现在正在创建一个语法,我不得不摆脱左递归,它似乎对除了加法运算符之外的所有东西都有效。

这是我语法的相关部分:

然后当我尝试做类似的事情时

它工作得很好。但是,当我尝试做类似的事情时

我收到一条错误消息:

MismatchedTokenException:不匹配的输入 '+' 期望 '\u001C'

我已经有一段时间了,但不明白为什么它适用于 *、- 和 /,但不适用于 +。我对所有这些都有完全相同的代码。

编辑:如果我重新排序并将 SUBTRACT 放在 PLUS 上方,+ 符号现在可以工作,但 - 符号不会。为什么 antlr 会关心这样的东西的顺序?

0 投票
3 回答
6440 浏览

java - 为什么我的 Java ANTLR 语法文件无法编译?

我已经获得了 Java 编译器子集的 ANTLR 语法,称为静态 Java 编译器。我正在尝试扩展语法以包含更多 Java 功能,例如,我刚刚添加了For Loops的语法。

使用 Eclipse 和 ANTLR 插件,然后我做了“编译 ANTLR 语法”。而不是编译它在代码的第一位产生了两个错误:

第一个错误在第 1 行:'Unexpected Token: grammar' 第二个错误在第 5 行:'Unexpected char:@'

为什么它不能识别这个基本的 ANTLR 语法?我的第一个想法是我在类路径中遗漏了一些东西,但我去了项目的属性并确保以下 JAR 包含在Libraries下:

  • antlr-2.7.7.jar
  • stringtemplate-3.2.1.jar
  • antlr.jar
  • antlr-runtime-3.0.1.jar

有什么想法或建议吗?

0 投票
1 回答
1362 浏览

antlr - Antlr 问题:无法从 ANTLRWorks 获取 Antlr 工具来编译简单文件

这是语法文件:

这是启动该工具的批处理文件:

结果如下:

之前的帖子是指“org.antlr.Tool”,但 3.3 jar 的位置如上。想法是创建树解析器的调试版本,根据文档,您必须使用命令行工具。

有没有人见过这个?我疯了吗?它有两行长,并且在文件中的第一个单词上就死了。

当然,这在 antlrworks 中编译。

任何帮助表示赞赏,我无法对我的药物进行任何调整。

跟进:

我发现如果你在 ANTLRWORKS 中使用 Run --> Debug 菜单选项,它会生成一个调试版本的树解析器,但在我手中,命令行工具不会。生成的调试源位于用于生成的输出文件夹中。在 ANTLRWORKS 中获取非调试版本使用生成菜单选项。在 Eclipse 中使用调试版本的树解析器,启动测试工具并等待,然后通过运行远程调试在树语法解析器文件上连接 ANTRWORKS。它遍历树的解析器并给了我一个不匹配的树节点错误(不是解析器错误,这很好,因为我正在调试树解析器)。所以现在我只需要找到我做过的其他愚蠢的事情。除了我之外还有人。

0 投票
1 回答
2177 浏览

antlr - 编写用于解析java文件的ANTLR语法

我是 ANTLRWorks 的新手,我正在做我最后一年的项目。任何人都可以帮助我如何编写 ANTLR 语法,只是为了识别 java 中的一个类“并将其打印在任何文件中作为输出”。在同一行上,我将能够为我的项目编写语法。

0 投票
1 回答
427 浏览

antlr - 用 ANTLR 中的子表达式解析表达式

我正在尝试解析 ANTLR 中的递归表达式,例如:

或者

我读了这个假设的解决方案: ANTLR Grammar for expressions

但是,当我尝试创建规则时,例如:

ANTLR 抱怨“规则括号表达式是左递归的”。

如何解析可以在其内部具有相同形式的子表达式的表达式?

0 投票
1 回答
97 浏览

antlr - ANTLRWorks 标准树

在 ANTLRWorks 中调试语法时,ANTLRWorks 会构建一个没有任何“^”、“!”的漂亮树。规则内的运算符。是否可以在不添加“^”、“!”的情况下访问这棵树?运算符到语法源?

0 投票
1 回答
7513 浏览

antlr - 使用 ANTLR3 将换行符、EOF 解析为语句结束标记

我的问题是关于在 ANTLRWorks 中运行以下语法:

无论我选择哪个换行符NL (CR/LF/CRLF) 或整数,我都会通过以下输入(以程序作为开始规则)得到以下结果:

"; NL " 或 "32; NL " 解析没有错误。“;” 或“45;” (没有换行符)导致 EarlyExitException。“ NL ” 本身解析没有错误。没有分号的“456 NL ”会导致 MismatchedTokenException。

我想要的是用换行符、分号或分号后跟换行符来终止语句,并且我希望解析器在终止时吃尽可能多的连续换行符,所以“;NL NL NL NL ”只是一个终止,而不是四个或五个。另外,我希望文件结尾的情况也是有效的终止,但我还不知道该怎么做。

那么这有什么问题,我怎样才能让它在 EOF 处很好地终止呢?我对所有解析、ANTLR 和 EBNF 都是全新的,并且在简单计算器示例和参考之间的某个级别上,我没有找到太多可以阅读的材料(我有 The Definitive ANTLR Reference,但它确实一个参考,前面有一个快速入门,我还没有在 ANTLRWorks 之外运行),所以任何阅读建议(除了 Wirth 的 1977 ACM 论文)也会有所帮助。谢谢!

0 投票
1 回答
2435 浏览

antlr - ANTLR - 获取 AST 层次结构设置时遇到问题

我试图了解 ANTLR 中的树构造运算符(^ 和!)。

我有一个用于弹性字节数组的语法(一个描述数组中字节数的 UINT16,后跟那么多字节)。我已经注释掉了所有语义谓词及其相关代码,这些代码确实验证了数组中的字节数与前两个字节所指示的一样多……那部分不是我遇到的问题。

我的问题是解析一些输入后生成的树。所发生的只是每个字符都是一个兄弟节点。我期待生成的 AST 类似于您可以在 ANTLRWorks 1.4 的解释器窗口中看到的树。一旦我尝试更改使用 ^ 字符制作树的方式,我就会得到以下形式的异常:

这是语法(目前针对 C#):

这就是我认为的 AST 的样子:

ANTLRWorks 1.4 解释器输出,用于输入

这是我用来获取 AST 的视觉(实际上是文本,但后来我通过 GraphViz 获取图片)表示的 C# 程序:

这是该程序的输出放入 GraphViz 的样子: 图形即输出

Java 中的相同程序(如果您想尝试它而不使用 C#):

0 投票
1 回答
7188 浏览

antlr - antlr3 - 生成解析树

我无法弄清楚 antlr3 API,因此我可以在一些 javascript 代码中生成和使用解析树。当我使用 antlrWorks(他们的 IDE)打开语法文件时,解释器能够向我显示解析树,它甚至是正确的。

我在跟踪有关如何使用 antlr3 运行时在我的代码中获取此解析树的资源时遇到了很多困难。我一直在搞乱运行时和解析器文件中的各种功能,但无济于事:

由于 antlrWorks 可以在没有我自己的任何树语法的情况下显示解析树,并且由于我已经阅读了 antlr 自动从语法文件生成解析树,我假设我可以使用一些运行时函数访问这个基本的解析树。大概不知道。我的这种想法正确吗?