الشرح :
في أول سطر عرفنا المتغير النصي 8 وأعطيناه القيمة المبينة
في السطر الثاني قمنا بطباعة قيمة المتغير 5
السطر الثالث فيه نبداً في تحويل الجملة ؛ إذ أن الجملة الخبرية تنتهي بالنقطة فإننا نقوم بالبحث عنها وحذفها
من النص ؛ وهذا ما يفعله السطر الثالث ؛ وكان بالإمكان إزالتها بالجملة التالية لو كانت هي آخر حرف في
الجملة - لاحظ أني تعمدت وضع فراغ في نهاية الجملة -
في السطر الرابع عرفنا متغيراً نصياً جديداً 80 وأعطيناه قيمة ؛ والتي هي نص جزئي من المتغير ؟ ؛ هذا
ستبداً من 16 التي تنتهي بها الكلمة 1115 وليس هذا هو المطلوب ؛ وهذا سبب وجود الفراغ الأمامي ؛ أما
الفراغ الاخير فلو أنه كانت ثمة كلمة تبداً ب وز فإنها لن تؤخذ في الاعتبار ؛ ولأن الجملة التي لدينا لا تحتوي
على كلمة مثل هذه فإنه غير ضروري
في السطر الخامس قمنا بإزالة النص "18 " من المتغير 8 ولم نزل النص ” 18 ” لأننا لو فطنا فإن كلمة 0016
في السطر السادس أعطينا للمتغير 6 قيمة المتغير 83 - مزالة منه الفراغات في البداية والنهاية - مع فراغ مع
قيمة و الحلية
في السطر السابع قمنا بإزالة الفراغات من بداية ونهاية السلسلة و هذه الفراغات تكون قد نتجت من عملية
الاقتطاع والتبديل
في السطر الثامن حولنا كل حرف كبير في السلسلة الجديدة الناتجة إلى حرف صغير
العاشر
في السطر الحادي عشر أضفنا الحرف "7" إلى نهاية السلسة كي تدل على الاستفهام
وفي السطر الثاني عشر نقوم بطباعة السلسلة الناتجة
تمرين 2 :
في هذا التمرين ستكون لدينا السلسلة التالية :10+9+8+7+6+5+4+3+12+1" وسنقوم بمعالجتها لنحصل
الشرح :
تتكرر الحلقة ما دام المتغير 8 يحتوي على إشارة الجمع
أول سطر في الحلقة يستخلص نص جزئياً من المتغير 5 ؛ هذا النص يبدا من أول حرف في المتغير إلى
أول ظهور لعلامة الجمع + مع عدم دخولها في النص الجزئي ثم يقوم بتحويله إلى عدد صحيح ثم يضيفه
إلى المتغير الصحيح 51017
في السطر الثاني يقوم بإزالة النص الجزئي السابق من المتغير 6 مع علامة الجمع الأولى
ثم تتكرر الحلقة إلى أن يصبح المتغير غير محتو على علامة الجمع وحينها تصبح قيمته "10"؛ وبالطبع
هذه القيمة لم تضف إلى المتغير 9 في الحلقة ؛ ولذا فإن أول سطر بعد نهاية الحلقة يقوم بإضافتها
في التمرين السابق قمنا بالمطلوب ولكن الحل كان معقدآ ؛ أو يمكن القول أنه لم يكن معقداً ولكن ثمة حل أبسط
وأسهل منه
وهنا أشير إلى أن معالجة النصوص ليست استخداماً للدوال فقط بل إنها أفكار أولا ؛ مع معرفة أي دالة هي
الأفضل في أداء المراد ومن ثم استخدامها هي هو الأولى
فمثلآ في المثال السابق لو أننا قمنا بتقسيم السلسلة باستخدام الدالة 501:00 عند كل إشارة + لكان أبسط
ولاستغنينا عن الدالتين 1800780 و ()01*ع110 والكود التالي بوضح ذلك :
تبسيط كان قبل الوصول إليه أقرب إلى المستحيل ؛
تمرين 3:
في هذا التمرين سنحسب ناتج العبارة "1+23*4*5*6+7+8*9+10" بطريقتين :
الكود السابق يقوم بالمطلوب ؛ ولكن انظر إلى بساطة الكود التالي :
(+ + زجطاع دع 1 )لس > ز:0حز أصناده؟1
واضح أن الكود الثاني عدد سطوره أقل بعشرة أسطر على الأقل من الكود الأول ؛ والأهم من ذلك أن كتابة
فكرة الكود الثاني وبرمجتها أسرع بكثير من الكود الأول
وأترك للقارئ فهم كيفية عمل الكودين
بناء المفسر :
الآن نأتي للموضوع الأساسي وهو شرح كيفية بناء المفسرات وذلك بفهم الكيفية التي تمت بها كتابة لغة
1207 وذلك بتشريح وشرح كل سطر كتبته بالتفصيل
نظرة عامة عن كيفية عمل مفسر 16811 :
يعمل المفسر باستقبال الكود سطراً سطراً من الملف المصدري ثم تتم معالجته ؛ والسطر يُقصد به الجملة أو
عند كتابته أفضل تنسيقاً ؛ و إلا فإنه بالإمكان اعتبار السطر على أنه السطر الذي يتم كتابته في محرر
النصوص ولا استغنينا عن الفاصلة المنقوطة ؛ ولكن بالفاصلة المنقوطة فإن الجملة :
((ه<ط) سمط (ح<ط) )1 عواء
وهذا بالطبع أفضل شكلا
والإخراج يتم باستخدام الكلمة 0101 ثم القيم المراد إخراجها على الشاشة ؛ أما تعريف المتغيرات الصحيحة
فإنه يتم بتعريف مصفوفة نصية ؛ ثم بعد التعرف على جملة تعريف المتغيرات يتم إسناد عدد المتغيرات
المعلن عنهم كطول للمصفوفة ؛ هذه المصفوفة يتم فيها تخزين أسماء المتغيرات ؛ ويتم تعريف مصفوفة
أخرى بنفس الطول يتم فيها تخزين القيم التي ستعطى وتسند للمتغيرات ؛ وتسند لعناصرها القيمة 0 كقيمة
ابتدائية؛ وهاتين المصفوفتين تعملان جنب إلى جنب ؛ وفي جملة الإسناد للمتغيرات فإن القيمة المراد إسنادها
سيتم وضعها في العنصر الموجود في مصفوفة القيم ؛ وهذا العنصر مناظر للعنصر الذي يحتوي على اسم
المتغير في مصفوفة الأسماء ؛ أما في العمليات التي تقوم بمعالجة للمتغيرات مثل العمليات الحسابية والمنطقية
وعملية الإخراج فإنه يتم استبدال أسماء المتغيرات بقيمها من المصفوفة الثانية ثم تتم عليها العملية المرادة
وفي جملة الإدخال فإنه بعد معرفة المتغير المراد إدخال القيمة إليه ؛ يتم إدخال القيمة في العنصر المناظر له
في مصفوفة القيم
في جملة الشرط يتم التحقق من صحة الشرط من عدمها باستخدام الدالة 2010 المذكورة لاحقاً ولأن المفسر
يقوم بقراءة الكود سطرا سطراً فإنه لا يمكن تنفيذ أكثر من جملة بعد جملة الشرط ؛ وكذلك الحال مع جملة
التكرار
وأنصح بشدة بقراءة الشرح التابع للغة «:وع1 ومعرفة تركيبها قبل المضي في قراءة باقي الكتاب
والأن نبداً شرح سطور المفسر
السطر :
يقوم باستدعاء مكتبات الفئات المختصة بالتعامل مع الملفات من إنشاء وإدخال وإخراج وغيرها؛ وسبب
استخدامنا للملفات أن المفسر يقوم باستقبال شفرة المصدر على هيئة ملف وهو الملف المصدري طبعاً
السطر :
يقوم بتعريف كائن من الفئفة 5011010001 التابعة لمكتبة الربط الديناميكي ![[ل المسماة
11550101000001 وهي مكتبة عبارة عن مفسر للغة النصوص ك- 7135204 وفيها الدالة [و»ت1 والتي
تستقبل سلسلة نصية عبارة عن عملية رياضية وتقوم بإرجاع ناتج العملية كما تتعرف على عمليات المقارنة ؛
وقبل تعريف الكائن يجب إضافة المكتبة إلى مراجع المشروع والصور توضح كيفية القيام بذلك :
326501 م وبري 5/ان 0 اما
11 0011101 عار صقنوه قاع
16 12320001090" صةنوورطاح
| م | لسع رمسو
| مادعاه اس لحن
1 عراس وصطام5010 المواوزان
هه ه©- ه ه ه وه وده هد
في هذا السطر يتم تعريف ثلاث مصفوفات نصية كمتغيرات عامة 610121 ؛ المصفوفة 016 سنخزن فيها
أسماء المتغيرات الصحيحة التي سيتم تعريفها ؛ والمصفوفة ع1”81[0 سنخزن فيها القيم التي ستعطى
للمتغيرات الصحيحة ؛ والمصفوفة عل00 سيتم فيها تخزين الكود المصدري المستقبل من الملف المصدري
يعرف متغيرا منطقيا هذا المتغير سنعرف به إن تم الإعلان عن متغيرات صحيحة أم لا
السطر :
يعرف المتغير العام الصحيح ل« وإعطائه القيمة 0 ؛ سيتم ذكر وظيفته فما بعد
هو بداية الدالة 26007116 وهي التي تقوم باستقبال الكود من الملف المصدري وهي لا تقوم بإرجاع قيمة
وتستقبل متغيرا نصياً هو اسم ملف المصدر
يعرف متغيرآً صحيحا ؛ هذا المتغير سنضع فيه كل الكود المستخرج من الملف المصدري
في هذا السطر تم تعريف الكائن لمع من الفئة :ع80ع506811118 ؛ هذا الكائن هو الذي سيقوم بالقراءة من
الملف المصدر يا
الحلقة :
تقوم بقراءة الملف المصدري سطراً سطراً وإضافته مع فراغ إلى المتغير 211006 مادامت القراءة لم تصل
إلى نهاية الملف