跳过属于ANTLR4语法一部分的标记
在ANTLR4中,这将导致跳过行_折叠标记:跳过属于ANTLR4语法一部分的标记,antlr4,Antlr4,在ANTLR4中,这将导致跳过行_折叠标记: LINE_FOLD : CRLF WSP -> skip ; 但如果我这样做: ESCAPED_CHAR : '\\' LINE_FOLD? '\\' | '\\' LINE_FOLD? ';' | '\\' LINE_FOLD? ',' | '\\' LINE_FOLD? N ; 它会返回不带行折叠的转义字符吗?如果不是,我该怎么做?否,在转义字符内,CRLF WSP不会被跳过 ANTLR(4)最佳实践是在解析后的阶段(在侦
LINE_FOLD
: CRLF WSP -> skip
;
但如果我这样做:
ESCAPED_CHAR
: '\\' LINE_FOLD? '\\'
| '\\' LINE_FOLD? ';'
| '\\' LINE_FOLD? ','
| '\\' LINE_FOLD? N
;
它会返回不带行折叠的转义字符吗?如果不是,我该怎么做?否,在
转义字符
内,CRLF WSP
不会被跳过
ANTLR(4)最佳实践是在解析后的阶段(在侦听器或访问者中)处理此类特定于目标的操作
但是,您可以在规则末尾添加一个特定于目标的块,该块从转义字符
规则中丢弃\\CRLF WSP
:
ESCAPED_CHAR
: '\\' LINE_FOLD? [\\;,nN]
{
String s = getText();
setText(s.substring(s.length() - 1));
}
;
假设您的lexer规则N
与'N'
或'N'
匹配
现在规则转义\u CHAR
将只生成内容位于以下位置的令牌:\
,代码>、、
、n
或n
也就是说,这只适用于Java目标。因此,如果我想坚持使用ANTLR4最佳实践并将其放在侦听器中(正如我到目前为止对侦听器所做的那样),我将如何在上下文中找到转义字符并相应地调整它们?我有一个TextContext,其中包含各种各样的标记……恐怕除了使用目标语言的内置字符串方法AFAIK手动替换这些字符外,没有其他方法了。你可能想删减,看看是否有(或曾经)关于做这些事情的讨论。如果没有,你可以开始一个:)