التمييز بين الرموز الاختيارية أثناء زيارة قاعدة Antlr

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

  •  21-12-2019
  •  | 
  •  

سؤال

هذا السؤال يتعلق بكيفية التمييز بين الرموز الاختيارية أثناء زيارة قاعدة Antlr.

لدي قاعدة محلل محددة قمت بتحديده في قواعد نحوية Antlr4 يسمى "تعيين" الذي يحاول تعيين نتيجة تعبير إلى علامة تمثيلها بواسطة INT، على سبيل المثال 215="Foo". كما يسمح بالتخصص في علامة فهرس ، على سبيل المثال 215 [2]="foo". سؤالي هو كيف يمكنني التمييز بين مجلس النموذج 215 مقابل النموذج 215 [2] من خلال النظر إلى الكائنات التي يقدمها Antlr أثناء تقييم قاعدة التعيين؟

giveacodicetagpre.

قد حددت طريقة زائر لالتقاط تقييم المحلل المحلل في قاعدة "تعيين" لتيار رمز الرمز المميز:

215 [2]="foo"

giveacodicetagpre.

في هذه النقطة اليسار="215 [2]" واليمين="foo"

هل يوفر كائن CTX طريقة لتحديد ما إذا كان الجانب الأيسر من المهمة (215 [2]) يحتوي بالفعل على اختياري "[2]" محددة من قبل INT؟ أريد التمييز بين مجلس النموذج 215 [2] مقابل 215. يمكنني استخدام Java Regex لتحليل "اليسار" (انظر أدناه) لإجراء التصميم، لكنني أتساءل عما إذا كان يمكنني الحصول على الجواب مباشرة من Antlr. < / ص> giveacodicetagpre.

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

المحلول

حل واحد وجدته بعد قراءة "مرجع Antlr - الفصل 12" كان لتحديد الفهرس "[/ em>" [2] "كمتزام Lexer من تلقاءه ووضعه على قناة منفصلة.

giveacodicetagpre.

ثم يمكنني إجراء التصميم في Visitissign ():

giveacodicetagpre.

أعتقد أن الدرس هنا هو أنه لا ينبغي دمج IDX مع أي رموز أخرى إذا كنت بحاجة إلى الرجوع إليها بشكل فردي.

شيء واحد لا يزال يربكني هو إذا قمت بإزالة قناة TAG_INDEX:

giveacodicetagpre.

أحصل على: الخط 1: 4 لا بديل قابل للتطبيق في الإدخال "215 [2]"

سيكون من الجيد معرفة السبب ولكن لدي حل على الأقل.

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