Pregunta

Después de una discusión muy interesing con Bart Kiers el análisis de un flujo de datos con ruido antlr , estoy terminando con otro problema ...

El objetivo sigue siendo el mismo: solamente la extracción de información útil con la siguiente gramática,

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

parse 
  :  sentenceParts+ EOF 
  ;

sentenceParts  
  :  SUBJECT VERB INDIRECT_OBJECT  
  ;    

una frase como it's 10PM and the Lazy CAT is currently SLEEPING heavily on the SOFA in front of the TV. producirá el siguiente

text alt

Esto es perfecto y que está haciendo exactamente lo que quiero .. de una gran frase, estoy extraer sólo las palabras que tenían un sentido para mí .... Pero el, I fundó el siguiente error. Si alguna parte del texto que estoy introduciendo una palabra que comienza exactamente igual que un token, que estoy terminando con una MismathedTokenException o una noViableException

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

producir un error:

text alt

DOGGY se interpreta como el comienzo de DOG que es también una parte de la SUBJECT token y el analizador léxico se pierde ... ¿Cómo podría evitar esto sin definir DOGGY como una ficha especial ... Me hubiera gustado que el analizador DOGGY entender como una palabra en sí misma.

¿Fue útil?

Solución

Bueno, parece que la adición de este ANY2 :'A'..'Z'+ {skip();}; resuelve mi problema!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top