假设我有这个简单而无意义的语法:
propagate : what^ where*;
what : CHAR^;
where : NUMBER -> ^(PLUS NUMBER);
NUMBER : '0'..'9';
CHAR : 'a'..'z';
PLUS : '+';
如果它解析一个类似 的字符串a123456789
,它会生成一个类似的 AST:
我要做的是将解析的令牌传递what
给where
并创建一个AST(对于相同的输入),例如:
我尝试了以下方式:
propagate : w=what^ where[$w.text]*;
what : CHAR^;
where[String s] : NUMBER -> ^(PLUS CHAR[s] NUMBER);
NUMBER : '0'..'9';
CHAR : 'a'..'z';
PLUS : '+';
如果what
它是单个令牌,它可以工作,但如果它是一棵树呢?这是正确的方法吗?