أنتلر4:كيف تعرف البديل الذي يتم اختياره في سياق

StackOverflow https://stackoverflow.com//questions/22002799

  •  20-12-2019
  •  | 
  •  

سؤال

نفترض أن هناك قاعدة حول 'نوع'.هو إما نوع محدد مسبقا (يشار إليه بواسطة المعرف) أو أ تيبيدسكريبتور.

type
:   IDENTIFIER
|   typeDescriptor
;

في برنامجي ، لقد حصلت على مثيل تيبيكونتيكست 'كتكس'.كيف أعرف ما إذا كان يتم اختيار معرف المسار ، أو يتم اختيار تيبيدسكريبتور.

أنا أدرك طريقة واحدة وهي اختبار ctx.IDENTIFIER() == null و ctx.typeDescriptor() == null.لكن يبدو أنه لا يعمل بشكل جيد عندما يكون هناك الكثير من البدائل.هل هناك طريقة لإرجاع فهرس للإشارة إلى القاعدة التي يتم اختيارها?شكرا.

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

المحلول

لا ، يمكنك إما استخدام الطريقة التي وصفتها (التحقق مما إذا كان العنصر غير فارغ) ، أو يمكنك تسمية البدائل الخارجية للقاعدة باستخدام # المشغل.

type
  : IDENTIFIER     # someType
  | typeDescriptor # someOtherType
  ;

عند تسمية البدائل الخارجية ، وسوف تنتج ParserRuleContext فئات لكل من التسميات.في المثال أعلاه ، ستحصل إما على SomeTypeContext أو أ SomeOtherTypeContext, ، والذي ينطبق بالتساوي على واجهات المستمع والزائر التي تم إنشاؤها.

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