Antlr 词法分析器仅在下一个字符不是括号时才匹配
Antlr lexer match only when next character isn't a bracket
我正在尝试编写一个词法分析器规则来匹配如下变量名。
TYPE: [a-zA-Z][a-zA-Z0-9_];
但是,我也有一个类似于下面的解析器规则。
dup: TYPE 'x{' TYPE '}'
这些很容易匹配,
HELLO x{wee}
catx x{text}
但我也希望能够匹配以下内容。
HELLOx{wee}
namex{text}
其中 x{ 将匹配解析器规则中的标记。问题是 x 被放入 TYPE 令牌中,因此解析器不知道如何处理随机 {.
有没有办法让词法分析器不匹配尾随的 x,如果它后面跟着 {?
这可以通过向前看来解决,例如
dup
: TYPE 'x{' TYPE '}'
;
TYPE
: [a-zA-Z]([a-wy-zA-Z0-9_]|('x' {_input.LA(1) != '{'}?))*
;
TYPE
的定义仅当前瞻不是 {
时才允许 x
。
我正在尝试编写一个词法分析器规则来匹配如下变量名。
TYPE: [a-zA-Z][a-zA-Z0-9_];
但是,我也有一个类似于下面的解析器规则。
dup: TYPE 'x{' TYPE '}'
这些很容易匹配,
HELLO x{wee}
catx x{text}
但我也希望能够匹配以下内容。
HELLOx{wee}
namex{text}
其中 x{ 将匹配解析器规则中的标记。问题是 x 被放入 TYPE 令牌中,因此解析器不知道如何处理随机 {.
有没有办法让词法分析器不匹配尾随的 x,如果它后面跟着 {?
这可以通过向前看来解决,例如
dup
: TYPE 'x{' TYPE '}'
;
TYPE
: [a-zA-Z]([a-wy-zA-Z0-9_]|('x' {_input.LA(1) != '{'}?))*
;
TYPE
的定义仅当前瞻不是 {
时才允许 x
。