我需要转换以下结构中的文字:
{ A1 A2 { B1 B2 { C1 C2 } } }
以下开发/扁平化结构:
{ A1 }
{ A2 B1 }
{ A2 B2 C1 }
{ A2 B2 C2 }
我使用以下Antlr语法来解析文件:
grammar tree;
node : '{' (STRING | node)* '}';
STRING : ('A' .. 'Z' | '0' .. '9')+;
WS : ( ' ' | '\t' | '\n' | '\r') -> channel(HIDDEN);
是否可以仅使用内联Antlr重写规则(使用->
)来执行Ast转换?
答案 0 :(得分:1)
通过查看channel(HIDDEN)
,您似乎正在使用ANTLR4,它不再具有重写功能:ANTLR 4 tree inject/rewrite operator。此外,如果您正在使用ANTLR3,我怀疑您是否能够以这种方式重写AST。
您应该将此视为两个操作:1)解析输入,以及2)遍历/访问解析树并[通过使用普通编程]将解析后的树重写为其他内容。最后一步是由您自己在树监听器或访问者中完成的,ANTLR为其生成基类。