Je le code suivant écrit en ANTLRWorks 1,4Quel est le problème avec cette grammaire? (ANTLRWorks 1.4)
grammar hmm;
s : (put_a_in_b)|(put_out_a)|(drop_kick)|(drop_a)|(put_on_a);
put_a_in_b : (PUT_SYN)(ID)(IN_SYN)(ID);
put_out_a : (PUT2_SYN)(OUT_SYN)(ID) | (E1)(ID);
drop_kick : ('drop')('kick')(ID);
drop_a : (DROP_SYN)(ID);
put_on_a : (E2)(ID);
PUT_SYN : 'put' | 'place' | 'drop';
PUT2_SYN : 'put' | 'douse';
IN_SYN : 'in' | 'into' | 'inside' | 'within';
OUT_SYN : 'out';
E1 : 'extinguish'|'douse';
DROP_SYN : 'drop' | 'throw' | 'relinquish';
WS : (' ' | '\t' | '\r' | '\n') {$channel=HIDDEN;};
ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*;
E2 : 'put on'|'don'|'wear';
COMMENT
: '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;}
| '/*' (options {greedy=false;} : .)* '*/' {$channel=HIDDEN;}
;
Quand je lance avec l'entrée:
drop object
je reçois un MismatchedTokenException (5 = 15!).
Et avec l'entrée:
put o1 in o2
je reçois un NoViableAltException.
Bien qu'il fonctionne très bien avec
place o2 in o2
Je suis nouveau à cela, mais il semble qu'il y ait des ambiguïtés? Ou peut-être que mon utilisation d'ANTLR est incorrecte?
-t-elle poignée « mis sur l'objet '? Qu'en est-il de 'jeter objet'? –
(Ceci est "rikki", le questionneur qui avait des problèmes à se connecter sur un autre ordinateur, mais je suis connecté maintenant.) Oui, ceux-ci sont bien analysés. – Rao