将某些擒纵符号包含到 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 中没有特殊含义(仅在它们之外),因此 ~
不需要转义。
我正在 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 中没有特殊含义(仅在它们之外),因此 ~
不需要转义。