Frage

Ich bin sehr neu in der ANTLR Welt und ich versuche, herauszufinden, wie kann ich dieses Parsing-Tool verwenden, um eine Reihe von „lauten“ Zeichenfolge zu interpretieren. Was würde Ich mag ist folgendes zu erreichen.

nehmen wir zum Beispiel diesen Satz: It's 10PM and the Lazy CAT is currently SLEEPING heavily on the SOFA in front of the TV

Was ich Extrakt möchte ist CAT, SLEEPING und SOFA und haben eine Grammatik, dass Spiel leicht das folgende Muster: SUBJECT - VERB - Dativobjekt ... wo ich definieren könnte
VERB : 'SLEEPING' | 'WALKING';
SUBJECT : 'CAT'|'DOG'|'BIRD';
INDIRECT_OBJECT : 'CAR'| 'SOFA';

etc .. Ich mag nicht, um über die Runden mit einer permanenten „NoViableException“, wie ich alle Möglichkeiten, um die Struktur der Sprache nicht beschreiben kann. Ich will nur auseinander unnütze Worte reißen und halten nur die eine, die interessant sind.

Es ist eher wie wenn ich einen tokeniser hatte und fragte den Parser „Ok, den Stream lesen, bis Sie einen Betreff finden, dann den Rest ignorieren, bis Sie ein VERB finden, etc ..“
Ich brauche eine organisierte Struktur in einer nicht organisierten Satz ... Zum Beispiel zu extrahieren, würde Ich mag der Lage sein, zu interpretieren (Ich bin nicht die Stichhaltigkeit dieser äußerst einfach und falsche Ansicht von ‚Englisch Grammatik‘ zu urteilen)
SUBJECT - VERB - INDIRECT OBJECT
INDIRECT OBJECT - SUBJECT - VERB
so werde ich Sätze analysieren wie
It's 10PM and the Lazy CAT is currently SLEEPING heavily on the SOFA in front of the TV
oder
It's 10PM and, on the SOFA in front of the TV, the Lazy CAT is currently SLEEPING heavily

War es hilfreich?

Lösung

Sie können nur ein paar Lexer Regeln erstellen (die, die Sie geschrieben, zum Beispiel), und als letztes Mittel Lexer Regel, können Sie jedes Zeichen und skip() es:

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

Die Reihenfolge ist hier wichtig: die Lexer versuchen Token von oben nach unten anzupassen, so dass, wenn es nicht dem Token VERB, SUBJECT oder INDIRECT_OBJECT mithalten kann, ist es „fällt durch“ auf die ANY Regel und überspringt diese Token . Anschließend können Sie diese Parser Regeln verwenden, um Ihren Eingabestrom zu filtern:

parse
  :  sentenceParts+ EOF
  ;

sentenceParts
  :  SUBJECT VERB INDIRECT_OBJECT
  ;  

, die die Eingabe von Text analysieren werden:

  

Es ist 10.00 Uhr und die faule Katze ist derzeit SCHLAFEN    stark auf dem Sofa vor dem Fernseher. Die DOG    ist zu Fuß auf dem Sofa.

wie folgt:

alt text

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