بسم الله الرحمن الرحيم الصلاة والسلام عليكم ورحمة
الله وبركاته اليوم ان شاء الله احنا بدنا نشوف
تطبيقالمثال التاني لتطبيق
ال syntax directed definitions في بناء ال syntax
trees كنا شوفنا قبل هيكة مثال اللي هو باستخدام S
attributed definition كيف تنبنى syntax ال tree
باستخدام S attributed definition المثال التاني
برضه لSyntax Tree ولكن الـ Definition اختلف الـ
Attributed Definition الـ Attributed Definition
هذا مبني على ال grammar هذه ال grammar هذه قلنا
احنا قبل هيكة انه بتعالج ال left recursion اللي في
ال grammar الأصلية ال grammar الأصلية اللي انبنى
عليها ال S attribute ال definition اللي هي هذه هذه
فيها left recursion ولا لأ فإن عملت ال grammar
التاني هذه
بتتخلص من ال lift recursion وبالتالي صار انا
مابقدر اعمل S-synthesized attributes فانعمل ال
inherited attributes
بناء على الـ inherited attributes والغرامر هذه
لدينا الـ ill-attributed definition بالتالي بنشوف
كيف هذا الـ ill-attributed definition بيبني ..
بيعمل نفس الغرض الأولاني اللي هو بناء الـ syntax
tree الـ syntax tree نفس ال example الأولاني اللي
هو كان عندنا احنا input .. كان عندنا input string
اللي هو الـ A نقص 4 زائد C okay
الـ syntax tree لهذا ال input هتكون ببساطة node
للـ plus تشير إلى node التانية تبع ال minus اللي
تشير من ناحية إلى ال node تبع ال identifier a و
node التانية تبع ال number 4
هذا الـ plus تشير إلى الـ minus ومن ناحية أخرى
تشير إلى ال node تبع ال identifier C نفس
ال tree اللي عملت في ال example الأولاني بدا هي
نفس اللي عملها بس الآن الطريقة القالية اختلفتال
grammar اختلفت و اترتب عليها .. ال grammar اختلفت
و اترتب عليها rules اخرى فاحنا الان بدنا نمشي step
by step بنزمنا نتخلى ال .. ايش .. ال grammar هنا و
نعمل ال tree هنا okay ال tree طبعا بدنا نشتغل ال
syntax tree مع ال parse tree في آخر واحد هاي ال
syntax tree okay فبدنا ندنيها تدريجيامع الـ
Pulsing الـ Pulsing للإكسبرشن هذا هيبدأ من الـ
start symbol اللي هو E مظبوط ال E مالوش إلا
production واحدة اللي هي T E prime مظبوط الآن ال T
هذا بدأ نبدأ فيه ال T هذا بتتاخد على إن واحد من
التلات productions هدولةطبعا هتكون ال production
الاد الوسطانية رقم 6 اللي هي identifier و ال
identifier هنا هو عبارة عن ال إيش عن ال ايه okay
بصبوط الان ال rule تبع هذا ال production هي أنه
بدنا نعمل ال leaf node الأولى ال leaf node الأولى
بدنا نعمل أحطها على الجانب هذا أو تحت هنا ال leaf
node الأولى اللي هو ال identifier الليالـ A
الـ A الـ
A الـ A الـ A الـ A الـ A الـ A الـ A الـ A الـ A
الـ A الـ A الـ A الـ A الـ A الـ A الـ A الـ A
الـ A الـ A الـ Aفي entry لحرف A رقم واحد في ال
table نفترض رقم واحد في ال table بعدها كال C لما
ال lexical analyzer يشوف ال C بطل هيعملها entry
وإذا في غيرهم هيعملهم entry مظموط ف dot entry
attribute تبعت ال identifier تساوي one مظموط one
تساوي one لكن احناعشان لا نشرب حالنا ال one هذا
يشير إلى إيش و كده نحط ال a على طول dot entry تشير
إلى اللي هو ال entry في ال table فهذه attribute
entry dot entry هي أول attribute بتاخد ال value
تبعها أنا حطت ال واحد فوق اليساوي لأن اليساوي هي
عملية ال assignment فأول عملية أطاع value ل
attribute هي اليسار هذا، مظبوط؟بعد ذلك لما تبني ال
node لما تبني ال node لما
تخلص ال leave method أو ال leave function تبني ال
node بتروح بال selling pointer لمن؟ لضبط node
attribute تبعت من؟ تبعت
ال T صح؟ أصبحت الآن هذا كشير إلى هذا ال node
هذه الـ attribute اللى بتاخد value بعد ال
attribute لأ لأ لأ لأ لأ لأ لأ لأ لأ لأ لأ لأ لأ
لأ لأ لأ لأ لأ لأ لأ لأ لأ لأ لأ لأ لأ لأ لأ لأ لأ
لأ لأ لأ لأ لأ لأ لأ
خلصت تنفيذ هذه القمرة والعملية تستأنى في عملية ال
parsing تكمل عملية ال parsing في عندي ال E' هذا ال
E' هذا اللي هو الشق هيك صح؟ بده نعمله parsing ببدأ
بال minus يبدو على طول ال parsing هيجي على استنتى
لهذا ال rule
يوجد فيه minus و T و E' E' هي الـ child الـ E' هذه
الـ T
هذه طبعا الـ minus اللي بدنا نعمله ماتش الـ T هذه
بدأ لنعمله parsing parsing على أساس من هذوله ال ..
لأن عندي أربعة خاطر سنة هنا اجتزنا الـ minus سنة
على الأربعة يبقى هذي none و ال none هذا ايه هو
attribute اسمه في ذلك؟
Okay هذه ال attribute اسمها value بتاخد .. بتاخد
ايش؟ بتاخد .. بتاخد .. بتاخد اللي هو ال value تبع
ال number اللي هي 4 فأصبح ان هذا رقم تلاتي ال
attribute الرقم التالتة اللي بتاخد ال value تبعه
الآن ال leaf هذه ال leaf هذه بتعمل الان note أخرى
لل number 4الـ pointer تبقى هذه الـ note تبقى الـ
T تبقى الـ
T تبقى
الـ
T تبقى الـ T تبقى الـ T تبقى الـ T تبقى الـ T تبقى
الـ T تبقى الـ T تبقى الـ T تبقى الـ T تبقى الـ T
تبقى الـ T تبقى الـ T تبقى الـ T تبقى الـ T تبقى
الـ T تبقى الـ T تبقى الـ T تبقى الـ T تبقى الـ T
تبقى الـ T تبقى الـ T تبقى الـ T تبقى الـ T تبقى
الـ T تبقى الـ T تبقى الـ T تبقى الـ T تبقى الـ T
تبقالان خلاص الامر هذا ايه ننتقل الى ايه هو ال E
prime هذه نعملها ال parsing تبعها ال parsing تبع
ال E prime هذه هيخش على الشاشة ايش ما نسوي سم في
المصحف اه بدي اجيب هذا هيك اجيبه من هنا و هذه خلاص
هذه بنزيحها شوي هيك بصير noneبطقال سواء أربعة وهذا
اللي بنعملها الآن هذا ال E' الآن أحنا بنحكي عن
المطبق هذه أو جزء هذا من ال input زائد زائد و T و
E الان ترتيب ال value هاي واحد هاي اتنين هاي تلاتة
هاي أربعة الآن
يفترض ان اكمل فلاش في هذا الاتجارة اجي هنا اعمل
natural plus و ابدأ parsing الـ T للـ T عبارة عن
identifier صح اللي هو enter في ال symbol table
اللي هو الـ C الان هذه كذلك الحالة هذه
ستصبح خمسةاللي هو قولنا إيش C اللي هي أعليان اتنين
يعني بتعمله node يعني الآن بعدين بتتعمل ال node ده
six صحيح بنعمل هذا rule leave node ال node هذي
بنحطها هنا أبقى on identifier C اللي أنا اضغط node
تبع هذا بتتأشر عليه فهذا بيصير إيه ستة صبر على إيك
واحد الآن الإشكالية أن أنتي هنا أناترتيب ماشي معاه
كويس لغاية هنا هنا هذا قبل ما يعمل ال C راح اعطى
ال .. او اللي عملتها هذول .. اللي هم اعطى ال top
note ل ال top inherited تبع تمين تبع ال E prime
وبالتالي
هذا واحد اتنين تلت اربع خمسةو بعدين ال inherited
هذه برضه رحلها لل inherited تبعت هذه ماشيها
وهذه أصبحت ستة و بعدها صار أن هذه سبعة وهذه تمانية
بناء على الرسمية عمليا هذا هو المصبوط هيك لأن أنا
الآن
لاحظ شغل انه حتى الآن هندي تلات notes متفارقة ماعي
pointers عليهم لسه ماربطهم مش انا بال operations
بال minus و ال plus وين بدى اعمل .. مين اولش بدت
اعمل ال minus و لا ال plus ال plus و لا ال minus
ال minus مش عارف على كيف ليش لأنه انا الآن اللي
انا الآن بعد ما عملت هذه بعد ما عملت هذه بدي اعمل
الـ Note تبعت الـ minus لأنه احنا خشينا
هذا ال identifier تلسي كنا وين كنا هنا كنا هنا لما
خشينا صح ولا لأ ولا كنا هنا اول
اشي minus خشينا هاي E بعدين خشينا T بعدين ال E
prime بعدين ال minusبعدين E لان عملت ال node هذه و
لان عملت ال node هذه مظبوط و الآن خشينا التاني على
ال plus و ال T و بعدين E صح؟ مظبوط okay و أنا الآن
بدنا أعمل ال plus مظبوط فالان ال plus لما بدتنا ..
لما بدتنا نعمل على مستوى هذا طيب بدا two pointers
pointer يشير إلى مين؟
صبر شوية صبر شوية احنا الان بدنا نعمل ال minus
اللى المفروض تعمل هو
عموما
طالع كيف احنا الان بدنا two nodes ال plus و ال
minus ال plus بدتاخد pointer على ال minus مظبوط هى
ال tree مرة أخرى هى ال tree صح ال plusلتأخذ الـ
pointer على الـ minus الـ minus عندها بدا two
pointers واحد على ال a و واحد على مين على الرقم
أربعة صح؟ بغض النظر عن مين بدوني أعمل الأول أنا
الآن لو بدأ أعمل ال minus نفترض ال minus هذه بدا
pointer على ال a و بدا pointer تاني على الأربعة
طيب أنا في ال level هذا من وين بدأ أجيب pointerعلى
ال ايه ال a sibling ال a ال a ال node هذه مين معاه
ال pointer تبعها ال dot node و ال dot node sibling
لي أنا حتى لأ مش sibling لي أنا في المستوى هذا
الآن صح يعني أنا هنا child اللي لها هذه وهذه
sibling لليه فلازم هذه ال pointer اللي هنا يترحل
هنا بعدين أنا أجيبه من ال parent بظبط اللي هو برضه
ال parent لما بجيبه من ال parentفانا قبل ما احكي
عن بناء الـ minus والزائد لازم اتم عملية ترحيل ال
pointer من هنا لهنا ومثل ذلك لما انا بدي احكي عن
ال plus لما انا بعمل plus معاه pointer ال plus بيه
ايش بده على يمينه بده ال C هاي pointer معاه على ال
C من هنا صح؟ بس بدي pointer تاني على ال minus من
هنا جيبه بديها من فوقصح فلازم ال attributes هذه
اترحل ال values هذه اترحل ال inherited و هذا هو
السبب اللي اسمها inherited لأنها بتاخد من ال
sibling بعد ذلك هذه اترحل إلى مين إلى ال child و
لهذا السبب هذه اسمها inherited برضه اترحل إلى ال
child هذا الان انا و انا هنا و انا هنا في هذا
المستوى مدعم ل plus مدعم ل plusالنود تبع ال plus
باخد ها بدنا نعمل ال plus باخد dot node تبع ال T
ال T اللي هي على هذا المستوى بدنا نعمل ال plus
okay باخد ال dot T اللي هي أختها بالنسبالي لمين
على هذا المستوى child بعمل ال dot .. بعمل ال ..
باخد ال dot node تبع ال T اللي بتشارع على الأربعة
صح؟
لأ احنا هنا في المستوى هذا ال dot node بتشوّر على
ال C صح ال dot node تبع ال T هذه بتشوّر على ال C و
بالزمن ايش؟ بالزمن ال pointer يوشير إلى مين؟ إلى
ال minus من وين بدأ اجيب ال pointer يوشير إلى ال
minus؟ مين في هذه اللحظة مع ال pointer يوشير إلى
ال minus؟ هيكون هنا هذا ال pointer هذا ال pointer
الدبطي هادى أو على المستوى هادى هادى مستوى الـ
minus على المستوى هادى هنكون احنا ايش سوينا عملنا
النول تبع ال minus هتنعمل النول تبع ال minus هنا
هتنعمل
ال minus على المستوى هادى هتنعمل ال minus ال minus
بدها two pointers واحد يشير إلىالـ A واحد تشير إلى
الاربعة الـ A هذا الموضوع هتجيبه من الـ E prime
dot inherited ال E prime dot inherited اللي هي هذه
اللي تحت الفيروس صح هذا الموضوع يأتي من هنا فهذا
الان انتسخ إلى هنا صارت هذه تشير إلى ال A صح الآن
باخد هذا ال pointer و بسجله هناطب تقول انا جاية
انتسخ عشان ال simple examples يعني ال pointer تبع
ال T لما راح نال A ال
pointer تبع ال T لما راح نال A ال pointer تبع ال T
لما راح نال A تبع ال T لما راح نال A تبع ال T لما
راح نال A تبع ال T لما راح نال A تبع ال T لما راح
نال A تبع ال T لما راح نال A تبع ال T لما راح نال
A تبع ال T لما راح نال A تبع ال T لما راح نال A
تبع ال T لما راح نال A تبع ال T لما راح نال A تبع
ال T لما راح نال A تبع ال T لما راح نال A تبع ال T
لما راح نال A
تبع ال T
أجتني .. أجتني ال dot ال pointer تبع هذه هى مخزن
هنا اترحل هنا صارت هذه اشتغلت اترحل
لأن هى عندى انا هذه بتقولى ال dot
node تبع ال T بتروح على ال inherited تبع ال E
primeبس هو السؤال .. السؤال الأهم ان هذا الأمر ..
هذا ال assignment بتحدث على هذا المستوى مش على هذا
المستوى .. اه المفروض هي .. المفروض هي تكون شوفت
هنا و هنا هذه ال .. هذه ال function اللي بتعمل ال
node لحظة ما .. قبل ما تعمل .. يعني هذه المفروض
تكون موجودة على كخطوة سابقة ل creation .. creating
ال nodeلأن لو بدأنا نعمل على هذا المستوى لسه هذه
ماتكونش أخدت ال value تبعها لأن هذا الأمر كان مطبق
بعد ما اكتمل فاحنا الآن بنيجي نعتبرها أن هذا موجود
كسطر سابق لهذه هنا سابق لهذه فانت تخيل أنهقبل ما
نعمل ال note تبع ال plus أو قبل ما نعمل ال note
تبع ال minus احنا الآن في ال minus قبل ما نعمل ال
note تبع ال minus بدون ايه اترحلها اترحلها ده هنا
صار هالي معانا pointer على ال a الآن ده تنعمل ال
note تبع ال minus معانا pointer على ال a موجود هنا
تمام هيا تبقى نحطه هنا قبل ان انا اعلى ال code
بتقوللي خد بال inherited تبع ال Eو ال node التالي
تبعت ال T هذه انعملت اللي هي الأربعة هي تموجد هنا
باخدها أبوكي لي خدها لدّه node تبعت ال T خدها
فبصارت هذه ال node بتشير إليها ال pointers هذه
لازالت بتشير بس خلاص أنا هذا اللي مهمنيش الآن
مهمني أنه أخدت منهم وخزنت على ال نفس الأشي الآن
بدي أن أعمل على مستوى ال plus على مستوى هذيبس قبل
ان انا اعمل ال plus بتكون انعملت مين ال leaf node
هذه ال C الان بتنعمل اللي هو ال plus تنساش برضه
كمان ان ال inherited هذه رحلت له هنا ليش عشان انا
هنا في هذا المستوى ربما احتاجها بل اني فعلا
هحتاجها انا على هذا المستوى بعد ما اعمل ال plus ال
plus هتحتاجتربط مع الـ minus فبدل ما انا و انا هنا
اروح لسه ادور عليه فوق هي بتترحل تلقائيًا الخمسة
اترحلت على طول ال inherited اترحلت على طول ال
inherited تبع ال tribe صار الآن هذا يشير إلى مين
ال minus يشير إلى ال minus بالظبط يبقى أنا الآن
معايا إشارة pointer على ال minus هاخش هعمل ال node
هذه بعد 6هتنعمل سبعة تمانية هتنعمل مين؟ هتنعمل ال
node هذه بصار معايا pointer عليها الآن ضايل أعمل
ال plus هاي اللي عملت ال plus بس بدها pointer على
ال minus من وين بتجيبه هاي اللي يقول خد من ال
inherited تبع ال E prime أنا هاي ال E prime مش ال
child E prime هيته صار هذا الان يشير إلى هذا
والتانية ال pointer التاني اللي هو T ضبط نوت نجي
هذه تشير إلى هنا و هذا يشير إلى هنا لأن برضه كذلك
الحالة بدي الآن ال inherited تبعت هذه هذه
ال node اللي تتوان عاملة مين معاه pointer تبعها
اضطط node method لرمى العاملتها اضطط ال pointer
لمين
عندما قمت بعملها اعطي ال pointer لمن ؟ لـ heritage
لـ heritage وهذا ال payment هو heritage ليش؟ علشان
إذا بدنا نرحله لسه كمان لتحت يعني نفترض انه فيها
دي okay اه الآن مافيش شيء لسه نفترض ان ال string
لسه فيه كمان operation فلو في عندي كمان operation
هتنعمل إليها node ال node هذهبدأ تشير إلى ال plus
يعني بدأ تركب فوق ال plus هي زي ما ال plus ركبة
على كتف ال minus إذا في عملية تانية بدأ تركب على
كتف اللي هو ال plus و يبدأ يكون فيها طبعا upper
hand آخر هينعمل جوا هناك فالغرض من التسليم ال
pointer إلى ال child هو عشان ال child يسلمه
للمستوى اللي عنده اللي بتاعتهالان هنا ال inherited
ال E هذه خلاص احنا بعد ما شوفنا ال C مافيش يظلش
ايش فيها هذي قد تكون Epsilon Epsilon معناه ذلك ان
هذي ال production
بالتالي معناه هذا ال rule هذا ال rule بتقول انه
سلم ال inherited تبع ال E prime ومافيش اللي هو E
prime مافيش ال children يعطي ال parents لا مافيش
children ولا parents هذا هو نفسهبس إله two
attributes واحد ال synthesizer واحد ال inherited
فبقوللي أعطي ال inherited لل synthesizer نبعته
تمام؟ ايش؟ لنفسه ايوة هو بيسلم من إيد لإيد بداخل
نفس ال symbol ال E prime الآن ال inherited تبعته
ايش اللي هو اللي احنا قلناه؟ هي عبارة عن ايش؟ هاد
الآن بعد ما عملنا سبعة تمانية اه بعد ما عملنا سبعة
تمانية ايش عشان التسعة؟ بعد ما عملنا سبعة تمانية9
هذه رحلتها هي تسعة هي سبعة تمانية هذه تسعة هي تسعة
هذه تسعة اللي هرتدت أخدت اوي بالظبط بالظبط اللي هي
هذا ال pointer بتبع ال plus نزل على هنا صح فهذه
تسعة سبعة تمانية انعملت ال plus ال pointer بتبعها
مع ال inherited نزل على .. مع ال E هذى بس نزل على
.. مع ال E prime هذى نزل على ال E prime هذى بعدك
عشرة انه ياشف ياخذ يدي ال inherited ل ال
synthesized عشرة انه أيه بالظبط عشرة ان ال
inherited اخده ل ال synthesized okay
الـ inherited للـ synthesizer الان بعد هي كان و
احنا في الرجعة ال synthesizer بتسلم لل synthesizer
ان هنا اسمه synthesizer لأنه بطل لفوق ال
synthesizer هذه بتسلم لل synthesizer تبع ال parent
تبعه هيته هنا بعد ما اكتمل ال parsing تبع ال minus
او تبع ال plus
E1 يعني بتسلم لـSynthesized تبعت ال parent ثم نفسي
بيجي على مستوى ال minus ال synthesized هذه بتسلم
لـSynthesized تبعت ال parent في الآخر في الآخر هذه
ال dot node تبعها بيأخد
من ال synthesized تبع ال
dot node تبع ال root symbolبيأخد من الـSynthesis
تبع مين؟ الـRain Child يمجى راس الـ Tree أو الـ
Root تبع الـSyntax Tree كان بترحل down لغاية ما
وصلنا لل dead end بعدين بدأ يرجع عشان يرجع الـRoot
فالـRoot تبع الـSyntax Tree رجع للـRoot تبع الـتبع
.. تبع ال parse tree ال root تبع ال syntax tree
كان بترحل لتحت إلى أن وصلنا ال dead end بعد كده
رجع يترحل لفوق لصير .. يصل إلى اللي هو ال root تبع
ال parse tree
طبعا نحصل حظ احنا بس في الامتحان بنحل .. بنعمل
المثال هذا، انما في الواقع العملي ال compiler
generator هو اللي بيتولى الأمر هذا okay فهذا الآن
تطبيق لقولتنا اللي هو كيف تستخدم ال semantic rules
في بناء syntax tree شوفناها في حالتين حالة اللي هو
synthesized attributes اللي جاء كجزء من S
-attributed definition مبني على Grammar Grammar
هذه معاها جزء من ال L-attributed definition فهي
طريقة أخرى لبناء ال syntax tree نفس ال syntax tree
في القران مثل آخر اللي هو ال type ال types أو ال
type declarationsلما .. طبعا كل ال grammar اللي ..
ال grammar هذه اللي شوفناها احنا هذه ال
expressions ال E هدول expressions لكن لو البرنامج
بيحتوي على .. بيحتوي على type declaration type
declaration احنا لما بنحكي عن type declaration
يعني بنعرف variable متغير ونقيله type okay ف ال
type declaration عادة مثلا في ال C ديش بنقول
integer X صح؟فال declaration نفسها هي عبارة عن
type و identifier صح؟ يعني ال declaration can have
the format type مطبوعة بإيش؟ identifier مظبوط و
طبعا في الدراسين الفورية ال type هذا بهمني إذا هو
complex type يعني إيش complex type؟ يعني هنا basic
مثلا integer float أو كدهو في Complex اللي هو
array او structure او record او ما يعني بهمني اذا
هو Complex احسب شكلتيه اول اشي احسب ال size اللازم
يعني اذا هو array array of integer ال integer طوله
مثلا 4 byte وبالتالي 4 طيب ال array قداش عشر او
اتناش element اربعة في اتناش هي ال size اللي في ال
memory محتاجه صح؟840 بايت اربعة اتناش هذا يهمني
الشيء اللي هو ال size طبعا اذا كان ال array one
dimensional و لا two لا three لازم احسب بالظبط كده
ال size في ال frame برضه كذلك حال بدي احسب ايش بدي
احسب ال type تبع هذا ال complex type ايش ال type
تبع ال complex type لما انا بقول اشي زي هيكة انتجر
اتنين في تلاتة شو ال type ماهواش انتجر بس يعني لو
انا معرف
X هذا X، تمام؟ الـ X هذا، شو نوعه؟ هل هي integer؟
لأ، هي array of إتنين of array of تلاتة في إيش؟
تلاتة إيش؟ of integer، صحيح؟ تمام؟ هذا القرار مهم،
لأن أنا و أنا لما بدأ أقول مثلا X زائد Y Z بساوي X
زائد Yهل ال operation هذه تجبال متغير من هذا
النوع؟ لأ، صح؟ فأنا عملية ال type-checking فحص ال
type عساسي ال compiler يعترض أو ما يعترضش بلزم
أصلا تعريف ال type أصلا تحديد ال type عشان أقدر
أقارن هل هذا ال type هل ال type تبع X مقارنة
بالtype تبع Y؟ مظبوك ولا لا؟ فانا بالزمنيمن ال
declaration .. من ال declaration بالذبني ال
compiler يبقى قادر على شغل تاني قادر على حساب ال
size تبع ال type و حساب ال type نفسه تبع ال type
على أساس يقدر يقارن هل ال two variables هدول are
of the same type ولا لأ بالظبط فاحنا بنعبر عن ال
type على شكل اشي زيه يعني انا لما يكون في عندي
variable identifierبدا اقول ال type تبعه ايش
بالعبر عنه هل هو والله يعني ال variable هذا ال
identifier ال type تبعه ممكن يكون عبارة بس مجرد
integer ممكن يكون float هدولة basic صح ممكن يكون
array of اتنين integer او array of كذا integer
يعني هنا مثلا اتنين هدا احط مدالها in او arrayof
in of array of كذا و
some basic type يعني المهم احنا يكون عندي ال
compile قادر على انه يوصف ال type عشان يقدر يقارن
types فانا الآن لو عندي declaration
لو عندي declaration بدي grammar اول شي grammar
عشان فحص ال declaration من ناحية syntax هل هي
صحيحة ولا لأ و بدي معاها rules اتمكني من احسب ال
size و rules اتمكني من احسب ال type و هذا هو مفعول
ال grammar هذه ال grammar هذه بس لل type مش لل
size يعني ال dot T attribute
لاب تايب وجودها بنشوف حكاية ال size انا عندي هنا
ال grammar لتحديد ال syntax عشان يستخدم ال parser
في ال syntax analysis في ال parsing يعني ومعانا
هوز عشان يقدر يعطي ال dot T attribute قيمته فلو
انا عندي اللي هي نفس هذه ال .. قلنا ايش .. قلنا ..
integer 2x3 some variable x احنا الان مش معنين
بهذا و ال parsing تبقى معنين ناخد هذه احنا
متفقين ان ال declaration تنهي برقم T و identifier
و Synchrony هذه الآن افترض ان انا عندي ال input
هذاوانا الان بعمله parsing فهي D can have a form T
ويش identifier ويقسم a colon طبعا ال T هذا الان
بتعمله parsing على أساس هذا ال grammar فواضح ان هو
عبارة عن ايش اولا تقلع ال grammar ال grammar هذه
بتقول ان ال type هو عبارة عن basic متواجد ب
complex بس مش دايما فيه complex صح مش دايما فيه
complex يعني ممكنيبقى بس integer أو float بس عشان
هي كده ال complex هي دي فيها rule بتقول أه can
have the form epsilon okay فانا الآن عندي ال .. في
عندي basic O C ال basic عبارة عن N T and و ال
complex عبارة عن إيش في عندي هنا rule بتقولي can
have the form إيش goose بعدين number بعدين goose
بعدين complexو ال complex أنا فعلا فيه عندى هذا ال
number الان هو ال two عندى gross و num و gross و
عندى كمان ال c بس ال c هذه epsilon النم هذا هو
ثلاثة هذا ال parse ال three تبع هات نعم كيف؟
هذا ال parse ال three لأ خلاص احنا ال ID هنا Xهذا
الـ parse tree تبع الـ declaration الكل احنا ما
يعنينا هو الشق هذا اللي هو تبع الـ T نشوف انه كيف
ال rules بتحسب بتشكل تبع الـ T attribute تبع ال
type يعني
عمليا انا بدك تتخيل شيء اخر اللي هي انه في
productionال production هذه هي rule بتقوللي ان ال
ID dot type يساوي ال T dot type صح ولا لأ؟ لما انا
بدأ اسأل عن ال type تبع X باخد ال type تبع X من ال
type تبع ال declaration .. ال type .. ال type
declaration اللي قبل صح؟فهذه تحصيل حاصل فالسؤال هو
كيف هذه تاخد ال value تبعها من ال rules هذه اللي
بيصير ان احنا طبعا بمجرد ان تضح ال parsing تبع ال
P خلاص ال P ضبطش ضبطي
بيساوي integer
خشنا هنا الان ال C ال C ال C dot T بسوء ايش بسوء
array of اتنين من اين جيبناها الاتنين من هذا هذا
خلاص هذا معروف النم ان هو الاتنين ف صح اتنين of
ايش افتح دول ال C dot Tبس هو جداش نعرف لما ندخل
هنا الـ C هذه طبعاً C1 يعني child هذه الـ C parent
وهذه الـ C child الـ C1 تبحر تبحر تبحر تبحر
تبحر تبحر تبحر
الـ c.t بيساوي الـ c.b بيساوي الـ c.b بيساوي الـ c
.b بيساوي الـ c.b بيساوي الـ c.b بيساوي الـ c.b
بيساوي الـ c.b بيساوي الـ c.b بيساوي الـ c.b
بيساوي الـ c.جالي هذا برضه انه اعمل ال child تبعتك
ال c.b تبعته يساوي ايش ال c.b تبعت ال parent ليش
ال c.b تبعت ال parent تبعت ال parent اللي فوق برضه
جاي من ال c.b تبعت ال parent اللي فوق طب هذا ال c
.b تبعته وين اجده من ال T اللي ورا بمجرد ان انا
خشيت هنا هذه اترحلت ليه هيته هناالـ B Dot T اترحلت
من الـ sibling إلى هنا فهذه انتجر صح الـ Dot B
أخدت Dot T اللي هي انتجر وهذه اترحلت إلى هنا وهذه
اترحلت إلى هنا الآن بما أنه خلاص مافيش تشعر فهذه
ستترحل هنا صح ستصبح انتجر الآن في العودة الـ T هذه
بينها وين تروح؟ مظبوط؟ بيصير هذا of integer،
مظبوط؟ صح؟ لأن هذا ال T بيروح حال هنا اللي هو إيش؟
كله ال rate of تلاتة integer هذا
هيكل كلهبترحّى فوق الان هذا كله ال dot T هذا كله
هيك بيترحى ل وين صح هي في ال C dot T بيترحى ل ال T
dot T خلاص مانديش انا اساعدك مرة اخرى بس هذا
الكلام ده كله طبعا فيه جثين هنا مظبوط okay
ديبكي انا الان صار عندى آلية
لتحديد ال type attribute تبع ال declaration تبع أي
declaration complex ولا basic إذا هي basic ستبقى
على طول هذا على طول إذا هي complex سنتشعب إلى أن
ننتهي ننتهي لهذا و بعدين نرجع تشكل ال dot T من
التحت لأن هذا ال dot T تلقائيافي الـ rule هذه في
ال production هذه بتحط ال rule ان اتسلم له ال dot
T تبع ال identifier عشان يتحدد ال type تبعه هذا ال
dot T الان تلقاه برضه لازم يتسجل في مين؟ في ال
single table ال lexical analyzer اللي اكتشف ال
identifier اكتشفه بس مالوش علاقة بال type تبعه ال
parser لما بيعمل parsing و بيطبق ال ruleهو بيكتشف
ال type بروحله برمي ال أو بسجل هذه المعلومة في ال
symbol table علشان جدام تستخدم في إيش في ال
semantic analysis ال semantic اللي هو واحد من ال
semantic analysis actions اللي هي type checking
لنفحص مطابقة ال operands لل operations إذا عندي
plus operation هل ال operations ال type سبق منهم
equivalent ولا لأ هل إذا operations ولا إذا
function انت عارف ما هي ال function أصلا ممكن
تخيلهاالـ function لما انا بعمل function call ال
parameters تبعونها بقدر انا اتخيل ال function هذا
عبارة عن ك في syntax tree ك note وإلى تلاتة
children كل واحد من ال parameters دولة child okay
فانت بدك تتأكد ان ال function هذا أخدت upper head
كأنها function ودولها upper ends إليها okayأخذت
هذه الـ Apparence اللي تنوعها مطابق للنوع اللي في
ال declaration تبعها هي هذا برضه ال f عبارة عن
function ويلها type الها type output ويلها type
input okay
and هنا احنا بنكون وصلنا لنهاية من ال section خمس
تلاتة اللي هو موضوع ال syntax directed definitions
وشوفنا مقامة اللي عليها تطبيق اللي هو ال syntax
definitions ال syntax directed definitions في بناء
ال syntax tree وفي ال structure of a type في تحديد
ال structure of a type okay ال section خمسة أربعة
عشان مشابه لهذا الكلام في الآخر هو ده حكي عن
translation بس و syntax directed بس باستخدامSyntax
Directed Translation Schemes