أشجار بناء الجملة المجردة في البرمجة: دليل شامل

آخر تحديث: أبريل 7 2026
نبذة عن الكاتب: تكنوديجيتال
  • تمثل شجرة بناء الجملة المجردة (AST) البنية المنطقية للبرنامج، مما يؤدي إلى إزالة التفاصيل النحوية غير ذات الصلة.
  • يتم بناء أشجار بناء الجملة المجردة (ASTs) من أبجديات ذات دوال عددية وقواعد نحوية شجرية تحدد العقد والهياكل الصالحة.
  • تسمح رموز ديوي والمعاملات مثل "." أو "/" بالإشارة الدقيقة إلى الأشجار الفرعية والمسارات داخل هذه الهياكل.
  • تعتمد المترجمات والمفسرات وأدوات تحليل التعليمات البرمجية على شجرة بناء الجملة المجردة (AST) لتحسين البرامج وتحويلها وفهمها بشكل موثوق.

أشجار بناء الجملة المجردة في البرمجة

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

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

ما هي شجرة بناء الجملة المجردة (AST) تحديداً؟

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

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

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

يكمن جمال شجرة بناء الجملة المجردة (AST) في أنها تسهل المراحل اللاحقة للمترجم أو المفسر، مثل فحص الأنواع أو التحسينات أو توليد التعليمات البرمجية ، لأنها توفر رؤية واضحة لبنية البرنامج دون ضوضاء نحوية.

مثال على شجرة بناء الجملة المجردة في البرمجة

الفرق بين شجرة بناء الجملة الملموسة وشجرة بناء الجملة المجردة

لفهم مساهمة شجرة التحليل المجردة (AST) بشكل كامل، من المفيد أولاً مقارنة شجرة التحليل الملموسة بشجرة التحليل المجردة. تخيل قواعد نحوية بسيطة تتعرف على التعبيرات الحسابية مثل "a + 4 * 5" . تعكس شجرة التحليل الملموسة بدقة تطبيق كل قاعدة من قواعد النحو: الرموز غير الطرفية، والرموز الطرفية، والأقواس، والمعاملات، وما إلى ذلك.

عادةً ما تكون هذه الشجرة عميقة وتحتوي على العديد من العقد الوسيطة التي تقتصر وظيفتها على الحفاظ على البنية الرسمية للقواعد. على سبيل المثال، قد توجد عقد لـ "التعبير" و"المصطلح" و"العامل"، ثم الرموز النهائية مثل "+" و "*" والمعرفات والأرقام. يصبح كل إنتاج فرعًا من فروع الشجرة، مما يزيد من تعقيدها البنيوي.

من ناحية أخرى، يقتصر بناء الجملة المجرد لنفس التعبير على تمثيل العمليات والمعاملات الفعلية . وبالتالي، بدلاً من عدة مستويات من "التعبير" و"المصطلح"، يمكننا الحصول على عقدة جذرية تمثل الجمع، مع عقدتين فرعيتين: على اليسار مُعرِّف a، وعلى اليمين عقدة ضرب، وعقدتاها الفرعيتان هما القيمتان 4 و5. تختفي العقد النحوية البحتة، ويُعاد ترتيب أجزاء من البنية أو تُختصر.

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

الأشجار والأبجديات ذات دالة المعامل

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

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

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

انطلاقًا من هذه الأبجدية ذات عدد المعاملات، يمكن تحديد مجموعة جميع الأشجار الممكنة: بدءًا من الشجرة الفارغة (عند أخذها في الاعتبار)، وإضافة جميع الرموز ذات عدد المعاملات 0 والمتغير، والتوسع استقرائيًا: إذا كان الرمز من النوع k-ary، فيمكن وضعه كعقدة أصلية لـ k من الأشجار الفرعية المُنشأة مسبقًا. ينتج عن ذلك لغة الشجرة (أو المصطلح) المرتبطة بالأبجدية.

لغة الشجرة ومفهوم العقدة

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

  ما هو React؟ شرح شامل لمكتبة تطوير الويب الرائدة

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

من هذا المنظور، تُشبه لغة الشجرة هذه بالنسبة للعُقد ما تُشبهه مجموعة السلاسل النصية بالنسبة لتكرارات الرموز. تُفسَّر كل شجرة على أنها بنية تُبنى خطوة بخطوة من الأبجدية، والعُقد هي الأجزاء الفردية التي تُجسِّد رموزها ماديًا.

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

عدد العقد في شجرة بناء الجملة المجردة (AST) المحددة: حالة Egg

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

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

العقدة الرئيسية في Egg هي نوع APPLY ، الذي يمثل تطبيق دالة أو عامل. يحتوي هذا النوع من العقد على عنصرين فرعيين: عنصر OPERATOR الذي يشير إلى التعبير المراد تطبيقه؛ وعنصر ARGS ، وهو في الواقع عقدة ARRAY خاصة مسؤولة عن إنشاء مجموعة من الأشجار الفرعية، شجرة لكل وسيط.

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

