提问人:WildPointer 提问时间:10/25/2023 更新时间:10/25/2023 访问量:35
如何将 Antlr4 自动生成的解析器树转换为 AST?
How to convert a parser tree automatically generated by Antlr4 to an AST?
问:
这是我的 Lambda.g4 文件。它判断一个表达式是否是 lambda 表达式:
// Lambda.g4
grammar Lambda;
// Lexer rules
ID : [a-zA-Z]+; // Identifiers (variables)
CONST : [0-9]+
| [a-zA-Z]+; // Predefined constants and functions
// Parser rules
expression : variable #var
| constant #cons
|'(' 'L' variable+ expression ')' #lamb
|'(' expression+ expression ')' #comb
;
variable : ID;
constant : CONST;
// Ignore whitespace and newlines
WS : [ \t\r\n]+ -> skip;
现在我正在尝试将 Antlr4 生成的解析器树转换为 AST,并删除仅在解析时有意义但在逻辑上无用的元素。例如,对于 lambda 表达式:
((L m (sqr ((L n (add m n)) 2))) 4)
我希望打印一个像这样的抽象语法树:
comb(lamb(m, comb(con(sqr),
comb(lamb(n, comb(comb(con(add),
var(m)),
var(n))),
con(2)))),
con(4))
我知道我必须为 AST 的每个可能节点定义一个像 xxNode 这样的类,但我不知道我应该定义什么属性。我也不知道如何编写自己的 MyLambdaVisitor.java 来实现我的目标。
如何创建和打印 AST?顺便说一句,我正在使用 Java 和 IntelliJ IDEA。
答: 暂无答案
评论