当前位置: 首页 > 知识库问答 >
问题:

在antlr4中构建AST

微生运浩
2023-03-14

我想知道我们是否可以使用Antlr版本4构建一个AST。我找不到任何关于使用ANTLR4构建它的参考。一个答案是,使用antlr4会很容易,它只产生解析树,但我的问题是效率如何?

它迫使我们只能爬取整个解析树而不是抽象的语法树,这对于遍历整个解析树和使用访问者执行任务是不有效的。

共有1个答案

谷梁建中
2023-03-14

有两个重点我想先指出:

>

  • 效率不仅仅是简单的执行速度。它还可以应用于内存开销、可维护性以及创建和/或使用一个软件的团队所使用的长期开发策略的有效性。

    您在论证解析树比转换要慢的时候大惊小怪。多年来,我一直在测试ANTLR3和ANTLR4的性能,在这一点上,ANTLR4的解析树抹杀了ANTLR3中的AST性能是毫无疑问的。

  •  类似资料:
    • 我有一个ANTLR3语法,它构建了一个抽象语法树。我正在考虑升级到ANTLR4。但是,ANTLR4似乎只构建解析树,而不构建抽象语法树。例如,选项不再被识别。此外,在“最终的ANTLR4参考文献”的文本中既没有“AST”也没有“抽象语法”。

    • 我正在尝试用Maven构建一个ANTLR项目,项目结构如下所示 其中G1导入G2,类似于: 然而,当我使用Maven构建时,我得到以下错误: 如果我将和直接放在目录下,则不会有问题。在我看来,当把语法文件放在一个包中时,它需要在import语句中使用特殊的语法。 我注意到了一个问题,Antlr4 maven插件无法在不同的目录中找到语法文件,但在这里,语法在一个目录中。

    • 我已经搜索了很多关于这一点,我没有找到任何有用的,真正帮助我建立一个AST。我已经知道ANTLR4不像ANTLR3以前那样构建AST。每个人都说:“嘿,使用访客!”,但我找不到任何例子或更详细的解释,说明我该如何做到这一点... 我有一个语法必须像C,但与每一个命令写葡萄牙语(葡萄牙编程语言)。我可以使用ANTLR4轻松地生成解析树。我的问题是:我现在需要做什么来创建一个AST? 编辑2:现在我有

    • 我试图使用ANTLR4在golang创建一个javascript解析器。我使用的语法是这样的(https://github.com/antlr/grammars-v4/tree/master/javascript/ecmascript),我遵循自述文件https://github.com/antlr/antlr4/blob/master/doc/go-target.md中的说明 因此,我从语法中生

    • 詹金斯的新成员。 目前,我们使用maven和Subversion作为SCM进行手动构建: > 在本地工作副本文件夹中,POM文件有1.1.1-SNAPSHOT,issue mvn release:clean release:prepare-p all modules 这将创建一个标记https://avn/path/to/tag/xxx-1.1.1,而我的本地工作副本仍在1.1.2-SNAPSHO

    • 问题内容: 我一直在搜索有关此的内容,但找不到任何能真正帮助我构建AST的有用信息。我已经知道ANTLR4不会像以前的ANTLR3那样构建AST。每个人都说:“嘿,请使用访客!”,但是我找不到任何示例或有关如何执行此操作的更详细的说明… 我有一个像C一样的语法,但是每个命令都是用葡萄牙语(葡萄牙语编程语言)编写的。我可以使用ANTLR4轻松生成解析树。我的问题是:创建AST现在需要做什么? 顺便说