跳过ANTLR4语法中的令牌



在ANTLR4中,这将导致跳过LINE_FOLD令牌:

LINE_FOLD
 : CRLF WSP -> skip
 ;

但如果我这样做:

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

它会在没有LINE_FOLD的情况下返回ESCAPED_CHAR吗?如果没有,我该怎么做?

否,在ESCAPED_CHAR内部,CRLF WSP将不会被skip处理。

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

但是,可以在从ESCAPED_CHAR规则中丢弃\ CRLF WSP的规则末尾添加特定于目标的块:

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

假设lexer规则N匹配'n''N'

现在,规则ESCAPED_CHAR将只生成内容为以下内容的令牌:\;,nN

需要说明的是,这只适用于Java目标。

相关内容

  • 没有找到相关文章

最新更新