Antlr على دفق بيانات صاخب
-
29-09-2019 - |
سؤال
أنا جديد جدًا في عالم Antlr وأحاول معرفة كيف يمكنني استخدام أداة التحليل هذه لتفسير مجموعة من سلسلة "صاخبة". ما أود تحقيقه هو ما يلي.
لنأخذ على سبيل المثال هذه العبارة: It's 10PM and the Lazy CAT is currently SLEEPING heavily on the SOFA in front of the TV
ما أود استخراجه هو CAT
, SLEEPING
و SOFA
والحصول على قواعد تتطابق بسهولة مع النمط التالي: الموضوع - الفعل - كائن غير مباشر ... حيث يمكنني تحديد
VERB : 'SLEEPING' | 'WALKING';
SUBJECT : 'CAT'|'DOG'|'BIRD';
INDIRECT_OBJECT : 'CAR'| 'SOFA';
إلخ .. لا أريد أن ينتهي الأمر بـ "NoteableException" دائم حيث لا يمكنني وصف كل الاحتمالات حول بنية اللغة. أريد فقط أن تمزيق كلمات عديمة الفائدة وأحتفظ بالكلمات المثيرة للاهتمام.
يبدو الأمر كما لو كان لدي رمز رمزي وسأل المحلل "حسنًا ، اقرأ الدفق حتى تجد موضوعًا ، ثم تجاهل الباقي حتى تجد فعلًا ، إلخ .."
أحتاج إلى استخراج بنية منظمة في مجموعة غير منظمة ... على سبيل المثال ، أود أن أكون قادرًا على التفسير (أنا لا أحكم على أهمية هذه النظرة الأساسية وغير الصحيحة تمامًا لـ "قواعد اللغة الإنجليزية")
SUBJECT - VERB - INDIRECT OBJECT
INDIRECT OBJECT - SUBJECT - VERB
لذلك سأجعل الجمل مثل
It's 10PM and the Lazy CAT is currently SLEEPING heavily on the SOFA in front of the TV
أو
It's 10PM and, on the SOFA in front of the TV, the Lazy CAT is currently SLEEPING heavily
المحلول
يمكنك إنشاء اثنين فقط من قواعد Lexer (تلك التي نشرتها ، على سبيل المثال) ، وكقاعدة أخرى لليسكر ، يمكنك مطابقة أي حرف و skip()
هو - هي:
VERB : 'SLEEPING' | 'WALKING';
SUBJECT : 'CAT'|'DOG'|'BIRD';
INDIRECT_OBJECT : 'CAR'| 'SOFA';
ANY : . {skip();};
الطلب مهم هنا: يحاول Lexer مطابقة الرموز من أعلى إلى أسفل ، لذلك إذا لم يتمكن من مطابقة أي من الرموز الرموز VERB
, SUBJECT
أو INDIRECT_OBJECT
, ، "يسقط" إلى ANY
حكم ويتخطى هذا الرمز المميز. يمكنك بعد ذلك استخدام قواعد المحلل هذه لتصفية دفق الإدخال الخاص بك:
parse
: sentenceParts+ EOF
;
sentenceParts
: SUBJECT VERB INDIRECT_OBJECT
;
الذي سيحل نص الإدخال:
إنه الساعة 10 مساءً والقط الكسول نائم حاليًا بشدة على الأريكة أمام التلفزيون. الكلب يسير على الأريكة.
كالآتي: