على قدم المساواة (وليس رمزية) في قواعد القواعد Antlr. ماذا يعني هذا؟
سؤال
ماذا البناء 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 للقيام فعليا بالحساب.
لا تنتمي إلى StackOverflow