我正在学习antlr3,为此我正在修改Javascript语法(我从here获得语法)以添加对AST生成的支持。
现在,我正在尝试使用多个参数为“函数调用”添加AST支持(例如:aFunction(1)(2)(3)(4)
)。
在我的模型中,前面的示例必须创建一个AST,如:
CALLEXPRESSION
CALLEXPRESSION Arguments(4)
CALLEXPRESSION Arguments(3)
CALLEXPRESSION Arguments(2)
undef Arguments(1)
目前,我有以下规则来处理这种情况:
callExpression
: f=memberExpression! (LT* callExpressionSuffix[$f.tree]^)
;
callExpressionSuffix[param]
: arguments oCallSuf=callExpressionSuffix[param] -> ^(CallExpression $oCallSuf arguments)
| (->{param})
;
但这些正在创建一个AST:
CALLEXPRESSION
CALLEXPRESSION Arguments(1)
CALLEXPRESSION Arguments(2)
CALLEXPRESSION Arguments(3)
undef Arguments(4)
(参数顺序相反)
问题是:
如何使用纯“antlr3语言”来颠倒参数的顺序?