我已經定義了多個詞法分析規則,它們可能會匹配相同的字符序列。例如:ANTLR中匹配多個詞法規則的字符
LBRACE: '{' ;
RBRACE: '}' ;
LPARENT: '(' ;
RPARENT: ')' ;
LBRACKET: '[' ;
RBRACKET: ']' ;
SEMICOLON: ';' ;
ASTERISK: '*' ;
AMPERSAND: '&' ;
IGNORED_SYMBOLS: ('!' | '#' | '%' | '^' | '-' | '+' | '=' |
'\\'| '|' | ':' | '"' | '\''| '<' | '>' | ',' | '.' |'?' | '/' ) ;
// WS comments*****************************
WS: (' '|'\n'| '\r'|'\t'|'\f')+ {$channel=HIDDEN;};
ML_COMMENT: '/*' .* '*/' {$channel=HIDDEN;};
SL_COMMENT: '//' .* '\r'? '\n' {$channel=HIDDEN;};
STRING_LITERAL: '"' (STR_ESC | ~('"'))* '"';
fragment STR_ESC: '\\' '"' ;
CHAR_LITERAL : '\'' (CH_ESC | ~('\'')) '\'' ;
fragment CH_ESC : '\\' '\'';
我IGNORED_SYMBOLS和Asterisk匹配/「和*分別因爲他們是放置(無意)之前,我的意見和字符串文字的規則也匹配/ *和」我期待和評論字符串文字規則將被禁用(無意)。但令人驚訝的是,ML_COMMENT,SL_COMMENT和STRING_LITERAL規則仍然正常工作。
這有點令人困惑。是不是這個/,它是/ *的一部分還是隻是一個獨立的/,在它有機會被ML_COMMENT匹配之前,總是會被IGNORED_SYMBOLS匹配和消費?
如果字符匹配多個規則,詞法分析器如何決定應用哪些規則?