我想匹配一个“{NUM}”,然后让词法分析器规则返回“NUM”。所以,我试过了
NUM : ('{' { skip(); }) 'NUM' ('}' { skip(); });
但是,这似乎跳过了所有内容并在比赛中返回空。是否可以跳过词法分析器匹配的部分内容?
蚂蚁3.4
在规则中的任何地方调用skip()
都会从词法分析器中删除整个标记,而不仅仅是某些字符。
你可以做的是:
NUM
: '{NUM}' {setText("NUM");}
;
或者,如果NUM
是可变的,请执行以下操作:
NUM
: '{' 'A'..'Z'+ '}' {setText($text.substring(1, $text.length() - 1));}
;
从令牌中删除第一个和最后一个字符。
smartnut007 写道:
是否有等效的方法来为 Tokens 执行此操作?
如果您的意思是如何更改解析器规则中的标记文本,请尝试以下操作:
parser_rule
: LEXER_RULE {$LEXER_RULE.setText("new-text");}
;
LEXER_RULE
: 'old-text'
;