شجرة بناء الجملة المجردة

شجرة بناء جملة مجردة للرمز التالي لخوارزمية إقليدس :
بينما b لا يساوي صفرًا : إذا كان a أكبر من b : a := a - b وإلا : b := b - a أعد a

شجرة بناء الجملة المجردة ( AST ) هي بنية بيانات تُستخدم في علوم الحاسوب لتمثيل بنية برنامج أو جزء من التعليمات البرمجية. وهي تمثيل شجري للبنية النحوية المجردة للنص (غالبًا ما يكون شفرة مصدرية ) مكتوبًا بلغة رسمية . تشير كل عقدة في الشجرة إلى بنية موجودة في النص. ويُطلق عليها أحيانًا اسم شجرة بناء الجملة فقط .

إنّ بناء الجملة "مجرد" بمعنى أنه لا يُمثّل كل التفاصيل الواردة في بناء الجملة الحقيقي، بل يُمثّل فقط التفاصيل البنيوية أو المتعلقة بالمحتوى. على سبيل المثال، تُعتبر أقواس التجميع ضمنية في بنية الشجرة، لذا لا يلزم تمثيلها كعقد منفصلة. وبالمثل، يمكن الإشارة إلى بنية نحوية مثل عبارة "إذا-شرط-ثم" بواسطة عقدة واحدة بثلاثة فروع.

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

تُستخدم أشجار بناء الجملة المجردة أيضًا في أنظمة تحليل البرامج وتحويل البرامج .

التطبيق في المترجمات

تُعدّ أشجار بناء الجملة المجردة هياكل بيانات شائعة الاستخدام في المترجمات لتمثيل بنية شيفرة البرنامج. وعادةً ما تكون شجرة بناء الجملة المجردة نتاجًا لمرحلة تحليل بناء الجملة في المترجم. وغالبًا ما تُستخدم كتمثيل وسيط للبرنامج عبر عدة مراحل يتطلبها المترجم، ولها تأثير كبير على الناتج النهائي للمترجم.

تحفيز

يحتوي نموذج شجرة بناء الجملة المجردة (AST) على العديد من الخصائص التي تساعد في الخطوات الإضافية لعملية التجميع:

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

تتسم اللغات بطبيعتها بالغموض . ولتجنب هذا الغموض، تُحدد لغات البرمجة عادةً باستخدام قواعد نحوية خالية من السياق (CFG). مع ذلك، توجد جوانب في لغات البرمجة لا تستطيع قواعد النحو الخالية من السياق التعبير عنها، لكنها جزء لا يتجزأ من اللغة وموثقة في مواصفاتها. هذه تفاصيل تتطلب سياقًا لتحديد صحتها وسلوكها. على سبيل المثال، إذا سمحت لغة ما بتعريف أنواع جديدة، فلا يمكن لقواعد النحو الخالية من السياق التنبؤ بأسماء هذه الأنواع ولا بكيفية استخدامها. حتى لو كانت اللغة تحتوي على مجموعة أنواع محددة مسبقًا، فإن فرض الاستخدام الصحيح يتطلب عادةً سياقًا ما. مثال آخر هو " التصنيف الديناميكي" ، حيث يمكن أن يتغير نوع العنصر تبعًا للسياق. يُعد تحميل المعاملات الزائد حالة أخرى يعتمد فيها الاستخدام الصحيح والوظيفة النهائية على السياق.

تصميم

غالباً ما يرتبط تصميم شجرة بناء الجملة المجردة (AST) ارتباطاً وثيقاً بتصميم المترجم وخصائصه المتوقعة.

تشمل المتطلبات الأساسية ما يلي:

  • يجب الحفاظ على أنواع المتغيرات، وكذلك موقع كل تعريف في شفرة المصدر.
  • يجب تمثيل ترتيب العبارات القابلة للتنفيذ بشكل صريح ومحدد جيدًا.
  • يجب تخزين المكونات اليسرى واليمنى للعمليات الثنائية وتحديدها بشكل صحيح.
  • يجب تخزين المعرفات وقيمها المخصصة لعبارات التخصيص.

يمكن استخدام هذه المتطلبات لتصميم بنية البيانات الخاصة بشجرة بناء الجملة المجردة (AST).

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

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

بعد التحقق من صحة شجرة بناء الجملة المجردة (AST)، تُستخدم كأساس لتوليد الشفرة . وغالبًا ما تُستخدم هذه الشجرة لتوليد تمثيل وسيط (IR)، يُسمى أحيانًا لغة وسيطة ، وذلك لأغراض توليد الشفرة .

استخدامات أخرى

التفاضل AST

تُعرف عملية مقارنة شجرة بناء الجملة المجردة (AST)، أو اختصارًا "مقارنة الشجرة"، بحساب قائمة الاختلافات بين شجرتي بناء جملة مجردتين. [ 1 ] [ 2 ] تُسمى هذه القائمة عادةً "نص التحرير". يشير نص التحرير مباشرةً إلى شجرة بناء الجملة المجردة للبرنامج. على سبيل المثال، قد ينتج عن عملية التحرير إضافة عقدة جديدة في شجرة بناء الجملة المجردة تُمثل دالة.

الكشف عن الاستنساخ

يُعدّ AST تجريدًا قويًا لإجراء عملية الكشف عن نسخ التعليمات البرمجية . [ 3 ]

تعريف

الفنون

يتركS{\displaystyle S}أن تكون مجموعة من نوع ما ، فإن عدد العناصر هو زوج مرتب(s1،...،sن،s){\displaystyle (s_{1},\dots ,s_{n},s)}، لs1،...،sن،sS{\displaystyle s_{1},\dots ,s_{n},s\in S}، وتكتب أيضًا على(s1،...،sن)s{\displaystyle (s_{1},\dots ,s_{n})s}وبشكل أدق،أرأناتy(S):=نشمالSن+1{\displaystyle \mathrm {Arity} (S):=\coprod _{n\in \mathbb {N} }S^{n+1}}.

يتركيا={ياα}αأرأناتy(S){\displaystyle {\mathcal {O}}=\{{\mathcal {O_{\alpha }}}\}_{\alpha \in \mathrm {Arity} (S)}}كنأرأناتy(S){\displaystyle \mathrm {Arity} (S)}عائلة مفهرسة من مجموعات منفصلة من المؤثرات . إذاo{\displaystyle o}عدد المعاملات(s1،...،sن)s{\displaystyle (s_{1},\dots ,s_{n})s}نقول ذلكo{\displaystyle o}نوعs{\displaystyle s}ولهن{\displaystyle n}نوع من أنواع الجدالs1،...،sن{\displaystyle s_{1},\dots ,s_{n}}.

ASTs

يصلحS{\displaystyle S}أن تكون مجموعة منتهية من نوع ما، ويا{\displaystyle {\mathcal {O}}}أنأرأناتy(S){\displaystyle \mathrm {Arity} (S)}عائلة مفهرسة من مجموعات منفصلة من المؤثرات . ليكنX={Xs}sS{\displaystyle {\mathcal {X}}=\{{\mathcal {X}}_{s}\}_{s\in S}}كنS{\displaystyle S}عائلة من المتغيرات المنفصلة المفهرسة.أ[X]={أ[X]s}sS{\displaystyle {\mathcal {A}}[{\mathcal {X}}]=\{{\mathcal {A}}[{\mathcal {X}}]_{s}\}_{s\in S}}أصغر أنواع أشجار بناء الجملة المجردة ، أو AST sS{\displaystyle S}عائلة من المجموعات المنفصلة المفهرسة والمغلقة في ظل الشروط التالية:

  1. المتغيرات هي عبارة عن هياكل شجرة بناء الجملة المجردة (ASTs): إذاxXs{\displaystyle x\in {\mathcal {X}}_{s}}، ثمxأ[X]s{\displaystyle x\in {\mathcal {A}}[{\mathcal {X}}]_{s}}.
  2. يقوم المشغلون بدمج أنظمة AST: إذاo{\displaystyle o}هو عامل من نوع(s1،...،sن)s{\displaystyle (s_{1},\dots ,s_{n})s}، وأأناأ[X]sأنا{\displaystyle a_{i}\in {\mathcal {A}}[{\mathcal {X}}]_{s_{i}}}للجميع1أنان{\displaystyle 1\leq i\leq n}، ثمo(أ1؛...؛أن)أ[X]s{\displaystyle o(a_{1};\dots ;a_{n})\in {\mathcal {A}}[{\mathcal {X}}]_{s}}.

انظر أيضاً

مراجع

  1. فلوري، بيات؛ وورش، مايكل؛ بينزجر، مارتن؛ غال، هارالد (2007). "تقطير التغييرات: تفاضل الشجرة لاستخراج تغييرات دقيقة من شفرة المصدر" . معاملات IEEE في هندسة البرمجيات . 33 (11): 725-743 . Bibcode : 2007ITSEn..33..725F . doi : 10.1109/tse.2007.70731 . ISSN 0098-5589 . S2CID 13659557 .  
  2. فاليري، جان ريمي؛ موراندا، فلوريال؛ بلان، خافيير؛ مارتينيز، ماتياس؛ مونبيروس، مارتن (2014). "مقارنة دقيقة وشاملة لشفرة المصدر". وقائع المؤتمر الدولي التاسع والعشرين لجمعية ACM/IEEE حول هندسة البرمجيات الآلية . الصفحات 313-324 . doi : 10.1145/2642937.2642982 . ISBN  978-1-4503-3013-8.
  3. كوشكه، راينر؛ فالكه، رايمار؛ فرينزل، بيير (2006). "الكشف عن الاستنساخ باستخدام أشجار لواحق بناء الجملة المجردة" . المؤتمر الثالث عشر للعمل حول الهندسة العكسية لعام 2006. معهد مهندسي الكهرباء والإلكترونيات. الصفحات 253-262 . doi : 10.1109/wcre.2006.18 . ISBN  0-7695-2719-1. S2CID 6985484 . 

للمزيد من القراءة