按相反顺序使用antlr3制作AST
我正在学习antlr3,为此我修改了一个Javascript语法(我从中获得了语法),以添加对AST生成的支持。 现在,我尝试使用多个参数(例如:按相反顺序使用antlr3制作AST,antlr,antlr3,Antlr,Antlr3,我正在学习antlr3,为此我修改了一个Javascript语法(我从中获得了语法),以添加对AST生成的支持。 现在,我尝试使用多个参数(例如:a函数(1)(2)(3)(4))为“函数调用”添加AST支持。 在我的模型中,前面的示例必须创建类似以下内容的AST: CALLEXPRESSION CALLEXPRESSION Arguments(4)
a函数(1)(2)(3)(4)
)为“函数调用”添加AST支持。
在我的模型中,前面的示例必须创建类似以下内容的AST:
CALLEXPRESSION
CALLEXPRESSION Arguments(4)
CALLEXPRESSION Arguments(3)
CALLEXPRESSION Arguments(2)
undef Arguments(1)
CALLEXPRESSION
CALLEXPRESSION Arguments(1)
CALLEXPRESSION Arguments(2)
CALLEXPRESSION Arguments(3)
undef Arguments(4)
目前,我有以下规则来处理这种情况:
callExpression
: f=memberExpression! (LT* callExpressionSuffix[$f.tree]^)
;
callExpressionSuffix[param]
: arguments oCallSuf=callExpressionSuffix[param] -> ^(CallExpression $oCallSuf arguments)
| (->{param})
;
但这些正在创建一个类似AST的:
CALLEXPRESSION
CALLEXPRESSION Arguments(4)
CALLEXPRESSION Arguments(3)
CALLEXPRESSION Arguments(2)
undef Arguments(1)
CALLEXPRESSION
CALLEXPRESSION Arguments(1)
CALLEXPRESSION Arguments(2)
CALLEXPRESSION Arguments(3)
undef Arguments(4)
(参数顺序相反)
问题是:如何使用纯“antlr3语言”反转参数的顺序?既然您是从ANTLR开始的,为什么要用旧的主要版本来陈述呢?嗨,卢卡斯,这是因为我正在使用为在antlr3下运行而开发的ecmaScript语法。另外,这个想法是生成AST,读了一点关于antlr4的内容,我发现它生成了解析树。antlr4也有一个。不要担心AST,ANTLR4强制您编写自己的CST->AST转换步骤(如果您想要AST),但这是一个按照您希望的方式微调AST的机会。