تشريح مفصل لعقد AST في البيضة

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

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

تُخصَّص عُقد الكلمات للمُعرِّفات : أسماء المتغيرات، وأسماء الدوال، وأسماء المعاملات، وما شابه. وعادةً ما تحتوي على خاصية `name` تُخزِّن المُعرِّف كسلسلة نصية. ومثل عُقد القيمة، تعمل هذه العُقد كأوراق في الشجرة، إذ يقتصر دورها على توفير ذلك الاسم.

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

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

مثال على شجرة بناء الجملة المجردة: تطبيق بسيط بقيمة واحدة

لتصور كل ما سبق، دعونا نفكر في تمثيل تعليمة بسيطة، مثل تطبيق دالة X مع وسيط واحد 5. يتوافق AST الذي تم إنشاؤه بواسطة المحلل اللغوي مع مصطلح تم إنشاؤه باستخدام عقد VALUE و WORD و APPLY ، وفقًا لقواعد Egg.

على المستوى المفاهيمي، سيكون لدينا عقدة APPLY في الجذر. ستشير خاصية operator الخاصة بها إلى عقدة WORD باسم X، وستشير خاصية args الخاصة بها إلى عقدة ARRAY تحتوي على عنصر واحد: عقدة VALUE بقيمة عددية 5. وبهذه الطريقة، يعكس الهيكل بوضوح من يتم تطبيقه وما يتم تطبيقه عليه.

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

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

مثال على شجرة بناء الجملة المجردة: الجمع والضرب المتداخلان

ومن الأمثلة النموذجية الأخرى تعبير أكثر تعقيدًا بعض الشيء، مثل "+(a, *(4, 5))" . هنا لدينا عملية جمع وسيطها الأول هو المعرّف a ووسيطها الثاني هو ناتج ضرب 4 في 5. وتعكس شجرة بناء الجملة المجردة (AST) الناتجة عن هذا التعبير هذا التركيب المتداخل.

  كيفية أتمتة سير العمل باستخدام n8n و Docker

في جذر الشجرة، سنجد مرة أخرى عقدة APPLY تمثل عملية الجمع. سيكون عاملها عقدة WORD باسم "+"، بينما ستكون وسائطها في عقدة ARRAY تحتوي على عنصرين: الأول، WORD باسم "a"؛ والثاني، عقدة APPLY أخرى تمثل عملية الضرب.

ستحتوي عملية APPLY الثانية على عامل WORD باسم "*" ووسيطات ARRAY تحتوي على عقدتين VALUE: إحداهما بقيمة 4 والأخرى بقيمة 5. عند النظر إلى الهيكل ككل، فإنه يوضح بوضوح أن ترتيب التقييم يتكون من ضرب 4 في 5 ثم إضافة النتيجة إلى a.

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

قواعد النحو الشجري وقواعد النحو التحليلي

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

في كل قاعدة إنتاج، يُستبدل المتغير بشجرة جذرها رمز من رموز الأبجدية بعدد من المعاملات، وأبناؤها بدورهم متغيرات أو أشجار مُعرَّفة مسبقًا. يُشبه هذا الهيكل القواعد النحوية الكلاسيكية المنتظمة أو الخالية من السياق، ولكنه مُكيَّف مع التوليد المباشر للأشجار بدلًا من سلاسل الرموز.

يرتبط بهذا التعريف الأكثر رسمية القواعد النحوية المحددة التي يستخدمها محلل Egg لإنتاج أشجاره. هذه القواعد، التي تُعرض عادةً بشكل غير رسمي في الوثائق، تصف بدقة تركيبات الكلمات المفتاحية، والمعاملات، والأقواس، وما إلى ذلك، المقبولة في اللغة، وكيفية ترجمتها إلى عُقد من النوع VALUE وWORD وAPPLY وARRAY.

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

ترميز ديوي: الإحداثيات داخل الشجرة

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

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

إن التعريف الاستقرائي لهذه الصيغة بسيط: تشير السلسلة الفارغة إلى الشجرة بأكملها؛ إذا كانت السلسلة تتكون من رقم متبوع بأرقام أخرى مفصولة بنقاط، فسيتم تفسيرها عن طريق أخذ الشجرة الفرعية الفرعية المقابلة للفهرس المشار إليه أولاً، ثم تطبيق نفس المنطق بشكل متكرر على بقية السلسلة.

