在ANTLR中处理ParserContext的标记

时间:2014-08-07 08:07:47

标签: java parsing antlr

调用getText() - 在使用antlr生成的解析器解析内容时,Context-Object上的方法返回,以防在解析器中忽略所有WS-Token(可能经常出现这种情况),返回串联令牌,它们之间没有任何空格。例如。: 解析像

这样的陈述
Hello beautiful World ! 

使用解析规则

stmnt: 'Hello' 'beautiful' 'World' '!' ; 
WS : ( '\t' | ' ' | '\r' | '\n')+ -> skip;

然后在处理stmnt-Rule时在Context上调用getText()将返回以下字符串:“HellobeautifulWorld!”

我的想法是创建一个方法,迭代上下文并将所有标记连接在一起与它们之间的ws 。有谁知道是否有方法为此创建非特定于上下文的解决方案?

1 个答案:

答案 0 :(得分:0)

-> skip替换为-> channel(HIDDEN)

WS : ( '\t' | ' ' | '\r' | '\n')+ -> channel(HIDDEN);

当解析器从HIDDEN频道馈送时,这将导致空格放置在DEFAULT频道上。但是,getText()将使用两个通道,在调用时保留空格。