أنتلر4:كيف تعرف البديل الذي يتم اختياره في سياق
سؤال
نفترض أن هناك قاعدة حول 'نوع'.هو إما نوع محدد مسبقا (يشار إليه بواسطة المعرف) أو أ تيبيدسكريبتور.
type
: IDENTIFIER
| typeDescriptor
;
في برنامجي ، لقد حصلت على مثيل تيبيكونتيكست 'كتكس'.كيف أعرف ما إذا كان يتم اختيار معرف المسار ، أو يتم اختيار تيبيدسكريبتور.
أنا أدرك طريقة واحدة وهي اختبار ctx.IDENTIFIER() == null
و ctx.typeDescriptor() == null
.لكن يبدو أنه لا يعمل بشكل جيد عندما يكون هناك الكثير من البدائل.هل هناك طريقة لإرجاع فهرس للإشارة إلى القاعدة التي يتم اختيارها?شكرا.
المحلول
لا ، يمكنك إما استخدام الطريقة التي وصفتها (التحقق مما إذا كان العنصر غير فارغ) ، أو يمكنك تسمية البدائل الخارجية للقاعدة باستخدام #
المشغل.
type
: IDENTIFIER # someType
| typeDescriptor # someOtherType
;
عند تسمية البدائل الخارجية ، وسوف تنتج ParserRuleContext
فئات لكل من التسميات.في المثال أعلاه ، ستحصل إما على SomeTypeContext
أو أ SomeOtherTypeContext
, ، والذي ينطبق بالتساوي على واجهات المستمع والزائر التي تم إنشاؤها.