على قدم المساواة (وليس رمزية) في قواعد القواعد Antlr. ماذا يعني هذا؟

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

سؤال

ماذا البناء basename = في القاعدة التالية؟

tabname:
   (ID'.')? basename = ID
;

هناك هذا حدوث واحد basename في القواعد.

شكرا

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

المحلول

باستخدام Equals في بناء الجملة يخلق متغير يسمى basename يمكن الإشارة إليها بعد ذلك في الإجراءات:

tabname:
    (ID '.')? basename=ID {
        if ($basename.equals("CAT"))
            System.out.println("CAT found");
    };

نصائح أخرى

يتم استخدامه لتسمية المتغيرات.

قد يكون هذا مفيدا جدا إذا كنت ترغب في تشغيل بعض التعليمات البرمجية أثناء المحلل.

النظر في مثال حاسبة Java:

expr returns [float r]
{
float a,b;
r=0;
}
:   #(PLUS a=expr b=expr)   {r = a+b;}
|   #(STAR a=expr b=expr)   {r = a*b;}
|   i:INT           {r = (float)Integer.parseInt(i.getText());}
;

نحن هنا نقول عندما نطابق مع شجرة تحتوي على رمزية زائد أو نجمة تليها تعبيرات 2، سنناسب التعبيرات وتسميةها a و b على التوالى.

بعد أن نستخدم هذه المتغيرات التي تطابقناها في بيان Java. ويرد هذا البيان داخل { و } اقواس. نحن هنا نستخدم بيانات Java للقيام فعليا بالحساب.

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