2010-12-01 37 views
1

Après une discussion très interesing avec Bart Kiers on parsing a noisy datastream with ANTLR, je finir avec un autre problème ...ANTLR sur un flux de données bruitées Partie 2

Le but est toujours le même: que l'extraction d'informations utiles à ce qui suit grammaire,

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

parse 
    : sentenceParts+ EOF 
    ; 

sentenceParts 
    : SUBJECT VERB INDIRECT_OBJECT 
    ;  

une phrase comme it's 10PM and the Lazy CAT is currently SLEEPING heavily on the SOFA in front of the TV. produira le

suivant

alt text

C'est parfait et ça fait exactement ce que je veux ... à partir d'une grosse phrase, j'extrais seulement les mots qui avaient un sens pour moi .... Mais le, j'ai fondé l'erreur suivante. Si quelque part dans le texte que je suis l'introduction d'un mot qui commence exactement comme un jeton, je finir avec un MismathedTokenException ou un noViableException

 

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

produire une erreur:

alt text

DOGGY est interprété comme le début pour DOG qui fait aussi partie du TOKEN SUBJECT et la lexer est perdue ... Comment est-ce que j'ai pu éviter cela sans définir DOGGY comme un jeton spécial ... J'aurais aimé l'analyseur de sous tand DOGGY comme mot en soi.

Répondre

1

Eh bien, il semble que l'ajout de ce ANY2 :'A'..'Z'+ {skip();}; résout mon problème!