跳过作为ANTLR4语法一部分的令牌

时间:2013-07-01 17:56:42

标签: antlr4

在ANTLR4中,这将导致跳过LINE_FOLD标记:

LINE_FOLD
 : CRLF WSP -> skip
 ;

但如果我这样做:

ESCAPED_CHAR
 : '\\' LINE_FOLD? '\\'
 | '\\' LINE_FOLD? ';'
 | '\\' LINE_FOLD? ','
 | '\\' LINE_FOLD? N
 ;

它会在没有LINE_FOLD的情况下返回ESCAPED_CHAR,如果不是,我该怎么办呢?

1 个答案:

答案 0 :(得分:1)

不,在ESCAPED_CHAR内,CRLF WSP不会是skip ped。

ANTLR(4)最佳实践是在解析后(在侦听器或访问者中)处理阶段中的此类目标特定操作。

但是,您可以在规则末尾添加一个特定于目标的广告块,从\\ CRLF WSP规则中删除ESCAPED_CHAR

ESCAPED_CHAR
 : '\\' LINE_FOLD? [\\;,nN] 
   {
     String s = getText();
     setText(s.substring(s.length() - 1));
   }
 ;

假设您的词法分析器规则N'n''N'匹配。

现在规则ESCAPED_CHAR只会生成其内容将包含的令牌:\\;,n或{{1 }}

有人说,这只适用于Java目标。