在ANTLR4中,这将导致跳过LINE_FOLD标记:
LINE_FOLD
: CRLF WSP -> skip
;
但如果我这样做:
ESCAPED_CHAR
: '\\' LINE_FOLD? '\\'
| '\\' LINE_FOLD? ';'
| '\\' LINE_FOLD? ','
| '\\' LINE_FOLD? N
;
它会在没有LINE_FOLD的情况下返回ESCAPED_CHAR,如果不是,我该怎么办呢?
答案 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目标。