الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف تبني لغة برمجة (المرحلة الثانية)

مغلق
بدأه bashmohandes في 24 سبتمبر 2005 · 14 رد · 2,131 مشاهدة · في هندسة البرمجيات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

المرحلة الثانيةالجزء الثاني

الخصائص الخاصة لقواعد اللغة Special Grammar Features

1-الRecursion (الحقيقة لا أعرف ترجمتها بالعربية)

و هي أن تُعرف non-terminals بقواعد تحوي نفس الnon-terminal على الجانب الأيمن و لها حالتان

الأولى Direct Recusrion

u ::= ...u...

و الثانية Indirect Recusrion

u ::=> ...u....

و كمثال على الRecursion تعريف الList of Variables

list ::= [list,] variable

2- التضارب Ambiguity

عند وضع الGrammar الخاص باللغة يجب ان يوضع في الاعتبار أن لا يكون الGrammar متضارب أي تكون unambiguous حتى لا يتسبب الGrammar الخاطئ في استحالة الحصول على Compiler في النهاية...

مثال على الAmbiguity

1-exp ::= exp + exp
2- exp ::= exp * exp
3- exp ::= A | B | C

و هكذا لو أننا أدخلنا هذه الجملة على الCompiler

A + B * C

فإن الCompiler لن يستطيع أن يُقرر أي القاعدتين 1 , 2 سيستخدم أولاً فكلا القاعدتين تنطبق و لكنهما قاعدتين مختلفتين تؤدي إلى نتائج مختلفة أي أنه إذا استخدم الترتيب 1,2,3 سينتج

A + (B * C)

أما إذا استخدم الترتيب 2,1,3 سينتج

(A + B ) * C

و هذا سيؤدي في النهاية إلى نتيجتين متضاربتين...........

3- كيف تبني قاعدة لغة How To Build a Grammar Rule

أولاً

يجب وضع اتجاه تنفيذ العوامل في الإعتبار Operator Associativity

بمعنى ...

A + B * C

يجب أن يتم تطبيق B * C أولاً لأن العلامة * لها الأولوية Precedenceعلى عملية ال+ و هذا النوع من الoperator يسمى Left Associative

أيضاً

A ^ B ^ C حيث العلامة ^ هي علامة الأس

يجب أن تتطبق العلامة B^C أولاً ثم A ^ ( B ^ C) و هذا النوع يُسمى Right Associative

و هذا مثال يوضح ال Associativity و الPrecedence للMathematical Operations

( )
^ ~ Righ Associative
* / Left Associative
+ - Right Associative

حيث ال () هما الأعلى في الPrecedence و ماتحتهم أقل و العلامة ~ هي علامة الNegate أو السالب

و من هنا يمكن تعريف أي Mathematical Expression مهما بلغ تعقيده بالقواعد التالية

primary ::= U | (expression)
factor ::= primary ^ factor | ~factor | primary
term ::= term { * | / } | factor
expression ::= expression { + | - } term | term

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

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#2

السلام عليكم

الدرس رائع اخى

-----------------------------------------------------------------------------

لكن من الافضل ان تكون المرحلة التانية تشمل الجزء الاول والثانى والثالث معا

--------------------------------------------------------------------------------

بس انا طلبى شىء واحد >> جدول صغير ولو يمكن وضعه فى المرفقات : خطة الدروس ماذا سندرس واين سنتوقف

اما بالنسبة للدرس فلا يمكن الاستفسار لانه واضح

ومشكور اخى على مجهودك الرائع

انا فكرت فى فكرة :

ان اقوم ببناء قواعد للغة الخاصة بى

ويتم تحويلها للغة السى ووضعها فى ملف CPP.

ثم يتم ترجمة الملف من خلال مترجم الفيجوال سى++

طيب نفرض ان الجهاز لا يوجد به VC++6 اذن لم يترجم الملف

السوال هو كيف اجعل الملف يترجم من النظام ذاته او المترجم التابع للنظام

علما باننى بصمم مفسر للغة سى وليس مترجم وعلما باننى اقوم بالتصميم من مترجم VC++ 6

انا بس عاوز فكرة الترجمة لكن بناء القواعد والقارىء هذا سهل بالنسبة لى

وشكرا اخى باش مهندس

تم تعديل هذه المشاركة بواسطة hamada hassan ali في 25 سبتمبر 2005 في 10:24

_____________________________

C Language && Windwos_API

_____________________________

#3

اخى

الدروس لا يوجد بها اى غموض اقراء الدروس بالتسلسل ستراها واضحة الى حد ما هى غير مترابطة فى بعض الكلمات

