0
我们的设置:ANTLR4 - 在词法分析器中,模式优先于另一个规则的原因是什么?
parser.g4:
absolute_schema_nodeid : (SLASH identifier)+;
identifier: IDENTIFIER
lexer.g4
tokens{
SLASH
}
SLASH : '/' ->type(SLASH);
IDENTIFIER : [a-zA-Z0-9_][a-zA-Z0-9_\-.]* -> pushMode(VALUE_MODE);
mode VALUE_MODE;
fragment ESC : '\\' (["\\/bfnrt] | UNICODE) ;
fragment UNICODE : 'u' HEX HEX HEX HEX ;
fragment HEX : [0-9a-fA-F] ;
END_SLASH : '/' ->type(SLASH), popMode;
STRING: ((~('\r' | '\n' | '\t' | ' ' | ';' | '{' | '"' | '\'' | ':' | '/' | '=' | '[' | ']')~('\r' | '\n' | '\t' | ' ' | ';' | '{' | ':' | '/' | '=' | '[' | ']')*)) ->popMode;// IDENTIFIER ;
mode BLOCK_COMMENT_MODE;
测试规则:
/aaa/aaabbb
我们需要在VALUE_MODE词法蹦出来的时候它找到'/'(END_SLASH)
为什么STRING规则优先于END_SLASH?是什么原因?
什么你写的是我们真正想要的,但在现实中 它去STRING的规则,而不是END_SLASH。 所以,我们的问题是一样的:为什么STRING规则优先于END_SLASH? – MartinC 2014-12-05 07:56:29