Antlr على دفق بيانات صاخب الجزء 2
-
29-09-2019 - |
سؤال
بعد مناقشة شديدة الشجر مع بارت كيرز على تحليل 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.
سوف ينتج ما يلي
هذا مثالي وهو يفعل بالضبط ما أريده .. من جملة كبيرة ، أنا أستخرج فقط الكلمات التي كان لها معنى بالنسبة لي .... لكن ، أسست الخطأ التالي. إذا كنت في مكان ما في النص ، فأنا أقدم كلمة تبدأ تمامًا مثل الرمز المميز 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.
تنتج خطأ:
DOGGY
يتم تفسيره على أنه بداية DOG
وهو أيضًا جزء من الرمز المميز SUBJECT
وفقد Lexer ... كيف يمكنني تجنب هذا دون تحديد DOGGY
كرمز خاص ... أود أن أفهم المحلل DOGGY
ككلمة في حد ذاتها.
المحلول
حسنًا ، يبدو أن إضافة هذا ANY2 :'A'..'Z'+ {skip();};
يحل مشكلتي!