سؤال

بعد مناقشة شديدة الشجر مع بارت كيرز على تحليل datastream صاخبة مع antlr, ، انتهى بي الأمر بمشكلة أخرى ...

الهدف لا يزال هو نفسه: فقط استخراج معلومات مفيدة مع القواعد التالية ،

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

parse 
  :  sentenceParts+ EOF 
  ;

sentenceParts  
  :  SUBJECT VERB INDIRECT_OBJECT  
  ;    

جملة مثل it's 10PM and the Lazy CAT is currently SLEEPING heavily on the SOFA in front of the TV. سوف ينتج ما يلي

alt text

هذا مثالي وهو يفعل بالضبط ما أريده .. من جملة كبيرة ، أنا أستخرج فقط الكلمات التي كان لها معنى بالنسبة لي .... لكن ، أسست الخطأ التالي. إذا كنت في مكان ما في النص ، فأنا أقدم كلمة تبدأ تمامًا مثل الرمز المميز MismathedTokenException أو أ noViableException

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

تنتج خطأ:

alt text

DOGGY يتم تفسيره على أنه بداية DOG وهو أيضًا جزء من الرمز المميز SUBJECT وفقد Lexer ... كيف يمكنني تجنب هذا دون تحديد DOGGY كرمز خاص ... أود أن أفهم المحلل DOGGY ككلمة في حد ذاتها.

هل كانت مفيدة؟

المحلول

حسنًا ، يبدو أن إضافة هذا ANY2 :'A'..'Z'+ {skip();}; يحل مشكلتي!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top