我有一个ANTLR3语法,它构建了一个抽象语法树。我正在考虑升级到ANTLR4。但是,ANTLR4似乎只构建解析树,而不构建抽象语法树。例如,output=ast
选项不再被识别。此外,在“最终的ANTLR4参考文献”的文本中既没有“AST”也没有“抽象语法”。
ANTLR4基于语法生成解析树,而不是基于任意AST运算符和/或重写规则生成AST。这允许ANTLR4自动生成侦听器和访问者接口,您可以使用您的语法在代码中实现这些接口。
对于从版本3升级现有应用程序的用户来说,这一变化可能是巨大的,但作为一个整体,新系统更易于使用和(特别是)维护。
我已经搜索了很多关于这一点,我没有找到任何有用的,真正帮助我建立一个AST。我已经知道ANTLR4不像ANTLR3以前那样构建AST。每个人都说:“嘿,使用访客!”,但我找不到任何例子或更详细的解释,说明我该如何做到这一点... 我有一个语法必须像C,但与每一个命令写葡萄牙语(葡萄牙编程语言)。我可以使用ANTLR4轻松地生成解析树。我的问题是:我现在需要做什么来创建一个AST? 编辑2:现在我有
问题内容: 我一直在搜索有关此的内容,但找不到任何能真正帮助我构建AST的有用信息。我已经知道ANTLR4不会像以前的ANTLR3那样构建AST。每个人都说:“嘿,请使用访客!”,但是我找不到任何示例或有关如何执行此操作的更详细的说明… 我有一个像C一样的语法,但是每个命令都是用葡萄牙语(葡萄牙语编程语言)编写的。我可以使用ANTLR4轻松生成解析树。我的问题是:创建AST现在需要做什么? 顺便说
我想知道我们是否可以使用Antlr版本4构建一个AST。我找不到任何关于使用ANTLR4构建它的参考。一个答案是,使用antlr4会很容易,它只产生解析树,但我的问题是效率如何? 它迫使我们只能爬取整个解析树而不是抽象的语法树,这对于遍历整个解析树和使用访问者执行任务是不有效的。
我正试图弄清楚如何使用ANTLR,但我很难消化我所发现的东西。到目前为止,以下是我的资源: 如何使用ANTLR4创建AST? 如何使用Gradle 2.10将一个ANTLR lexer语法导入到另一个语法中? https://github.com/antlr/grammars-v4/tree/master/java8 https://dzone.com/articles/parsing-any-l
Dart语言没有枚举(还没有??).至少在语言特性出现之前,构造枚举的正确或惯用方法是什么?
需要一个用作所有函数的返回类型的类型。如果我需要生成一个AST,我应该使用什么返回类型?ANTLR3使用了 对象。 当输入节点时,我可以创建树的一个节点,但应该如何跟踪它的父节点? 关于如何将树重写规则转换为生成AST节点的方法,是否有任何示例?如果不是,是否可以为下面的规则提供一个示例? 下面是(3)的规则: