23 أوضاع التصميم الفصل 15: وضع مترجم Java
التعريف: بالنظر إلى لغة ، وتحديد تمثيل القواعد ، وتحديد مترجم يستخدم التمثيل لتفسير الجمل باللغة.
النوع: نمط سلوكي
مخطط الفصل:
وضع المترجم المترجم هو وضع نادراً ما يتم استخدامه ، ولم أستخدم هذا الوضع من قبل. دعنا نلقي نظرة على وضع المترجم المترجم.
هيكل وضع المترجم
مترجم مجردة: إعلان واجهة مجردة (أو فئة تجريدية) يتم تنفيذ جميع التعبيرات الملموسة إليها. الواجهة هي أساسا طريقة تفسير () ، تسمى عملية التفسير. يتم الانتهاء من مهمة التفسير المحددة من خلال فئات التنفيذ المختلفة ، ويتم الانتهاء من المترجم المحدد من قبل Terminator Terminalexpression و Outserexpression غير الطرفي غير الطرفي على التوالي.
تعبير المنهي: ينفذ عمليات التفسير المرتبطة بالعناصر في القواعد. عادة ، لا يوجد سوى تعبير واحد من المنهي في نمط مترجم ، ولكن هناك حالات متعددة ، تقابل أطراف مختلفة. نصف المنهي هو وحدة تشغيل في القواعد. على سبيل المثال ، هناك صيغة بسيطة R = R1+R2 ، حيث يكون R1 و R2 من المقبلات ، والمترجمين الفوريين المقابلين الذين يحجلين R1 و R2 هي أطراف.
التعبير غير الطرفي: كل قاعدة في القواعد النحوية تتوافق مع التعبير غير الطرفي. التعبيرات غير الطرفية هي عمومًا مشغليين أو كلمات رئيسية أخرى في القواعد. على سبيل المثال ، في الصيغة R = R1 + R2 ، + هي شخصية غير طرفية ، ومترجم تحليل + هو حرف غير طرفي. تزيد التعبيرات غير الطالبية وفقًا لتعقيد المنطق ، ومن حيث المبدأ تتوافق كل قاعدة قواعد النحوية مع التعبير غير الطرفي.
دور البيئة: يتم استخدام مهمة هذا الدور عمومًا لتخزين القيم المحددة المقابلة لكل مُمثلات في القواعد ، مثل R = R1+R2. نقوم بتعيين 100 إلى R1 و 200 إلى R2. يجب تخزين هذه المعلومات في دور البيئة. في كثير من الحالات ، نستخدم الخريطة للعمل كدور البيئة كافي.
تنفيذ الكود
Class Context {} Abstract Class Expression {Public Abstract Object Troupreter (Context CTX) ؛ } class terminalexpression يمتد التعبير {المترجم الكائن العام (السياق ctx) {return null ؛ }} الفئة غير الطالبة يمتد التعبير {public nonterminalexpression (التعبير ... تعبيرات) {} مترجم كائن عام (سياق ctx) {return null ؛ }} client client client {public static void main (string [] args) {string expression = "" ؛ char [] chararray = expression.tochararray () ؛ السياق ctx = سياق جديد () ؛ مكدس <xpression> stack = مكدس جديد <Suptrect> () ؛ لـ (int i = 0 ؛ i <chararray.length ؛ i ++) {// جعل الحكم بناء الجملة واتصل بشكل متكرر} exp = stack.pop () ؛ Exp.Interpreter (CTX) ؛ }}يجب تنفيذ جزء الكود من العودية النحوية وفقًا للوضع المحدد ، لذلك لا ينعكس في الكود. التعبيرات التجريدية هي مفتاح توليد مجموعة نحوية. يفسر كل تعبير غير طرفي وحدة بناء جملة الحد الأدنى ، ثم يجمع بشكل متكرر هذه وحدات بناء الجملة في قواعد اللغة كاملة. هذا هو نمط مترجم.
مزايا وعيوب وضع المترجم
المترجم هو أداة تحليل بناء الجملة بسيطة. ميزة أهمها هي قابليتها. يتطلب تعديل قواعد بناء الجملة فقط تعديل الأحرف غير الطرفية المقابلة. إذا قمت بتوسيع بناء الجملة ، فأنت بحاجة فقط إلى إضافة حرف غير طرفي.
ومع ذلك ، فإن نمط المترجم المترجم سيؤدي إلى توسيع الفئة ، ويحتاج كل بناء جملة لإنتاج تعبير غير طرفي. عندما تكون قواعد بناء الجملة معقدة نسبيًا ، قد يتم إنشاء عدد كبير من ملفات الفصل ، مما يسبب الكثير من المتاعب في الصيانة. في الوقت نفسه ، نظرًا لأن طريقة الاتصال العودية تم اعتمادها ، فإن كل تعبير غير طرفي يهتم فقط بالتعبيرات المتعلقة بنفسه. كل تعبير يحتاج إلى معرفة النتيجة النهائية ويجب أن يكون عودية. سواء كانت لغة موجهة نحو الكائن أو لغة موجهة نحو العملية ، فإن العودية هي طريقة غير موصى بها. نظرًا لاستخدام الكثير من الحلقات والتكرار ، فإن الكفاءة هي مشكلة لا يمكن تجاهلها. خاصة عند استخدامها لتفسير مجمع التحليل ، بناء الجملة المطولة ، تكون الكفاءة لا تطاق.
السيناريوهات المعمول بها لوضع المترجم
يمكن استخدام وضع المترجم المترجم في الحالات التالية:
هناك قاعدة بناء جملة بسيطة ، مثل بيان SQL. إذا كنا بحاجة إلى إجراء تحويل RM استنادًا إلى عبارات SQL ، فيمكننا استخدام نمط المترجم المترجم لتفسير البيان.
بعض المشكلات المتكررة ، مثل العمليات الأربع للإضافة والطرح والضرب والانقسام ، ولكن الصيغ مختلفة في كل مرة. في بعض الأحيان يكون A+BC*D ، وأحيانًا يكون CD*B+، وما إلى ذلك. الصيغ متغيرة باستمرار ، لكنها جميعها متصلة بأحرف الأربعة غير الطرفية للإضافة والطرح والتكاثر والتقسيم. في هذا الوقت ، يمكننا استخدام وضع المترجم.
أشياء يجب ملاحظتها
وضع المترجم المترجم هو في الحقيقة وضع نادرًا نسبيًا لأنه مزعج للغاية للحفاظ عليه. تخيل أنه إذا لم تكن مجموعة من المترجمين الفوريين غير الطرفي على دراية بقواعد القواعد المسبقة ، أو أن القواعد بسيطة بشكل خاص ، فسيكون من الصعب فهم منطقها. نادراً ما يستخدم وضع المترجم المترجم في تطوير النظام الفعلي لأنه يمكن أن يسبب مشاكل مثل الكفاءة والأداء والصيانة.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.