ANTLR:如何线性化/展平树状结构?

时间:2014-04-01 16:05:15

标签: parsing antlr transformation lexer

我需要转换以下结构中的文字:

{ 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转换?

1 个答案:

答案 0 :(得分:1)

通过查看channel(HIDDEN),您似乎正在使用ANTLR4,它不再具有重写功能:ANTLR 4 tree inject/rewrite operator。此外,如果您正在使用ANTLR3,我怀疑您是否能够以这种方式重写AST。

您应该将此视为两个操作:1)解析输入,以及2)遍历/访问解析树并[通过使用普通编程]将解析后的树重写为其他内容。最后一步是由您自己在树监听器或访问者中完成的,ANTLR为其生成基类。