Question

Je suis très nouveau dans le monde ANTLR et je suis en train de comprendre comment puis-je utiliser cet outil d'analyse pour interpréter un ensemble de la chaîne « bruyant ». Ce que je voudrais obtenir est le suivant.

Prenons par exemple cette phrase: It's 10PM and the Lazy CAT is currently SLEEPING heavily on the SOFA in front of the TV

Ce que je voudrais extrait est CAT, SLEEPING et SOFA et ont une grammaire qui correspondent facilement le modèle suivant: OBJET - VERB - OBJET INDIRECT ... où je pourrais définir
VERB : 'SLEEPING' | 'WALKING';
SUBJECT : 'CAT'|'DOG'|'BIRD';
INDIRECT_OBJECT : 'CAR'| 'SOFA';

etc .. Je ne veux pas se termine par un « NoViableException » permanent que je ne peux pas décrire toutes les possibilités autour de la structure de la langue. Je veux juste arracher des mots à part inutiles et juste garder celui qui sont intéressants.

Il est plus comme si j'avais un tokeniser et demandé à l'analyseur « Ok, lire le flux jusqu'à ce que vous trouver un sujet, puis ignorer le reste jusqu'à ce que vous trouviez un VERB, etc .. »
Je dois extraire une structure organisée dans un ensemble organisé un ... Par exemple, je voudrais être en mesure d'interpréter (je ne suis pas juger de la pertinence de ce point de vue tout à fait fondamentale et incorrecte de la « grammaire anglaise »)
SUBJECT - VERB - INDIRECT OBJECT
INDIRECT OBJECT - SUBJECT - VERB
donc je vais analyser des phrases comme
It's 10PM and the Lazy CAT is currently SLEEPING heavily on the SOFA in front of the TV
ou
It's 10PM and, on the SOFA in front of the TV, the Lazy CAT is currently SLEEPING heavily

Était-ce utile?

La solution

Vous pouvez créer seulement quelques règles analyseurs lexicaux (ceux où vous avez posté, par exemple), et comme dernière règle lexer, vous pouvez correspondre à un caractère et skip() il:

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

L'ordre est important: le lexer tente de faire correspondre les jetons de haut en bas, donc si elle ne peut pas correspondre à l'un des VERB jetons, SUBJECT ou INDIRECT_OBJECT, il « passe » à la règle de ANY et saute ce jeton . Vous pouvez ensuite utiliser ces règles d'analyseur pour filtrer votre flux d'entrée:

parse
  :  sentenceParts+ EOF
  ;

sentenceParts
  :  SUBJECT VERB INDIRECT_OBJECT
  ;  

qui analysera le texte d'entrée:

  

Il et de 22 heures le Lazy CAT sommeille actuellement    en grande partie sur le canapé devant la télévision. Le chien    est Marchons sur la SOFA.

comme suit:

text alt

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top