ماشى بسم الله الرحمن الرحيم الصلاة والسلام علي
أشرف المصريين اليوم ان شاء الله احنا بدنا نكمل
اللي بدنا في chapter 6 اللي هو ال intermediate
code generation كنا المواضيع اللي بدنا فيها اللي
هو 6 1 و 6 2 و لسه ماوصلناش ل 6 3 اللي هو ال types
and declarationتعرفنا على الـ three address code و
التفاصيل المتعلقة به خلّينا نطلع على أخر أشياء
رأيناها في الـ three address code كنا حكينا عن ال
names و ال instruction types دروح على ال slide تبع
ال instruction types تذكروا هذه الأنواع
instruction forms الان
اعتقد ان هذه اخر اشياء حكينا فيهااليوم نكمل الحديث
عن ال three address code منين هي section 6.2 ونبدأ
في 6.3 ان هنا احنا الملاحظة اللى فى ال slide ها دى
انه احنا ال labels او ال labeling لما بيكون فيه
ادت و سكشن و بعديك بيجي فى got و ال got ها دى بدها
ترسلني او ترسل ال flow of control الى نقطة معينة
فى ال code فأمام واحد من اتنين ال label بتفتح
باسلوب من اتنين اما ان احنا بنستند إلى ان كل
instruction اصلا لها number فبالتالي ال number هذا
هو ال label فلما بقول go to بقول go to الرقم الرقم
هو رقم الصفر
بنقمش كل ال instruction برقم بنحط labels بس عند
اللزوم بمعنى انه انا عارف ان ال instruction هذه
هيجي لها قفص من مكان اه من مكان ما فهو اللي بحط
لها ال label و ال label هذا هو اللي بستخدمه مع ال
go to يعني نفس ال symbol هي هنا ال symbol ال
symbol Lممكن اعمل اكس او V او اي سيمبول هو الرمز
اللى هستخدمه ك label و استخدمه في ال go to
فبالتالي انا ابني أسلوبين ل two ways of assigning
labels to three address code بستند إلى وجود ترقيم
لل instructions بالتالي رقم ال instruction هوال
label او بيكونش فيه تقييم انا بحط label و ..
symbolic label وهو اللي ب .. استخدمه في ال go to
statement واضح؟ هذه الملاحظةأساسي جدا في شغل ال
instructions لأنه احنا قلنا ميزة ال three address
code على ال syntax tree ايش كانت اذا بتذكروا ان ال
syntax tree عمليا بتمكنني ان انا بتقدملي بديل كويس
لمثالة ال intermediate representation ولكن نقطة
ضعف ال syntax tree انها ما بتساعدني في ال control
flow مافي عندي وسيلةإن أقول في الـ syntax tree إنه
بعد ما يخلص ال execution في هذا الجانب ينتقل إلى
الجانب الآخر صح؟ مظبوط؟ مافي في ال syntax tree
إمكانية وبييزة ال three address code على ال syntax
tree هي هذه النقطة بالتحديد okay فعشان هذه النقطة
بتاعة يتم يجب أن يكون فيها أسلوب محدد لل labeling
إما استنادا إلى ترقيم الأسطور أو استنادا إلى
labelsأنا بدي أضعها طبعا مش أنا اللي بدي أضعها ال
compiler هو اللي بدي أضعها ال compiler هو اللي بدي
أشكل ال instructions هذه و هو اللي برضه بيضع ال
labels okay الآن ال three address instructions ايش
ال وعاء اللي ممكن احنا نخزن فيه ال instructions
ممكن عدةفي منها اللي هو ال quadruples ال
quadruples تعرفوا كلمة tuple tuple يعني ال record
في ال database في ال table بيسموه tuple صح عبارة
عن مجموعة من ال feels دايما بيجوا مع بعض صح فاحنا
هنا عندنا برضه نفس الاشي واحد اتنين تلاتة اربع
مكونات دايما بيجوا مع بعض فهذه الاربعة quad اربعة
quadruples تمامفبالتالي انا مقدر اخزن ال
instructions ال compiler بيخزن ال instructions
اثناء عملية ال code generation intermediate code
generation بيخزن ال three address instructions في
array او arrays ال array هذه مكونة من اربع عمدة
العمود الأولى زي ما انتوا شايفين لإيش لل
operation اول شي قبلالان احنا .. احنا ال
expression زي هذه هي عبارة عن statement statement
assignment statement عندي ال a على ال left hand
side و عندي ال assignment و على يمين هي إيش
expression لأن ترجمة هذه ال statement هي مجموعة ال
instructions ال three address code instructions
هذه صح؟ في الأول زي ما تشوفين ال minus جابة لعملية
الضرب ال c بدأ ناخد ال negative تبعهابتخزن في T1
بعدين T1 هو اللي بتضرب في B بتخزن في T2 بعدين
بنعمل نفس الاشي في المرة التانية صح minus C بتخزن
في T3 T3 بتضرب في B بتخزن في T4 لأن T4 وT2 هم طرفي
ال expression بالظبط بنجمع وبنجمع T4 وT2 في T5 وT5
هو اللي بين عطلة هذا ال free address code هذا ال
free address codeبيتخزن في قرية Quadrope القرية
Quadrope القرية هذه صيغة القرية هذه انه اول عمود
محط فيه operation اي operation ال assignment ولا
اللي لأ طبعا مش ال assignment ال operation اللي
فيها العملية الحسابية اللي بتخوم العملية الحسابية
فاندي هنا minus هذا كلمة minus minus minus minus
minus minus minus minus minus minus minus minus
minus minus minus minus minus minusالعملية
الحسابية الـ unary operation اللي بتعطيني ال
negative تبع المتغير صح فهي ال minus ايش ال
argument الأولى يعني ال upper hand الأولى ال C ايش
التاني
العمود الأخير لل result العمود الأول لل operation
والتاني اللي في النص لل operands طبعا مش كل ال
operations بتاخد two operands وفي بعض ماباخدش
operands بالمرة okay ف .. فهذه بالأساس اللي هو ال
.. ال quadrupleأو الـ quadruple array اللي ممكن
تستخدم في تخزين
الـ three address code الان عندي
ال
unary كما قلت تعالى ال unary operators زي هكذا
مابتستخدمش arg2 صح؟ ال operators زي ال param
تذكروا هذهلاتستخدم R2 و لا تستخدم الاضافة تتذكر
البرامج احنا قلنا لو انا مثلا عندي function بدي
استدعي function F بقيها متغير نستخدم call و F و
نضع in هنا in عدد ال brothers يعني هذا المتغير
بأول شي بسلمه ببرامج مثلا متغيره X برامج X بعدين
هنا بقول call Fبعدد واحد parameters طبعا ال output
تبع f بأخده باليساوي في المتغير اللي بديه فهذه
parameter هتيجي في ال quadruple هتيجي في العمود
الأولاني parameter و ال x هيجي في ال arc one مظبوط
و بعدها كده اللي هستخدم لفي resultلا في argument
تاني ولا في result صح هذا اللي بيقوله هنا upper
letters like في القرآن used لا مستخدم ال article
ولا ال result ال conditional and unconditional
jumps put the target label في ال result يعني لو
بقول go to بقول go to و بحط ال label في ال result
الآن إذا هي unconditional ف go to بدون أي إذا هي
conditionalقيمة المتغير اللي بتعتمد عليه ال
condition يعني بيجي في R1 تمام
فهي ال quadruple في بعديك حاجة اسمها ال triple ال
triple أبسط من ال quadruple هي تبسيط لل quadruple
هي نفس ال quadruple بس حدفنا من عمود ال result زي
ما انت شايف صح في ال operation و في ال R1 و في ال
R2 بس مافيش result بديع عن ال result بما ان اصلا
ال result هي عبارة عن يعني مثلا نرجع تاني هناالـ
T1 هي نتيجة إعداد الـ Instruction الـ T2 هي نتيجة
إتهادة الـ Instruction الـ T3 هي نتيجة إتهادة الـ
Instruction خلاص بستخدم رقم الـ Instruction بدل ما
استخدم الـ temporaries هذه فايتوا هنا إيش اللي صار
minus C إلى B الـ B اللي نضربها مع مين معناه تيش
ال Instruction صفرمحطوط بين جسين إشارة إلى إنه مش
الصفر نفسه اللي بتضربه في الـP بده ال instruction
اللي وقع على index 0 نفس الأشياء هنا هذا اللي
قلناه اللي هي في الآخر لما نجيب T2 زائد T4 T2 هي
ناتج instruction number 1 و T4 هي ناتج instruction
number 3 إحنا هيك بنكون إيه؟ وفرنا اللي هو عموداو
استغنالها عن عمود ال result triples في حالة اسمها
ال indirect triples indirect triples هي triples في
الأخرها هي triples بس و احنا أضافنا اليها اللي هو
ايش ال ray تانية هذه ال zeros و ال ones هي عبارة
عن pointers الى ال instructions طبعا استفدنا منهم
هذه ال instructions موجودة و بتؤدي الغرضماذا لو
اضف ريت تاني فقط
مجرد pointers على الوصفات
السبب في ذلك ان ال optimization stage ربما يحصل
فيها ايش ال compiler في ال optimization ربما يحتاج
يحلف يضيف يبدل instructions من مكان لمكان هذه
الأمور لما بعملها لو انا عندي linked list و بشيل و
بهدابس مجرد ما بفك pointers و بضع بال pointers لإن
بكون عندي array و بدي أشيله record بدي أعمل shift
لكل اللي بعده يرجعه غلبه صح؟ بدي أعمل insert بدي
أطلع حد لك كلهم و بعدين أحطهم و بعدين أرجحهم بعدهم
مظبوط؟ يعني processing overhead عالي جدا حكاية
الحدف والإضافة و هذه الحدف والإضافة و shuffling ..
shuffling يعني شي من مكان لمكانإذا بحتاجه في ال
optimization ما مشكلة فهنا أنا بس إيش بسوي أنا
عندي ال instructions فليقول مخزنين بأي شكل و أشكال
لما بدي مفترض أبدل هذا أحط الجبل وهذا أرجحها تحت
مجرد بس بغيررقم الانستركتشن في الانستركتشن الرئيسي
صح او لا نعمل انستركتشن ونعمل انستركتشن في كل مكان
و بعدين نغير ال pointers في داخل الانستركتشن صح
فال indirect triples الغلط منها بالاساس هو ايش
تمكين عمليات التعديل على ال reordering للانستركتشن
في مرحلة اللي هو ال optimizationفي اشي في الاخر
برضه كمان في form اخر اللي هو single assignment
form static single assignment form single
assignment ايش يعني افترض ان انت عندك هنا three
address code مجموعة three address code
instructions P بتساوي A زي ال B Q ساوي P نقصيه
بعدين انا خلصت من ال P هذه استخدمتها في عملية
الطرح وخزمت ناتج في ال Q ال P هذه انا مش ممكن
استخدمها اعيد استخدامهاأنا استخدمت هنا Q ضربت في D
و أنا خسرت النزل في P و بعد كده أخد ال P طبحت من
ال E هذا اسمه multiple assignment يعني أنا استخدمت
المتغيرة و ال name في أكتر من مرة استخدام في
single assignment لأ لازم المتغيرة استخدمه single
time only one time only فبالتالي هنا بكون عندي ..
زي أنا عندي هنا P بدا استخدمه منكم و بقول P واحدو
بعد ذلك لاحقا اقول P2 يعني اعمل اعمل حسابي ان ما
.. و هذا برضه أيضا له غرض في ال optimization فاحنا
الآن ال single assignment form هو عبارة عن free
address code ولكن ال variable او ال name اللي
بيستخدمه مرة واحدة فقط هذا الكلام بي .. ممكن
يدخلني في إشكالية صغيرة وهي انهفى الـ if statement
لأنه لما بدى أقول if و
هدى flag متغير بدأت على قيمته اللي هو x بالساوية
ناقص واحد else a else x بالساوية واحد لأن هدى لو
بدى أترجمها three address code بداجة بقول flag
flag
مفترض الفلاج ماخدة قيمتها في درجة اقول if false
مثلا اه فلاج روح
على من اكس
فالس
خلّيها بس تساوي واحد و تسلب واحد بس شجرك عشان
تظهر، تكون مساوي يعني انا
قولت لك ال false flag روح على ال auto
neutralizer، صح؟الـ false في الـ go to meet دلوقت
صح؟ إذا الـ false X قصيره بقى إذا مش false فتكمل
تعمل ال X مرتين فبقى نعمل go to meet و أنا بقى
بخفز عنها هيك ممكن؟ مش بغض النظر ال go to مظبوط
ولا ليه المهم إنه حتى لو أستخدم ال X مرتين هو لبسي
ال X مرتين فهذا بنافي لإن قصي الأساسية تبع ال
single assignment إن أنا ال X أخدت إيش مرض .. أخدت
.. يعني أستخدمك مرتين صح؟Okay فال .. ال .. ال ..
البديل عندك اللي هو دي هي اسم الـ Phi function انه
باجي مقول هنا اي flag خلاص اي flag ناخد ال value
تبعته طب .. طب هجيت ال .. فما نقول ال .. ال flag
فوق سقوطه لعشرة او لعشرة و تلاتة مشكلتك انا
استخدمت ال X مرة واحدة يعني هجيت حط ال X بساوة
واحدة صح؟ هو في ال .. في ال control في ال .. في ال
execution ال X أخدت قيمة مرة واحدة لكن في ال
instructions ال Xظهرت مرتين ماعيش اقول مشروط
الأساسي ان انا ماعيش استخدامها انها استخدمت مرتين
فالبديل عن ذلك اللي هو احنا نيجي نعطي flag ال
value تبعها وبعد كده نيجي نقول x3 بساوي فاي x1 لأ
sorry نقول x1 بساوي minus one و x2بساوي 1 بعد ذلك
X3 بساوي Phi X1 و X2 على هذا الأساس Phi هي
الاستثناء الوحيد اللي ممكن يضع فيه ال variable
المرة
التالية فX3 تاخد قيمتها إذا كان فلاج هذا true تاخد
X1 إذا كان false تاخد قيمتها من X2
تمام هذه نهاية ال section ستة او اتنين اللي هو
كافة ما يتعلق بال three address code عندك ممكن في
ال exercises او في امتحان او كده بيجيلك expression
ويقولك والله اعطيني three address اعطيني syntax
three تقابل عنه اعطيني quadruples اعطيني triples
او اندراج او اندراج triples ممكن برضه كده يتطلب
منك expressionsفيها .. فيها إيش؟ reference أو فيها
function كوه .. هاي ال function كوه زي اللي
بتاعتها و حكيته هذا مثلا لأن هذا ماتاكتيش تسوي
ماتاكتيش تقول و الله في الأول y زار واحد تعطيها T
واحد سوى y زار واحد بنفحكوا لأن؟ بنفحكوا لأن؟ بعد
هيك أجي أقول Param T واحد بعد هيك أقولأجي أقول إيش
T2 بيساوي call F D 1 one اللي هو يعني parameter
واحد فقط اللي هو ال parameter اللي أنا حطيته قبل
استخدامها بعدين أجي أقول إيش X بيساوي T2 زائد 2
هذا اللي هو الترجمة لهنا الواقع هذا بقى عن
assignment statement تحتوي على expression وال
expression يحتوي على function callالبرامج الواحدة
تحترق على البرامج الواحدة البرامج الواحدة تحترق
على البرامج الواحدة البرامج الواحدة تعني
expression
سكتش ستة تلاتة سوف نتطلع على كيف نعود لموضوع ال
types و ال declarations بس المرة هذه لما احنا
شوفناها لما احنا حكينا في ال types و ال
declarations في الماضي كان عشان نشوف كيف نستخدم ال
definitions syntax directed definitions او syntax
directed translation schemes في تحديد ال type تبع
ال declarationيعني عندي مثلا declaration زيكى
integer x او integer 2x3
a طبعا ال type تبع هذه ال declaration اللي هو اصلا
بدنا نعطيه ال identifier هذا او ال type تبع هذه ال
declaration اللي نعطيها ال x كان احنا شوفنا
examples قبل هيكة لمجردالتحديد اللي هو الـ type
باستخدام SDD باستخدام attributes مرة شوفنا
attributes هذي Central size و مرة شوفنا inherited
الان بدنا نرجع لنفس الموضوع بس لغرض اخر لغرض اخر
اللي هو determining
ال storage بدنا نحك .. بدنا نشوف كيف ممكن يكون ال
definition نستخدمها او ال semantic rules نستخدمها
في حساب ال storageو في حساب هو ال address ال
address هو الموضوع اللي بدي يجي فيه ال variable و
كذلك الحال إذا القمر بلزم إذا في بعض ال
declarations بلزم أنه نعمل type conversion و كيف
ال compiler ممكن يعمل insert ل type conversion
instructions okay
هذه مثال اللي احنا مضيناها ليها بالحكاية و كان
الغلب منه زي ما قلنااللي هو انه احنا نحسب
ال value تبع ال T attribute اذا بتذكروا لو انا
عندي declaration او type ال T attribute لاشي زي
هيك كان عبارة عن ال expression هذا كلمة array جوس
جبنش عددالنوع هذا قد يكون basic و قد يكون لسه more
complex إذا هو complex زي الحالة هذه هو array of
تلاتة of h in integer تمام هذا ال expression هو
قيمة ال T attribute الآن احنا بدنا إضافة إلى هذا
ال T attribute بدنا نتخيل W attribute W attribute
اللي هي ال width ال sizeهذا الكلام قد يكون كبير في
الـ memory بعتمد على الـ integer ليس الـ array of
integers الـ two-dimensional array of integers فقد
يكون كبير الـ integer إذا كانت أربعة مثلا معناه
ذلك بدنياش أربعة أربعة في تلاتة و أتناشر في اتنين
و أربع و عشرين صح؟ صح؟ فهذا الـ compiler يجب أن
يعمل حسبه برضه باستخدام الـ semantic rulesبدي
اشتريها فهي هنا مثال عندي ال declaration زي هيك
هذه ال declaration a declaration has a form T و
identifier followed by semicolon followed by more
declarations يعني انا ممكن تيجي اقول مثلا integer
X و بعدين احصل semicolon وعمل كمانdeclaration أخرى
where غير وغيرها الـ D هي نفسها بقى ممكن تبقى
سيميكولينو هذي تبقى أسم إبسلون و هذي إبسلون خلاص
يكون دي بس declaration واحد أو تنتين أو تلاتة بس
ال type هذا ممكن يبقى basic أو ممكن يبقى complex
ال complex هذا عبارة عن أصل basic followed byهذا
شاهدناه قبل قليل الـ
B هذه ممكن تبقى integer و ممكن تبقى float إذا هو
complex يعني انتجر مثلا و بعدين هو الـ ghost
الجواته number و ربما كمان more كمان واحدة صح؟ هذا
ماشوفناهجباليه صح ان ال type ممكن يبقى array او
ممكن يبقى record اشوف نموش ال record ال record
مبساطة كلمة record بعدها Calibrate بعدها D و ال D
هذه هي اي single او multiple definition single
variable او multiple variables مافيش اشي جديد
الجديد هو انه احنا هذه ال definitions نشوف كيف
احنا ممكن ندخل فيها semantic
actions اللي تقوم بعملية ايش ايش قلنا احنا بدي لكل
declaration احسب ال type و احسب ال width ال type
هي نفس الكلام اللي كان جمله
هذا ليس جديد يعني نفس ال productions هذه و اللي
انا حاطيت تحته خط هو نفس ال semantic actions اللي
كانت مرّت علينا قبلها كذا اللي وظيفتها كانت انه
تحسب ال time الاستجابة هو حسبة ال width و
حسبة ال width برضه مش معقدة
واضح جدا إذا كان والله ال basic ك integer فهنعطيه
float في سبيله أربعة على أساس أن ال integer أربعة
byte إذا float نعطيه تمانية يعني إذا إشي complex
بدنا نضرب نضرب الرقم هذا فيه هش في ال size تبع ال
ال basic صح؟ صح
هنا ال width تبع ال parent بتساوي ال value تبع هذا
الرقم مضروف فيه في ال width تبع ال child صح؟
خلّينا
نطلع على ال .. ال .. ال
dependence graph
2 في 3ish واسمها a مثلا لان احنا مانيه بهذا الجانب
عشان نحسب ال type و ال size تبعه ال type واضح انه
عبارة عن array 2 of array 3 of integer الوقت هذا
كيف نحسبه تيه لان استجدت؟ ال 24 يعني كيف نحسبه؟
بالاصل احنا هذا بننظرله على انه Tبتكون من ال basic
و ال complex ال basic هو integer و ال complex هو
عبارة عن .. لأ
لسه عبارة عن ghost بعدين number بعدين second ghost
بعدين كمان complex complex هذا التاني هو عبارة عن
ال ghost ال numberوالجثث التاني وكمان Complex
Complex هذا عبارة عن إمسولون صح؟ مصبوط هيك ال
parsing هذا ال integer هو عبارة عن .. هذا ال
number هو عبارة عن الأتنين وهذا هو التلاتة الآن
بناء على ال parsing تبع هذا ال grammar بناء على
هذا ال grammar احنا لما نتعرف على ال size تبع هذا
بنتعرف على الـ B بنتعرف على الـ B بنتعرف
على الـ B بنتعرف على الـ B بنتعرف على الـ B بنتعرف
على الـ B بنتعرف على الـ B بتعرف على الـ B بتعرف
على الـ B بتعرف على الـ B بتعرف على الـ B بتعرف
على الـ B بتو ال integer بعدين كانت نبدأ نرد و
نرجع تاني ال type هذه ال T attribute و تبدأ
نرحيلها لل parent لأن في نفس ال .. و نفس الكارثية
ال size لأن ال width ال width تبع هذه اللي هو
الأربعة لأن هذه ال width تبع حاجة كم؟ أربعة
الأربعة اللي هتترحل هنا ليش؟ علشان تنضرب في
الاتنين
لتنضرب في اتنين فقط إذا كانت كل القصة integer of
اتنين لكن إذا لسه في كمان تلاتة معناته ال width
هذه الاربعة تترحل أيضا كمان ل هنا عشان تنضرب هنا
فهي عملية للاربعة تترحل الى ال width تبع ال C لإن
هنا لما نصل إلى نقل إبسلون
بنرجع ال W هذه اللي هي الأربعة بتنضرب في التلاتة
هي الأربعة اصلا اترحلت لهنا و انا هنا و لا على
المستوى انا بكون مالي عملية على ال rule هذا ال
rule هذا بتقول لي خد ال width تبع ال child ال
width تبع ال child اللي هو احنا مشينا و بنزل فيه
لما وصلنا ل ال W خلاص ثبت على انه أربعةالان خد ال
width تبع ال child و اضربه في ال number اربع في
تلاتة باتناشت صار ال width على هذا المستوى اتناشت
لان الاتناشت هذه نرجع و اضرب ال width تبع هذه الان
برضه ال width تبع ال child نضربه في ال number اللي
هو اربع عشرين الان في الآخر اربع عشرين تترحزن ان
هي لل parent
أمانيا في البداية ال width تبع ال B هذا ال N هنا
يقصد بها ال B ال basic type ال width تبعها أربعة
الأربعة هذه هي ال 4 كwidth و ال type و ال T كtype
ال integer ترحله على ال C و ثم ترحله على ال C
child ثم ترحله على ال C الأخيرة صار عندي ال C
الأخيرة لما اكتشفنا أنها epsilon
هذه الاربعة اترحلت لفوق عشان تنضرب في التلاتة وهذه
ال integer اترحلت لفوق عشان تأتي ضمن التركيبة هذه
التركيبة 12 هذه اترحلت لفوق عشان تنضرب في الاتنين
عشان ناخد ال 24 وهذه اترحلت لفوق عشان تأتي ضمن
التركيبة اللي فوق
زي ما هم على الـ dot على الـ T dot width و T dot
type بيكون هنا حسبنا طلب عنا ال type attribute و
ال width attribute ال width هذه بتقول لي جداش size
جداش بالظبط size لهذا المتغير ال tribe تبع بيك انا
شايف انا انا هندي ال tribe تبع هذا المتغير و هندي
ال size اللي لازم لهذا المتغير
عندما تكون ال declaration جاية ضمن مجموع ال
declarations يعني في مكان ما في البرنامج فيه دي
declaration و
بعدين فيه declaration تانية دي declaration و في
مكان اخر دي declaration تانية integer X و في مكان
اخر دي declaration اخره multipleأو sequence of
declarations كل declaration بالاضافة إلى ال size
تبعها إلى ال size تبع المتغير ملزمني أيضا كمان
اعرف اين بدي احطه افترض انه بحط المتغير بعد اخر
متغير انا عندي انا ال data section ايه ال program
ايه ال data بدي اصفط الليش لصفط المتغيراتالـ A
أخدت 24 بايت المتغير
الجديد اللي يجب أن أعمله هو X يجب أن يأتي بعد ال
24 بايت وليس أن أرمي حد فيك أينما يأتي بداخل ال
data section صح أو لا؟ فأنا لازم يبقى في عندي حاجة
اسمها offset اللي يتأشر لي أين يجي يتخزنالـ next
declaration بالاصل أول declaration بتيجي على
offset 0 offset 0 بداية من من ال data section بعد
ما أحسب هذه ال declaration كده ال size تبعها كده
ال width تبعها نضيفها على offset .. نضيفها على
offset جديد صفر زي ال 24 تبع 24 جلد الآن هذه ال
declaration التانية تبدأ عند ال offset تبعها عند
24 لو أجي بعدها كمان declaration أخرىoffset بالظبط
فهي كل هذه بطل حسبت ال offset بحطها أيضا في ال
semantic action ال semantic action صار فيه تلت
حسبات من حسبها أولا ال dot type attribute ال width
attribute والoffset attributeكل هذا الكلام يتم
محالجته باسماتيك اكشن او rules او اذا كنت تريد ان
تعمل SDD او rules اخر شيء اريد ان اقوله بعد موضوع
ال sequence of declarations قلنا ايش النقطة
الأساسية في ال sequence of declarations اللي هي ان
نغير ال offsetعشان نغير ال offset value عشان كل
new declaration تبدأ من حيث انتهت ال declaration
اللي
قبلها هذا القمر أحيانا بلزم انه بلزم
انه يتبنى من نقطتين النقطة الأولى اللي هيإن لو انا
هندي ال declaration قبل لو انا هندي ال declaration
ل record زي هيك شو استجدت؟ ما استجدتش إشي لأن ال T
هذه record افتح جوس و D سكر جوس لأن D شو هي؟ ليس
أكتر من .. مش أكتر من الكلام اللي كنا بنحكيه ال D
هذه إما single أو multiple declarationقد يكون
بعضها simple أو basic يعني أو قد يكون compound فما
استجدتش اي حاجة كل الكلام اللي حكيناه قبل شوية
بينطلق على ال D هذه اللي جاي من ضمن تأريف ال
record لأن ال record شو هو بالاصل مجموعة من ال
variables مظبوط ال variables هذه قد يكون بعضها
basic قد يكون بعضها ishيعني ممكن تحتوي على الرقم و
لا لأ فكل الكلام اللي حكيناه بيجي ضمن التعريف تبع
الرقم في الـD هذا النقطة الأولى النقطة التانية
اللي هي انه انا ممكن يكون في ندي مثلا ال scope ال
variables هذه اللي بينعملها ال declaration الان
هتكون خبعة ل scope محدد مدناش يختلط مع ال scope
تبع ال declarations أخرى في scope تانييعني انا
ممكن اعرف X في هذا ال current scope و يمكن في عندي
X تاني في another scope هذا ال scope تبع function
و في عندي scope تاني ل global او scope تاني ل
function اخرى صح فانا ممكن اتخيل ان كل scope له ال
data section تبعه ال data sectionStack وانا ال
variables اللي بتم تعريفهم يجوا يجوا يجوا يجوا
يجوا يجوا يجوا يجوا يجوا يجوا يجوا يجوا يجوا يجوا
يجوا يجوا يجوا يجوا يجوا يج
مؤشر بداخل ال stack هنا ليس بداخل ال global data
area تبع البرنامج كله على أساس ماذا قلنا؟ على أساس
نقول لك كل scope فيه Data Area منفصلة ال data area
منفصلة من ال data area منفصلة من ال data area
منفصلة من ال data area منفصلة من ال data
area منفصلة من ال data area منفصلة من ال data area
منفصلة من ال data area منفصلة من ال data area
منفصلةهذه المقاطع الأولى هي ان ال record تعريفه لا
يضيف اي اش جديد على الكلام الأولى اللى حكيناه
بالنسبة لل type و بالنسبة لل width و بالنسبة لل
offset ال offset ممكن يتأثر ماذا كان احنا .. يعني
تتغير حسبتك ماذا كان نحن نحسب لكل البرنامج و لا
نحسب له scope محدد okay
section 64
expressions من حيث انه لو انا عندي expression ال
expression هذا ال code الإجمالي تبعه بدي تكون من
ال code تبع ال sub expressions الفرعية يعني احنا
الآن نكون عندى grammar و ال grammar هي بتقول لي ان
هو ال expression احد صيغته انه يكون عبارة عن two
expressions مجموعين مع بعض اي واحد و اتنين او يكون
مثلا two expressionsمطرحين لبعض بالنقص في هذا
الحالة ال translation تبع ال E الإجمالية هي عبارة
عن ال translation تبع ال E للsubstitution الأولاني
و وراها طول ال translation تبع ال expression
التاني، مصبوط؟ خلتوا هنا أعمل ال E dot code بساوي
E واحد dot code و لاحقا هطول وراها إيش؟يعني مثلا
هذا هيك انا
برجع للجوا عشان اجيب ال example اللي فيه ال
expression اللي هو هذا هذا expression هي
الترجمة تبعته صح ولا لا بقدر اتخيل ان هذه هي ال
dot code هذا هذا كله هو ال dot codeattribute تبعت
ال expression انا عندي كل هذا على بضع عبارة عن ايش
statement ال statement هذه ماخدة ال form
identifier و جاي ورايا يساوي و جاي ورايا ايش
expression هذا ال expression ال dot code attribute
تبعته هيك صح هذا افترض انه انا عندي expression هذا
هيك
two expressions مجموعين في البعض صح ولا لأ مش
نفترض هو هذا الواقع فهذا عمليا هو عبارة عن وين
الجزء من هذا ال code اللي هو ترجمة النص الأولاني
لعند وين لعند هنا ت واحد اتنين كيف ت واحد اتنين ت
واحد اتنين وين النص التاني ت ثلاثة و تاربعةوهذا مش
معناه؟ لأ هذا مابتش معناه بالكثير تمام طيب الترجمة
الإجمالية خلّي بالك لأ احنا ال expression بيقف عن
هنا هذا راجع لل assignment هذا تابع لل assignment
صح أو لا؟ حدود الترجمة تبع ال expression واقفة عن
هنا هذه اتبالة علشان ال assignment يعني الآن ال
dot code تبع ال expression كله هي عبارة عن ال dot
codeهيّت و احنا عندنا ايش بيقول هاي E واحد ها هادي
ال dot code ل E واحد ل E واحد حلو؟ و هادي ال E
اتنين ال E اتنين ال E اتنين ال E اتنين ال E اتنين
ال E اتنين ال E اتنين ال E اتنين ال E اتنين ال E
اتنين ال E اتنين ال E اتنين ال E اتنين ال E اتنين
ال E اتنين ال E اتنين ال E اتنين ال E اتنين ال E
اتنين ال E اتنين ال E اتنين ال E اتنين ال E اتنين
ال E اتنين ال E اتنين ال E اتنين ال E اتنين ال E
اتنين ال E اتنين ال E اتنأو الـ instruction هذه
الأخيرة فهذه ال statement أو ال instruction
الأخيرة T5 هي هبارة عن instruction موظفتها إنها
تجمع محصلة القيمة T2 هي أجمع القيمة اللي حصل تحصيل
ال expression الأولاني T2 هي يعني قيمة B مضروبة في
نفس القيمة C كله في الأخصة في T2 ومثل اللي هي T4
مجموحةهدول ال two هد ادرس و لا مش ادرس هدى مش ادرس
هدول مش names و ال names احنا بنقول عنهم هم تسمية
لادرس فنسميهم addresses فهد بنسمي ال E اتنين dot
address وهد بنسمي ايه احد dot address وهد بطبع
طبعا ايه هو E dot addressE dot address يعني إيه؟
ال address اللي بده الصوب في القيمة النائية تبعت
ال expression كلها حلو؟ فأصبح من هذا المنطلق أنه
أنا عشان لما يكون في عندي expression جالي مركب بين
two expressions مجموعين مع بعض فال E dot code تبع
هذا ال expression بساوي E واحد dot code ملحوم
مورمو على طولالـ E2 dot code ولكن لازم برضه ألحق
وراه على طول Instruction إضافية بتقول ال E dot
address بيساوي E1 dot address زائد بعدين ملحوم
معاها علامة الزائد ملحوم وراها ال E2 dot address
هذا هو اللي حاصل عندنا هنا في الاخر
وينها slide هيتها امسح ال .. هيتها مش محتاج امسح
ال E dot code وراها ال E واحد dot code وراها ال E
اثنين dot code وراها ال generate هذي اجارة عن
function وضفتها تاخدالاناصر هذه لو تكون منهم
instruction إحدى مثل ذلك بدك تفكر لأن لو هنا ناقص
E1 مجرد إنه احنا بدنا ال E1 ال dot code هو هو
مافيش اللي بنضيفه على حد ولا بناخد منه إشي بس بعد
كلام نعمل instruction في الآخر اللي هو E dot
address بساوي ونحط كلمة minus وساويالإدريس E1 من
هنا نجرب الإشارة هنا في الحالة أن E1 بين غُسين لا
ولا إشي ال E بياخد ال E dot address تاخد ال
address E1 و ال dot code هو هو لأن لو ال
expression هو بجرد identifier مافي ترجمة و ال
address E هو نفس ال identifierالـ E Dot Address
يساوي اللاكسيب الـ Identifier يساوي ا يعني بيكون
مثلا عملنا T مثلا 11 و T1 يساوي 11 و T1 يساوي 11 و
T1 يساوي 11 و T1 يساوي 11 و T1 يساوي 11 و T1 يساوي
11 و T1 يساوي 11 و T1 يساوي 11 و T1 يساوي 11 و T1
يساوي 11 و T1 يساوي 11 و T1 يساوي 11 و T1 يساوي 11
و T1 يساوي 11 و T1 يساوي 11 و T1 يساوي 11 و T1
يساوي 11 و T1 يساوي 11 و T1 يساوي 11 و T1 يساوي 11
و T1 يساوي 11 و T1 يساوي 11 و T1 يساوي 11
وSyntax Directed Definition يحتوي على semantic
rules واضيف الـ semantic rules هذه ترجمة ترجمة
بمعنى تشكيل أو بناء أو إنتاج اللي هو الـ three
address code instructions تبعت إيش تبعت expression
بنركب على هذا الكلام ال generation تبع statement
وبنركب منه ال generation تبع اللي هو بجيئة ال ..
ال .. ال .. ال constructs الأخرى اللي في البرنامج
okayوبعد ذلك أصبح واضح أن الـ Translation هي عملية
تراكمية بتنبنى من الـ Sub-translations تبع كل
واحدة من العناصر المتعاملة بالنسبة لي الـ Example
هذا يطلب منك كيف أن تاخد هذا ال statement الصغير
واطلع منها ال three others code التلاتة دولة ال
three others code instructions المحاضرة الجاية
بنحكي ان شاء الله في ال incremental translation و
بنكمل section ستة اربع ان شاء الله يعطيكم العافية