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