【发布时间】:2013-01-09 19:24:15
【问题描述】:
假设我有这个简单而无意义的语法:
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 是单个令牌,它可以工作,但如果它是一棵树呢?
这是正确的方法吗?
【问题讨论】:
标签: parsing antlr antlr3 abstract-syntax-tree