لكن انا عن نفسى ارها كويسة

انظر هنا كود لمترجم يسمى :micro assembler

B- macro assembler.pdf

اخى باش مهندس ياريت خطة الدراسة انا نفسى اعرف حندرس ايه وما مكوات الدروس لو سمحت

وهل السى شارب يمكنها بناء مترجم

تم تعديل هذه المشاركة بواسطة hamada hassan ali في 26 سبتمبر 2005 في 07:53

_____________________________

C Language && Windwos_API

_____________________________

#4

اخى باش مهندس

لماذا تتاخر فى وضع الدروس

_____________________________

C Language && Windwos_API

_____________________________

#5

اخى باشمهندس

لو سمحت نت تتاخر بالدروس ممكن بس لو تضح خطة لدروس فى المرفقات او تنشر اى موضوع يهتم ببرمجة المفسرات

وياريت يكون الكلام كيف عمل الجداول وما شابه

انا ممكن اعمل جدول بس محتاج الفكرة الخاصة بالربط التحويل الى لغة الاسمبلى

وياريت لو يوجد رابط فعلى لمعالجات 32 بت او 16 بت ( الرابط يكون به الاكواد والتعليمات على طول مش روابط لروابط اخرى)

ممكن

وشكرا

تم تعديل هذه المشاركة بواسطة hamada hassan ali في 29 سبتمبر 2005 في 13:12

_____________________________

C Language && Windwos_API

_____________________________

#6

مش ناوي تكمل ولا ايه؟

لعلمك انا اتابع الموضوع .. ولا زلت - الى الان - انتظر التكملة (إن كانت موجودة)

و .... سيبك من اللي فات :P

#7

و الله يا جماعة أنا أحاول أن أحصل على ساعتين على بعض لاكمال الدروس و كتابتها بشكل مفهوم و لكن الدنيا لا ترحم..

على العموم أعدكم ان شاء الله أن أحاول الانتقال الى جزء أكثر عملية مثل شرح مبسط لادوات Lex & Yacc و وضع أمثلة لها

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#8

اخي باشمهندس نحن في إنتضار بقية درسك (فقد طال الإنتضار)

اخي هذا رابط كنت قد سئلت فية اسئلة مشابهة أتمنى ان تراه :

/index.ph...opic=78617&st=0

#9

انا فى انتظار باقى الدروس

ولكن كنت اريد ان اعرف كيف يتم عمل المفسرات بالظبط

وهذا الجروب على الياهو جديد ممكن نضيف اليه الملفات والكتب ليكون كل شىء امامنا ولا نبحث كثيرا

http://groups.yahoo.com/group/creat_compiler/

تم تعديل هذه المشاركة بواسطة hamada hassan ali في 29 أكتوبر 2005 في 17:49

_____________________________

C Language && Windwos_API

_____________________________

#10

اخى باش مهندس حتكمل الدروس امتى انا منتظر باقى لى زمن

_____________________________

C Language && Windwos_API

_____________________________

#11

بارك الله فيك يا محمد على الموضوع الرائع... لكني لا أجد رابط الجزء الأول منه... هل تضعه لنا في هذا الموضوع؟؟

شكراً لك..

رأس الحكمة الإيمان بالله

#12

المرحلة الأولى

المرحلة الثانية الجزء الأول

المرحلة الثانيةالجزء الثاني

و ان شاء الله bashmohandes يكمل علشان فعلا موضوع له كل الأحترام

و مششششككورررر اخ bashmohandes :lol: :lol: :lol: (h)

تم تعديل هذه المشاركة بواسطة TANNA في 31 أكتوبر 2005 في 17:03

365159135_b0fcd2be76_o.jpg

365163463_a76592857a.jpg
#13

شكراً يا طنه باشا..

على فكرة "فعلن" بتتكتب "فعلاً" :lol: :lol: :lol: فكرتني بـ "العلم نورن" :lol:

رأس الحكمة الإيمان بالله

#14

هل لدى الباشمهندس اى اعتراض ان اقوم بتنسيق الدروس على الجروب الخاص بى على الياهو بالترتيب وعرض الرابط بتاعه

http://groups.yahoo.com/group/creat_compiler/

واتمنى من كل الاعضاء الذين يطمحون الى بناء المترجمات

بزيارة الموقع والتسجيل به

تم تعديل هذه المشاركة بواسطة hamada hassan ali في 31 أكتوبر 2005 في 18:44

_____________________________

C Language && Windwos_API

_____________________________

هذا الموضوع مغلق.

مواضيع مشابهة