جاممة النبلين كلبة العلوم/ مدرسة الحلوم الرباضبة- إعداد / عمر إبراهيم عبدالله 1020560 000016
5. جدول الثوابت 18016 اوع1نا
إن هذا الجدول يقوم بتخزين الثوابت الحرفية والرقمية المستخدمة داخل البرنامج ولا يحتاج هذا
البرنامج ككل وليست مرتبطة بجزء محدد من أجزاء البرنامج كما أن كل منها يظهر لمرة واحدة فقط
داخل الجدول وعموماً فإن جدول الثوابت له دور مهم في تخفيض الحجم الذي يشغله البرنامج داخل
الذاكرة كما أنه يستخدم أثناء مرحلة توليد شفرة الهدف.
5. الشفرة الوسيطة 6606 1016001601216
الوسيطة قد يتم الاحتفاظ بها داخل مصفوفة من سلاسل الحروف أو في ملف نصي (ع1 18«4) مؤقت
وعموماً فإن المترجمات التي تقوم بعمليات تحسين معقدة لشفرة البرنامج تعطي أهمية كبيرة لاا
التمثيل الأفضل للشفرة الوسيطة الذي يسهل من عملية التحسين.
5. الملفات المؤقتة وعاز] /1 01م 1800
إن الحواسيب في السابق لم يكن لديها حجم الذاكرة الكافي للاحتفاظ بالبرنامج كاملا في الذاكرة أثناء
الترجمة ولحل هذه المشكلة فإنه غالباً ما كان يتم اللجوء لاستخدام مجموعة من الملفات المؤقتة للاحتفاظ
بالمخرجات الوسيطة لكل مرحلة من مراحل الترجمة وعموماً فإن يد الخاص بحجم الذاكرة المحدود
أصبح غير موجود في هذه الأيام أو على الأقل يمثل مشكلة بسيطة لهذا أصبح من الممكن القيام
بالترجمة بالكامل داخل الذاكرة دون الاحتياج إلى أي ملفات مؤقتة وخاصة في حالة إمكاه
برنامج المصدر و القيام بترجمة كل جزء على حده .
لغة البرمجة الافتراضية
ععدنايدما عمته سوه عام 520
إن إعداد مادة علمية خاصة بالمترجمات لا تصبح كاملة بدون إعطاء أمثلة لكل خطوة من خطوات
عملية الترجمة وفي حالات كثيرة سوف نوضح الأساليب التي نتعرض لها في هذه المادة العلمية
باستخدام أمثلة من لغات البرمجة القائمة والمعروفة مثل لغة ال ع وال ++ع وال 03561 وال د80
ولكن هذه الأمثلة تكون غير كافية لعرض كيفية تجميع أجزاء المترجم الخاص بأحد لغات البرمجة
واستيعابها. وبما أن القيام بذلك الأمر يكون من الصعوبة بالنسبة للغات البرمجة الكاملة لهذا فإن :ا
البديل هو استخدام لغة برمجة افتراضية لتوضيح ذلك وعموماً فإن اللغة الافتراضية المستخدمة في هذا هذ
لتطبيق المفاهيم التي سيتم عرضها.
وهيكل البرنامج المكتوب بهذه اللغة الافتراضية يكون بسيطاً لكونه يتكون فقط من مجموعة من الأوامر
يفصل بينهم الفاصلة المنقوطة باستخدام صيغ نحوية مشابهة للصيغ النحوا ال اوع25م
وفي تلك اللغة الافتراضية لا توجد إجراءات (020600785) أو حتى تعريفات ( 005لا (06012)
وجميع المتغيرات متغيرات صحيحة (1/3080185 +10168) ولا يتم تعريفها مقدماً بل تأخذ القيم
الخاصة بها مباشرة كما يحدث في لغة ال ©8051 ويوجد بهذه اللغة أمران مركبان فقط هما أمر 12
جامعة النبلين كلية العلوم/ مدرسة العلوم الرباسية- إعداد / عمر إبراهيم عبداه ىن 1020560 000016
الشرطي و أمر 831مع/ التكراري وكلا الأمرين يمكن أن يتضمنا عدة أوامر وينتهي أمر 2؛ بكلمة
00 ولدى اللغة الافتراضية أيضا الأمران 0 ن عاسم للقي | باستقبل خوط وإعطاء
ب ن باستخدام
والعمليات الحسابية الأربعة الأساسية 'ج' و" و'“" و وأخيراً فإن تلك اللغة تسمح بإضافة التعليقات
(200100©015) إلى البرنامج على أن تكون محصورة بين الأقواس [) .
والبرنامج_التالي هو برنامج بسيط مكتوب بلغة البرمجة الافتراضية _للقيام بحساب المضروب
(602]) وهذا البرنامج سوف يستخدم كمال عبر تلك المادة العلمية:
[اقضماءة) عتسامصف م1 0108207 عا0 5300
الطرق المعتادة لوصف النحو (الصيغ النحوية)
في هذا الجزء سيتم استعراض أهم الطرق التي تستخدم لوصف الصبغ النحوية (*5/013) الخاصة
بلغات برمجة الحاسوب والتي يعتمد عليها في عملية الترجمة من لغة المصدر إلى لغة الهدف وذلك لأن
ترجمة أي برنامج مكتوب بإحدى لغات البرمجة تشمل التأكد من أن هذا البرنامج متوافق مع الصيغ
النحوية الخاصة بلغة البرمجة المكتوب بها
.. القواعد خالية السياق 62310007315 0016:61-066
(010005/0) الذي قام باستخدامها في وصف قواعد اللغات الطبيعية (180803865 ا11210133) ولكن
سرعان ما بداً إستخدام تلك القواعد في وصف الصيغ النحوية للغات البرمجة حيث ظهر نجاحها بعد
جامعة النبلين كلبة العلوم/ مدرسة العلوم الرباسبة- إعداد / عمر إبراهيم عبدالله ىن 1020560 6000116
ذلك إلى حد بعيد وبصفة عامه تعتبر هذه القواعد هي الأساس الذي قامت عليه جميع الأشكل التي
بعد كومسكاي قام جون باكوس (83205 1010) في أواخر الخمسينات من القرن الماضي
باستخدام شكل جديد لوضع الصيغ النحوية للغة الألجول 58 (8153158) التي تعتبر من أوائل لغات
برمجة الحاسوب. هذا الشكل تم إدخال بعض التعديلات عليه على يد بيتر نور (802! 08188) ؛ وتم
استخدام الشكل المعدل في وصف لغة الألجول 60 (60 81881) حيث أصبح هذا الشكل بعد التعديل
معروف باسم شكل باكوس نور 20200 007ا2ل! 88©)605) ؛ أو كما يطلق عليه اختصاراً (8112) ١ وتم
استخدامه في وصف الصيغ النحوية لأغلب لغات برمجة الحاسوب التي ظهرت بعد ذلك.
شكل باكوس نور يعطي أسماء مجردة (205086000) للتراكيب النحوية التي تتكون منها لغة البرمجة
فعلى سبيل المثال لوصف أمر التخصيص في لغة الجافا (273[) يتم ذلك كما يلي:
< مأ كعمات > ويه جحصوفكة >
والرمل الموجود عطئ الجاتب الأيسر. من السهم [ ) عو الأسع المجرد للتركيب الشجوي التراد تعزيقه
وهو أمر التخصيص في هذه الحالة والمشار له بالإسم المجرد < 55680ج> أما باقي التعريف والذي
يظهر على الجائب الأيمن للسهم ( ) فإنه يتكون في هذا المثال من مجموعة من الرموز (متل إشارة
التخصص (<)) والأسماء المجردة الأخرى (<013655600»©> 8 <21/>) والتي يجب أن يتم توصيف
كلا منها على حده في تعريف منفصل. وخلاصة التعريف السابق هو أن أمر التخصيص في لغة الجافا
يتكون من متغير (< +:>) وتعبير رياضي أو انصي (< 0+855600<>)_وبينهما إشارة
التخصيص (-) وكما هو واضح من التعريف فإن المتغير لابد أن يكون على يسار رمز التخصيص
بينما التعبير النصي أو الرياضي فإنه يكون على يمين رمز التخصيص ولكي يا أمر
التخصيص لابد أن يتم توصيف كل من المتغيرات (<:200) وكذلك التعبيرات ال في
تعريف منفصل لكلا منهم.
والأمر التالي يوضح مثال لأمر التخصيص في لغة الجافا وفقا للتوصيف الموضح بالتعريف السابق
باستخدام شكل ال شكل باكوس نور
وعموما فإن الأسماء المجردة (05086000م) يطلق عليها رموزاً غير نهائية ( اقصتط00ع1 -0100
5ا9/00) أي رموز نهائية لأن تعريفها منتهٍ ولا تحتاج إلى توصيف إضافي كما في حالة رمز
التحضيمن في التعريتب السابق لأمر التخصيص في لغة الجافا. وللتفرقة بين الرموز النهائية والرموز
فإن الاسم المجرد للرمز غير النهائي يتم وضعه بين الأقواس (< >) في شكل باكوس نور.
جامعة النبلين كلية العلوم/ مدرسة العلوم الرباسية- إعداد / عمر إبراهيم عبداه ىن 1020560 000016
وبصفة عامة فإن التو يف النحوي باستخدام شك باكوس نور يتكون من مج حة من القواخة
(85ا80) وكل قاعدة تقوم بوصف أو تعريف صيغة نحوية أو أمر محدد في لغة البرمجة ويمكن أن
يكون هناك عدة تعريفات مختلفة لرمز غير نهائي واحد وذلك للتعبير عن صيغ نحوية مختلفة للرمز في
لغة البرمجة والتعريف التالي يوضح ذلك عند توصيف أمر ع1 في إحدى لغات البرمجة:
ححساء > معطا جعمعهعتهما > ]1 ختصافاز >
ويمكن دمج أكثر من قاعدة نحوية في قاعدة نحوية واحده باستخدام رمز الاختيار (| ) والتعريف التالي
وبالرغم من بساطة شكل باكوس نور إلا أنه فعال وكافٍ لوصف جميع الصيغ النحوية الخاصة
بلغت البرمجة الملافة بناءفيها الصنيخ النحوية التي تحتوي على سلسلة أو قائمة 150ا) من التراكيب
ولأي مستوى أو عمق مع إمكانية توضيح أولوية تنفيذ العمليات (ع0266©0802 00831035) وكيا
إتحاد العمليات (بالرتا 3ن 550 008131015) .
وصف القوائم (فانا)
إن القوائم مختلفة الطول (515نا 180810 2018018/) تعتبر من النماذج التي يصعب وصفها ولكن
شكل باكوس نور يستخدم كوسيلة مبتكرة لوصف القوائم التي تحتوي على عدد من العناصر النحوية في
لغات البرمجة مثل الأمر الخاص بتعريف المتغيرات الذي يحتوي على عدة متغيرات غير محددة العدد
ويتم تعريفها في أمر واحد داخل البرنامج كالمثل التالي:
قصنا رتسلا متسملا تمر
فالأمر السابق يقوم بتعريف ثلاث متغيرات (0002,00003ل100171,1) على أنها متغيرات صحيحة
ولكن يمكن في نفس الأمر تعريف عدد من المتغيرات أكثر أو أقل من ثلاثة متغيرات و يستخدم شكل
باكوس نور التكرار (88603500) لوصف القوائم المتغيرة الطول كما في المثال التالي الذي يقوم
بوصف قائمة من المتغيرات:
عون > < اكاعولا >
جامعة النبلين كلية العلوم/ مدرسة العلوم الرباضبة- إعداد / عمر إبراهيم عبدالله 1020560 0م00
حيث أن الوصف السابق لقائمة المتغيرات (52/ا 7/3880165) يشمل على تكرار للرمز اللانهائي
) وهو ما يعني أن هذه القاعدة الوصفية هي قاعدة تستخدم التكرار فأي قاعدة يظهر فيها نفس الرمز
اللانهائي على يسار و يمين السهم ( ) هي قاعدة تكرارية (©801 ©/8600355) كما في القاعدة السابقة
والتي توضح أن قائمة المتغيرات إما أن ي على متغير واحد فقط أو متغير يليه الرمز النهائي
الفاصلة ( ,) ثم قائمة المتغيرات الِي يمكن بدورها أن تتكون من متغير واحد أو من يليه قائمة
عدد من المتغيرات بدءٌ من متغير واحد أو أثنين أو ثلاثة أو أكثر.
إن القواعد النحوية (2000088م6) تعتبر وسيلة مولدة لتعريف اللغات فأي جملة تحتوي عليها اللغة
يتم توليدها من خلال تطبيق القواعد النحوية الخاصة باللغة بشكل متتابع بدء من رمز خاص يطلق عليه
رمز البدء (5/01001 ها ث يطلق على هذه العملية عملية الاشتقاق (08060/8100) وبصفة
للغة معينة فإنه لابد أن يتم اشتقاق هذه الجملة من القواعد
النحوية الخاصة باللغة كما يمكن أيضا العكس عن طريق توليد أو اشتقاق جميع الجمل التي يمكن أن
زيادة عدد القواعد النحوية للغة كما في حالة اللغات الطبيعية فمن الصعب حصر جميع الجمل التي
من هاتين ١
ولتوضيح عملية الاشتقاق نقدم المثل التالي الذي يتكون من مجموعة القواعد النحوية الخاصة بلغة
برمجة بسيطة جدا تم وصفها باستخدام شكل باكوس نور
جامعة النبلين كلية العلوم/ مدرسة الحلوم الرباسبة- إعداد / عمر إبراهيم عبداه 1020560 000016
ومثل جميع لغات برمجة الحاسوب فإن رمز البداية (5/00001 5881) الخاص بلغة البرمجة
الموضحة في المثال السابق هو الرمز اللانهائي (<308801م>) حيث يستخدم هذا الرمز كرمز بداية
لجميع لغات البرمجة وتبداً عملية الاشتقاق من هذا الرمز.
ولغة المثثل السابق تتكون من نوع واحد من الأوامر هو أمر التخصيص حيث أن أي برنامج مكتوب
بهذه اللغة يبدا بكلمة (068:0) متبوعة بقائمة من الأوامر يفصل بينها رمز الفاصلة المنقوطة ()
وينتهي البرنامج بكلمة (800) . والتعبير الرياضي (2003655700) في هذه اللغة إما أن يتكون من
متغير واحد فقط أو من متغيرين يفصل بينهما رمز (+) أو رمز () واللذان يستخدمان في عمليتي
الجمع والطرح على التوالي والاسم الخاص بمتغيرات هذه اللغة هي إما (م) أو (8) أو (©) ونوضح
الآن كيفية اشتقاق برنامج من هذه اللغة البسيطة:
< امو < اكاناسا؟ > ماعط << < موتهوم
جامعة النبلين كلبة العلوم/ مدرسة الحلوم الرباسبة- إعداد / عمر إبراهيم عبداه 1020560 6000016
ويلاحظ أن الاشتقاق يبدا من رمز البداية الخاص باللغة (<0088801م>) ورمز الاشتقاق ( << )
يستخدم للانتقال من تركيبة إلى التر يبة التي تليها في عملية الاشتقاق وفي كل خطوة يتم استبدال أحد
الرموز اللانهائية التي تحتوي عليها التركيبة بأحد التعريفات الخاصة به كما توضحه القواعد النحو؛
للغة وفي جميع الأحوال يتم في كل خطوة استبدال الرمز اللانهائي الذي يقع في أقصى يسار التر
للانتقال إلى الخطوة التالية وهو ما يسمى ١١ من أقصى اليسار (081173100 181-1/058) حيث
يستمر الاشتقاق وحتى الوصول إلى تركيبة لا تحتوي على أي رموز غير نهائية وتحتوي بالكامل على
مجموعة من الرموز النهائية فقط فعندها ينتهي الا وتظهر الجملة أو البرنامج في حالة لغات
ويمكن أن يتم الاشتقاق من أقصى اليمين 0/00 11-0/06ع8) أي باستبدال الرموز
يد من اليمين إلى اليسار أو بأي أخر دون أن يؤثر الاشتقاق على اللغة التي يتم
اشتقاقها من القواعد النحوية الخاصة بهذه اللغة ولكن الاشتقاق من أقصى اليسار هو أكثر اواج
الاشتقاق استخداما.
وفيما يلي مثال آخر يوضح القواعد النحوية الخاصة بجزء بسيط من إحدى لغات البر
< ولام > - < ول > < صوائكة >
< صن > حول > <طن >
| < مات > * دعو >
وهذه القواعد تقوم بوصف أمر التخصيص الذي يحتوي الجانب الأيمن منه على تعبير رياضي يستخدم
عملية الجمع والضرب وكذلك الأقواس وعلى سبيل المثل أمر التخصيص التالي:
يمكن توليده من القواعد السابقة عن طريق الاشتقاق من أقصى اليسار.
جامعة النبلين كلبة العلوم/ مدرسة العلوم الرباسية- إعداد / عمر إبراهيم عبداله ىن 1020560 0م00
<> مون > *جعولا > حم >
<> ويرك جم ) * وحم >)
استخدام شجرة الإعراب (ع1:66 038:58 1116 08 ولا)
من خصائص القواعد النحوية إمكانئية وصف الهيكل النحوي لجمل أي لغة من اللغات في شكل
هرمي وذلك باستخدام ما يسمى بشجرة الإعراب (7786 08258) فعلى سبيل المثل فإن الشكل التالي
يوضح الهيكل النحوي لأمر التخصيص الذي تم اشتقاقه في المثال السابق وذلك باستخدام شجرة
الإعراب ل
ظ أن كل عقدة من العقد الداخلية (110085 1018021) لشجرة الإعراب يتم عنونته بأحد الرموز
فإنها تعنون بأحد الرموز النهائية.
غموض القواعد النحوية (إراتناع011م) :
اذا كانت القواعد النحوية لأي لغة من اللغات تمكن من إنشاء أكثر من شجرة إعراب واحدة لأي من
فالمثال التالي يقوم بعرض نفس القواعد النحوية الخاصة بأمر التخصيص الموضح في المثل السابق
ولكن بعد إجراء بعض التعديلات البسيطة عليه:
< مات > - ول > < صواوكة >
< دان > جما > حمر >
جامعة النبلين كلبة العلوم/ مدرسة العلوم الرباسبة- إعداد / عمر إبراهيم عبداله 10200560 000016
فهذه القواعد النحوية الخاصة بأمر التخصيص في شكلها الأخير تعتبر قواعد غامضة وذلك لأن الجملة
م*) + وحم
الجملة التى يمكن اشتقاقها من القواعد النحوية السابقة يمكن أن إنشاء شجرتي إعراب لها
وهي يتم ! تي !
كالموضحين في الشكل التالي مما يعني أن القواعد النحوية التي تم اشتقاق أو توليد هذه الجملة منها هي
وغموض القواعد النحوية لأي لغة من اللغات ٍ مشكلة بالنسبة للمترجم الذي يعتمد بشكل كبير
على بعض دلالات القواعد النحوية الخاصة باللغة في الترجمة من هذه اللغة إلى اللغات الأخرى
وخاصة إذا ما عرفنا أن المترجم الخاص بأي لغة يستخدم شجرة الإعراب الخاصة بكل تر
ابلة أو الجملة في اللغة الأخرى
أكثر من شجرة إعراب واحدة لأي جملة أو تركيبة في اللغة فإن المترجم الخاص بهذه اللغة لا يستطيع
القيام بالترجمة لعدم إمكائية تحديد ترجمة مقابلة وحيدة لهذه الجملة أو التركيبة وهي المشكلة التي سيتم
مناقشتها بالتفصيل في الأجزاء التالية.
كما ذكرنا سابقًا فإن القواعد النحوية تستطيع عند وصف التراكيب المختلفة لأي لغة من اللغات تقديم
بعض الإيضاحات أوالدلالات لشجرة الإعراب المقابلة لكل تركيبة وهو ما يظهر بوضوح عند تحديد
أولويات تنفيذ العمليات الحسابية المختلفة من جمع وطرح وضرب وقسمة داخل أي تعبير رياضي لأن
العملية الحسابية التي تظهر في شجرة الإعراب في مستوى أدنى تكون لها الأولوية في التتفيذ عن
العمليات الحسابية التي تظهر في مستوى أعلى ففي شجرتي الإعراب السابقتين نجد أن عملية الجمع لها
أولوية في التنفيذ بحيث تسبق بق عملية الضرب في شجرة الإعراب التي تظهر في الجائب الأيمن بينما في
شجرة الإعراب التي تظهر في الجانب الأيسر تكون عملية الضرب لها أوا
الجمع وذلك لأن عملية الجمع تظهر في شجرة الإعراب اليمنى في مستوى أدنى من مستوى عملية
الضرب بينما في شجرة الإعراب اليسرى تظهر عملية الضرب في مستوى أدنى من مستوى عملية
الجمع ومن هذا نستطيع فهم مدى الغموض والتعارض في المعلومات المستنتجة من كلا الشجرتين على
الرغم من أنهما يعكسان الهيكل النحوي لأمر تخصيص واحد ولكنه مشتق من قواعد نحوية غامضة.
الأولوية فقط ورود العملية الحسابية داخل التعبير الرياخ يد العسلنا
بالترتيب من اليمين إلى اليسار أو من اليسار إلى اليمين وذلك حسب طريقة تعريف التعبير الرياذ
ولكن يمكن أيضا للقواعد النحوية عند تعريف الهيكل الخاص بالتعبير الرياضي أن نقوم بتحديد الأولوية
الخاصة بكل عملية حسابية بغض النظر عن ترتيب ورودها داخل التعبير الرياضي وذلك عن طريق