Я начал работать с antlr несколько дней назад. Я хотел бы использовать его для анализа макросов #include в c. Только включает в мой интерес, все остальные части не имеют значения. здесь я написал простой файл грамматики:Antlr mismatched '>' для включения макроса
... 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?
Вы можете принять свой собственный ответ ..... –