将某些擒纵符号包含到 ANTLR Lexer 规则中

Include certain escapement symbols into ANTLR Lexer rules

我正在 Antlr4 和 Python 中创建解析器。下面是我在 Antlr 中创建的 Lexer 规则。

VARIABLE_ID :   [$][a-zA-Z][a-zA-Z0-9_]*;
ARRAY_ID    :   [*][a-zA-Z][a-zA-Z0-9_]*;
STRINGCONST :   ["][/|:.a-zA-Z0-9 ]+["];
WS          :   [ \r\t\f\n]+ -> skip;

我正在查看 STRINGCONST 规则,我正在尝试添加诸如 -~ 之类的符号,但是,由于它们是擒纵字符,Antlr 只是抛出我的错误。我试过自己逃避他们,但没能成功。

有没有办法将它们包含在 STRINGCONST 规则中?基本思想是我希望将字符串标识为两个 " " 标记之间的任何字符,但是我很乐意将其限制为规则中当前的内容,只要我可以获得 -~ 也在那里。

您可以通过在字符前面添加 \ 来转义字符:

STRINGCONST :   ["] [/|:.a-zA-Z0-9 \-~]+ ["];

请注意 ~ 在 char class 中没有特殊含义(仅在它们之外),因此 ~ 不需要转义。