Я пишу грамматику ANTLRv4, чтобы реализовать простой механизм правил для синтаксического анализа сообщений FIX и указать действие, которое необходимо предпринять, когда это правило нарушено.Механизм правил на основе ANTLR в java
Это где моя грамматика в настоящее время составляет:
grammar RuleDefinition;
ruleset: rule+;
rule : 'tag(' INT ')' numberOp (INT | FLOAT| STRING) (ACTION_DIRECTOR action)?;
ID : [a-zA-Z]+ ; // match identifiers
INT : [0-9]+; // match integers
FLOAT : '0'..'9'+('.'('0'..'9')*)? ; // match float
NEWLINE :'\r'? '\n' ; // return newlines to parser (end-statement signal)
WS : [ \t\n\r]+ -> skip ; // toss out whitespace
NUMBER_OP : EQ|GR|GE|LS|LE|NE;
numberOp : EQ|GR|GE|LS|LE|NE;
EQ : '=';
GR: '>';
GE: '>=';
LS: '<';
LE: '<=';
NE: '!=';
ACTION_DIRECTOR : '->';
action: 'WARN' | 'ERROR';
STRING : '"' (' '..'~')* '"';
Проблемы в том, что сгенерированный код не может корректно разобрать, когда правило содержит ACTION_DIRECTOR (->), то ошибка, я получаю «несоответствующий вход 'ОШИБКА' ожидает ACTION»
Синтаксических успешен для:
tag(9)>0
Синтаксических терпит неудачу для:
tag(9)>0 -> ERROR
Любые указатели на то, как исправить это, очень ценятся.
Hi CoronA, спасибо за ваш ответ. К сожалению, я не могу заставить это работать. Я изменил свою грамматику в соответствии с рекомендациями, но я получаю «несоответствующий вход» = «ожидающий {'=', '>', '> =', '<', '<=', '! ='}". – Mahesh
Обновите определение грамматики и строку примера, из-за которой синтаксический анализатор завершится с ошибкой. – CoronA
Привет, CoronA, я обновил грамматик с вашими предложениями. Анализ синтаксического анализа завершился неудачей с «тегом (9)> 0», который был успешно проанализирован ранее. – Mahesh