问题标签 [tree-grammar]

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

c# - ANTLR - 为 AST 编写树语法

我的语法文件为一些 Lua 代码输出了一个 AST,该文件目前为我进行解析和词法分析。我想为此添加一个树语法,但由于我使用的是 C#,所以我不知道该怎么做。当您已经编写了解析器和词法分析器时,生成树语法代码的基本过程是什么?

更新:我有以下语法文件:

与我的主要语法文件放在同一目录中,生成良好。但是,在尝试编译时,我收到以下错误:

我是在正确的轨道上还是完全偏离了轨道?

0 投票
1 回答
2087 浏览

antlr - ANTLR 3.x - 如何格式化重写规则

当原始规则中出现某些条件时,我发现自己面临如何正确格式化重写规则的挑战。

重写这个的适当方法是什么:

Antlr 似乎不喜欢我在括号中用标签标记任何东西,“op=”失败。另外,我试过:

Antlr 不喜欢 or '|' 并引发语法错误。

用标记名称替换字符类确实解决了这个问题,但是它给我的语法带来了其他问题的泥潭。

- - 编辑 - -

增加了第二个问题。请帮我用树语法格式化这个规则:

multExpression : unaryExpression (MULT_OP unaryExpression)* ;

非常简单:我的期望是将每个匹配的标记包含在父(想象的)标记MULT中,这样我最终会得到类似的东西:

0 投票
1 回答
918 浏览

c# - 依赖解析

我特别喜欢 agfl 在他们的 EP4IR http://www.agfl.cs.ru.nl/EP4IR/english.html中提供的换能器功能

下载页面在这里: http ://www.agfl.cs.ru.nl/download.html

有什么办法可以在 ac# 程序中使用它?我需要将类转换为 c# 吗?

谢谢 :)

0 投票
0 回答
216 浏览

c# - ANTLR,C# 目标中缺少方法

我使用 ANTLR 从树语法生成了 C# 代码,但我找不到 downup() 方法。是调用顺序:

相当于 downup() 方法?为什么该方法存在于 Java 中但不存在于 C# 中?为什么他们(作者)建议覆盖以下方法:

而 C# 说没有这样的方法可以覆盖?

0 投票
5 回答
24570 浏览

parsing - 如何在 PHP 中解析 Markdown?

首先,我知道,PHP 已经有一个 Markdown 解析器。我也看了这个问题,但它没有回答我的问题。

显然,即使标题提到了 PHP,如果它与语言无关,因为我想知道我必须经过哪些步骤才能做到这一点。

我读过PEG,但我不得不承认,我并没有真正理解 PHP 解析器提供的示例。

我也读过CFG

我发现Zend_Markup_Parser_Textile似乎构建了一个所谓的“令牌树”(它是怎么回事?)但它目前无法使用。(顺便说一句,Textile 不是 Markdown)

所以,具体来说,你会怎么做呢?

显然,我虽然想使用正则表达式,但我很害怕。

因为 Markdown 支持同一元素的多种语法(Setext 和 atx)。

你能给出一些起点吗?

0 投票
1 回答
1968 浏览

antlr - ANTLR 的 AST 树语法 + 列表

我已经阅读了很多内容,试图找到一种干净地使用 ANTLR 树语法中的列表的方法。这是我尝试过的方法及其结果(我真的希望我遗漏了一些微不足道的东西)......

使用 += 语法

这失败了......

规则 '+=' 列表标签不允许没有输出选项

如果我将输出设置为“AST”或“模板”(唯一的选项),生成的类的方法签名会发生变化。也就是说,m不是通过 SomeMethod(s) 的列表,而是分别通过节点或模板的列表。如果有办法使这种方法起作用,我愿意接受建议。

使用规则范围

这似乎可行,尽管我承认我还没有使用嵌套/递归案例对其进行测试。

最终目标

我想构建一组代表我的语言的类(类、方法、变量、语句等),以便在生成编译代码之前进行一些静态分析和优化。为此,我需要能够使用列表。我希望 += 语法“正常工作”,但我可能会遗漏一些东西。第二种方法有效,但似乎过于冗长和不雅。

问题

在 ANTLR 的树语法中使用列表传递给我的具体类的正确原因是什么?

0 投票
1 回答
1847 浏览

user-interface - ANTLR 的树语法 AST 图形视图

我目前正在用 ANTLR 和 JAVA 构建一个 Javascript 编译器。我使用 ANTLR 的树语法来生成 AST。(仍然怀疑这是否比使用手动定义的抽象类生成节点的异构方法更智能,但这是另一个话题)。

我的问题是,当我解析了一些输入时,可以说var x = 5;这在内部表示为;VARDECL作为根,x作为左孩子,5作为右孩子。我现在可以选择使用toStringTree()命令打印这棵树,该命令输出 (VARDECL x 5) - 这种表示在较大的程序中很难理解,所以我想知道是否存在使用这个的第三方工具文本树表示作为输入并且可以输出树的漂亮图形模型?(或者我也必须实现它)

问候孙。

0 投票
1 回答
2185 浏览

antlr - 生成ANTLR树语法的系统方法?

我有一个有点大的 ANTLR 解析器语法文件,想为它制作一个树语法。但是,据我所知,树语法生成这个工作不能自动完成,即我应该通过复制解析器语法,删除一些不必要的代码等手动生成它。我想知道是否有系统的方法来从解析器语法文件生成树语法文件。

PS 我读了一篇文章,坚持认为“手动树行走比树语法更好”。这是可靠的信息吗?如果是这样,对我来说,制作手动树步行器会比编写 ANTLR 树语法文件更好吗?然后,如何使用我的 ANTLR 解析器语法文件制作手动树遍历器(它使用重写规则制作 AST)?

提前致谢。

0 投票
1 回答
1241 浏览

antlr - ANTLR 解析语法 -> 树语法

我们对编译器理论课的最后一项任务是为 Java 的一小部分(不是 MiniJava)创建一个编译器。我们的教授给了我们使用任何我们想要的工具的选项,经过大量的探索,我选择了 ANTLR。我设法让扫描仪和解析器启动并运行,解析器输出 AST。我现在被困在试图编译一个树语法文件。我理解的基本思想是从解析器中复制语法规则并消除大部分代码,将重写规则留在原处,但它似乎不想编译(offendingToken 错误)。我在正确的轨道上吗?我错过了一些微不足道的事情吗?

树语法:

解析器语法:

0 投票
1 回答
581 浏览

antlr - 来自行 0:0 的节点不匹配的树节点:UNIT 期望 UNIT

这个错误是什么意思?请注意,它需要一个 UNIT 节点并得到它所期望的......