0
幾天前我開始與antlr一起工作。我想用它來解析c中的#include宏。只包括我的興趣,其他所有部分都是不相關的。在這裏,我寫了一個簡單的語法文件:Antlr不匹配包含宏的'>'
... parser part omitted...
INCLUDE : '#include';
INCLUDE_FILE_QUOTE: '"'FILE_NAME'"';
INCLUDE_FILE_ANGLE: '<'FILE_NAME'>';
fragment
FILE_NAME: ('a'..'z'|'A'..'Z'|'0'..'9'|'_'|'.'|' ')+;
MACROS: '#'('if' | 'ifdef' | 'define' | 'endif' | 'undef' | 'elif' | 'else');
//MACROS: '#'('a'..'z'|'A'..'Z')+;
OPERATORS: ('+'|'-'|'*'|'/'|'='|'=='|'!='|'>'|'>='|'<'|'<='|'>>'|'<<'|'<<<'|'|'|'&'|','|';'|'.'|'->'|'#');
... other supporting tokens like ID, WS and COMMENT ...
這個語法歧義產生這樣的時候語句中遇到:
(;i<listLength;i++)
output: mismatched character ';' expecting '>'
好像它試圖匹配INCLUDE_FILE_ANGLE,而不是治療「;」作爲運營商。
我聽說有一個運算符稱爲語法謂詞,但我不知道如何在這種情況下正確使用它。
我如何解決Antlr鼓勵的方式中的這個問題?
您被允許接受您自己的答案..... –