Je suis en train de créer un simple analyseur de requêtes booléennes. J'aimerais faire quelque chose comme ce qui suit.
grammar BooleanQuery;
options
{
language = Java;
output = AST;
}
LPAREN : ( '(' ) ;
RPAREN : ( ')' );
QUOTE : ( '"' );
AND : ( 'AND' | '&' | 'EN' | '+' ) ;
OR : ( 'OR' | '|' | 'OF' );
WS : ( ' ' | '\\t' | '\\r' | '\\n') {$channel=HIDDEN;} ;
WORD : (~( ' ' | '\\t' | '\\r' | '\\n' | '(' | ')' | '"' ))\*;
MINUS : '-';
PLUS : '+';
expr : andexpr;
andexpr : orexpr (AND^ orexpr)\*;
orexpr : part (OR^ part)\*;
phrase : QUOTE ( options {greedy=false;} : . )\* QUOTE;
requiredexpr : PLUS atom;
excludedexpr : MINUS atom;
part : excludedexpr | requiredexpr | atom;
atom : phrase | WORD | LPAREN! expr RPAREN!;
Le problème est que les jetons MINUS et PLUS entrent en collision avec les signes MINUS et PLUS des jetons AND et OR. Désolé si je n'utilise pas la bonne terminologie. Je suis un novice en matière d'ANTLR.
Vous trouverez ci-dessous un exemple de requête :
foo OR (pow AND -"bar with cream" AND -bar)
Quelles sont les erreurs que j'ai commises ?