سؤال

لدي AST تم إنشاؤه عبر AntlR ، وأحتاج إلى تحويله إلى واحد متوافق مع DLR (أشجار التعبير). ومع ذلك ، يبدو أنه لا يمكنني استخدام مطابقة أنماط الأشجار لهذا لأن أشجار التعبير تحتاج إلى لقطات فرعية في مثيل (وهو ما لا أستطيع الحصول عليه). ما هو الحل الأفضل بالنسبة لي لاستخدامه؟

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

المحلول

لقد فعلت شيئًا مشابهًا جدًا منذ بضع سنوات - لم أقم ببناء بنية DLR ، لكنني قمت ببناء بنية شجرة التعبير الخاصة بي ، والتي تحتاج أيضًا إلى الحجج في وقت البناء (لتحقيق الثبات).

في ذلك الوقت ، عملت مع Antlr V2 - ويجب أن أعترف ، أنني لست على دراية ببناء V3 الجديد ، بالإضافة إلى أنني لا أتذكر كل التفاصيل حول كيفية عملها في ذلك الوقت - لذا بدلاً من تزويدك بكامل على سبيل المثال ، سأحاول فقط إخبارك قصتي (لست متأكدًا ، إذا كانت تنطبق على مشكلتك أيضًا!):

بادئ ذي بدء ، لم يكن من الضروري بناء هيكيتي من عند AST. لقد استخدمت فقط منشئ AST AST AST كأداة: يمكن لكل قاعدة بناء AST إرجاع كائن بالإضافة إلى عقدة AST نفسها. يمكن بعد ذلك استخدام قيمة الإرجاع في القاعدة الخارجية كوسيطة للمُنشئ ، وهلم جرا. بحيث يتم بناء هذه الهيكل تلقائيا من أسفل إلى أعلى لك!

IOW ، تقوم ببناء الهيكل النهائي في نفس الوقت الذي تم فيه تصميم AST (يتم تصميم AST فقط لضمان قواعد بناء الجملة ، ويمكن إلقاؤها.) هذا النهج قوي للغاية ، وهو أسرع من بناء AST أولاً ، ثم تحويل ذلك! لكنه لا يزال يستخدم قوة محلل AST (على عكس استخدام المحلل/Lexer العادي وحده). وإذا كنت بحاجة إلى AST أيضًا - ما عليك سوى حفظه في مكان ما.

ومع ذلك ، إذا كنت ترغب في السير في AST النهائي - أتصور أنه يمكنك استخدام أي روتين برنامجي للقيام بذلك - فقط تأكد من أنه يعمل من أسفل إلى أعلى لإنشاء النتيجة!

آمل ان يكون هذا ساعدكم بطريقة ما!

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