Frage

Nach einer sehr interesing Diskussion mit Bart Kiers auf Parsen einen lauten Datenstrom mit ANTLR , ich bin Ende mit einem anderen Problem ...

Das Ziel ist immer noch das gleiche: nur nützliche Informationen mit der folgenden Grammatik zu extrahieren,

VERB            : 'SLEEPING' | 'WALKING';
SUBJECT         : 'CAT'|'DOG'|'BIRD'; 
INDIRECT_OBJECT : 'CAR'| 'SOFA';  
ANY             : . {skip();};

parse 
  :  sentenceParts+ EOF 
  ;

sentenceParts  
  :  SUBJECT VERB INDIRECT_OBJECT  
  ;    

ein Satz wie it's 10PM and the Lazy CAT is currently SLEEPING heavily on the SOFA in front of the TV. die folgenden

produzieren

alt text

Das ist perfekt und es tut genau das, was ich will .. von einem großen Satz, bin Extrahieren mir die Worte nur, die ein Gefühl für mich hatte .... Aber das, gründete ich die folgende Fehlermeldung. Wenn irgendwo im Text ich ein Wort bin einzuführen, die genau wie ein Token beginnen, ich bin ende mit einem MismathedTokenException oder einem noViableException

    it's 10PM and the Lazy CAT is currently SLEEPING heavily, 
    with a DOGGY bag, on the SOFA in front of the TV.

erzeugen einen Fehler:

alt text

DOGGY als Anfang für DOG interpretiert wird, der auch ein Teil der TOKEN SUBJECT ist und die Lexer verloren ... Wie ich das ohne definieren DOGGY als besonderes Zeichen vermeiden könnte ... Ich habe wie der Parser verstehen DOGGY als ein Wort in sich selbst.

War es hilfreich?

Lösung

Nun, es scheint, dass diese ANY2 :'A'..'Z'+ {skip();}; Zugabe löst mein Problem!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top