على سبيل المثال، إذا كان لدينا شجرة t تمثل تعبيرًا مثل "+(a, *(4,5))"، مع عقدة جذرية APPLY للجمع، وعقدة فرعية WORD باسم "+"، وعقدة فرعية أخرى APPLY للضرب، فيمكننا تحديد مواقع محددة. بالتالي، يمكن أن تكون t/1 هي عقدة WORD التي تحمل عامل الجمع "+"، وt/2.1 هي العقدة التي تحمل المعرّف "a"، وt/2.2.2.1 هي عقدة VALUE التي تحمل القيمة 4، إذا قمنا بترقيم العقد الفرعية بشكل مناسب.

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

الرموز المكافئة في البرمجة والأدوات

إن الفكرة الكامنة وراء تدوين ديوي ليست حصرية لنظرية الشجرة؛ في الواقع، تظهر بشكل متكرر في العديد من التدوينات العملية التي نستخدمها يوميًا في البرمجة ومعالجة البيانات المهيكلة، حتى لو لم نكن دائمًا على دراية بذلك.

عند كتابة تعابير باستخدام عامل النقطة في لغة برمجة ، مثل object.property.subproperty، فإننا نقوم بشيء مشابه جدًا: اجتياز شجرة من الكائنات المتداخلة، واختيار عنصر فرعي في كل خطوة بالاسم بدلًا من رقم الموقع. بدءًا من العقدة الجذرية، ننزل إلى العقد الداخلية.

يظهر النمط نفسه في أنظمة الملفات الشبيهة بنظام Unix، حيث يتم استخدام عامل الشرطة المائلة (/) لفصل الدلائل: يصف /src/js/tutu.js مسارًا من جذر نظام الملفات إلى مورد معين، ويجتاز مستويات متتالية من بنية شجرية.

في عالم المستندات المهيكلة، تستخدم لغات مثل XPath رموزًا متشابهة جدًا لاختيار العقد داخل شجرة XML. يستعلم استعلام مثل "A//B/*" عن أول عنصر فرعي (مهما كان اسمه) لكل عنصر B تابع لعنصر A في الموضع المناسب بالنسبة للسياق الحالي، باستخدام شرطتين مائلتين أو ثلاث للإشارة إلى مستويات العمق.

تستخدم لغة jq ، وهي أداة أخرى معروفة، نظامًا متوازيًا للتنقل بين هياكل JSON، مما يسمح باختيار العناصر الفرعية من خلال مسارات مركبة وفلاتر وتعبيرات. جميع هذه الرموز ما هي إلا طرق مختلفة للتعبير عن المسارات في شجرة ، وهي متوافقة إلى حد كبير مع ترميز ديوي العشري ولكنها مُكيَّفة مع مجالاتها الخاصة.

تحليل الأشجار في اللغويات والبرمجة

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

  تعلم البرمجة: 7 أسباب تجعلك تبدأ اليوم

في هذه الأشجار، كما هو الحال في البرمجة، نجد ثلاثة أنواع أساسية من العقد: عقدة الجذر ، التي تمثل الجملة الكاملة أو البنية العامة؛ والعقد الداخلية أو المتفرعة، التي تعمل كعقد أصلية وتجمع مجموعات فرعية من الجملة؛ وعقد الأوراق، التي عادة ما تتوافق مع الكلمات المحددة التي تظهر في سلسلة الإدخال.

العقدة الجذرية فريدة من نوعها، إذ يرتكز عليها هيكل الشجرة بأكمله. تقع العقد المتفرعة أسفل العقدة الجذرية أو العقد الأبوية الأخرى مباشرةً، وتُستخدم لتنظيم أجزاء الجملة أو البرنامج بشكل هرمي . أما العقد الورقية، فتوجد في أدنى مستوى من الشجرة، ولا يوجد لها أبناء، مما يُغلق هيكل التفرع.

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

بحسب هدف التحليل، يمكننا إيجاد أنواع مختلفة من أشجار التحليل . يركز بعضها على العلاقات بين الكلمات أو المكونات (على سبيل المثال، من يعتمد على من في الجملة)، بينما يركز البعض الآخر على التجميع في عبارات أو مكونات، مما ينتج عنه فئتان رئيسيتان.

أشجار بناء الجملة حسب التبعية وحسب المكونات

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

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

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

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

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

التطبيقات العملية والأدوات المتعلقة بـ AST

لا تُعدّ أشجار بناء الجملة المجردة (ASTs) مجرد مفهوم نظري، بل تُستخدم بشكل فعلي في العديد من الأدوات اليومية من قِبل كل من يعمل مع البرمجيات. فالمترجمات والمفسرات ومُصغّرات الشفرات ومنسقات الشفرات ومحللات الشفرة الثابتة تعتمد بشكل شبه دائم على شجرة بناء الجملة المجردة لأداء وظائفها.

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

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

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

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

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

هياكل البيانات والخوارزميات
مقالة ذات صلة:
هياكل البيانات والخوارزميات: دليل شامل للمبرمجين