1

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

LINE_FOLD
 : CRLF WSP -> skip
 ;

但如果我这样做:

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

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

4

1 回答 1

0

不,里面ESCAPED_CHARCRLF WSP不会被skipped。

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

但是,您可以在规则末尾添加一个目标特定块,以丢弃规则中\\ CRLF WSPESCAPED_CHAR

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

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

现在,该规则ESCAPED_CHAR将只生成内容为以下各项的标记:\\;,nN

不用说,这仅适用于 Java 目标。

于 2013-07-01T18:43:54.803 回答