سؤال

أنا جديد جدًا في عالم 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 مساءً والقط الكسول نائم حاليًا بشدة على الأريكة أمام التلفزيون. الكلب يسير على الأريكة.

كالآتي:

alt text

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