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鼓励的方式中的这个问题?
您被允许接受您自己的答案..... –