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

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

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

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

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

تعريف اللغة

يمكن تعريف أي لغة باستخدام 4 مجموعات Tuples أساسية

1- الTerminal اختصاراً T و هي مجموعة من الحروف التي لا يمكن تقسيمها (الأبجدية) Alphabet

2- الNon Terminals اختصاراً N و هي مجموعة من الكلمات (المفردات) Vocabulary

3- الProduction Rules اختصاراً P و هي مجموعة القواعد (النحو) Grammar

4- الSubject اختصاراُ S و هو رمز البداية (الفاعل) Subject

1- الTerminal

و هو وحدة البناء الأساسية في اللغة أو كما قلنا هو الأبجدية (Alphabet) التي تتكون منه جميع المجموعات الأخرى و هو مالايمكن تقسيمه إلى أقسام أقل..

2- الnon Treminals

هو مجموعات من الterminals او الnon-terminal المتتالية التي تتبع قاعدة P فيتم تكوين non terminal و تعرف علمياً على الشكل التالي...

non-terminal ::= string of terminals and non-terminals

حيث العلامة =:: تعني "تُعرف على" is defined as

3- الProduction Rule

هي القواعد النحوية التي تُحدد كيف يتكون الnon-terminal من مجموعة terminals أو non-terminals

فالقاعدة السابقة

non-terminal ::= string of terminals and non-terminals

تعتبر Production Rule

4- الStarting Sybmbol

هو non-terminal مميز Distinguished و هو الذي يظهر على الجانب الجانب الأيسر من الProduction Rule التي تعرف من مجموعة من الTerminals فقط.... و هو أول non-terminal يجب أن يبدأ به البرنامج

بالطبع بعد المقدمة المملة السابقة قد لا تُكمل الدرس و لكن اصبر فالتالي أفضل...

ملحوظة: هناك اتفاق على أن الTerminals تكتب بالحروف الكبيرة (Capital Letters) و ال Non-Terminals تكتب بالحروف الصغيرة (Small Letters ) و هذا ما سنستخدمه نحن أيضاً

أنواع الProduction Rules

1- النوع الثالث Regular Production القواعد الاعتيادية

a ::= Av

حيث a هو الnon-terminal المُراد تعريفه

A هو Terminal

v هو sequence من الTerminals أو الnonterminals أو خليط منهم أو empty string (لاشئ)

و في الحالة الخاصة v = empty string يكون ال v = A أي ان الnon-terminal هو أساساً Terminal

2- النوع الثاني Context Free (Context Independent) السياق المستقل أو السياق الحُر

a ::= u

حيث الu هو non empty string من الterminals أو ال non-terminals

و في الحالة الخاصة اذا كانت u = Av يؤول النوع الثاني إلى النوع الثالث

3- النوع الأول Context Dependent أو السياق المُعتمد

xay ::= xuy

حيث ان ال x, y هما مجموعة من الterminals و الnon-terminals أو لاشئ

و في الحالة الخاصة اذا كان x , y كل منهما لاشئ يؤول النوع الأول إلى النوع الثاني

4- النوع صفر Phrase Structure Production

xay  ::= z

حيث الz هي أي string حتى الempty string

و يمكن تلخيص علاقة الأنواع السابقة معاً بالشكل التالي

Compiler02.jpg

فكما يتضح أن كل نوع هو تعميم للنوع السابق له و هكذا

بعد هذه الأسطر من الملل سنبدأ في جزء أكثر اثارة و هو ال BNF

Formal Description of A Language

الطريقة التي تستخدم في التعبير عن اللغات بشكل عام هي طريقة Backus Naur Form BNF و قد ظهرت لأول مرة في التعبير عن لغة ALGOL 60

و لها قواعد أساسية سنسردها الآن

1- العناصر التي تُكتب بالأحرف الصغير Lower Case تُمثل ال non-terminals

2- العناصر التي تُكتب بالأحرف الكبيرة Higher Case تُمثل ال Terminals

3- الأقواس المربعة [ ] تُمثل عناصر اختيارية

4- العلامة # تُمثل احتمال تكرار العناصر السابقة لها

5- العلامة | تستخدم في التعبير عن الLogical OR

6- الأقواس المعرجة { } تُمثل العناصر الإجبارية و التي يجب وجودها

7- العلامة =:: تمثل أن ال nonterminal على يسار العلامة مُعرف مباشرة من الterminals و الnon-terminals التي على يمين العلامة

8- العلامة <=:: تمثل ان الnon-terminal على يسار العلامة مُعرف بطريقة غير مباشرة عن طريق الterminals و الnon-terminals على يمين العلامة

كمثال على القواعد السابقة مثلاً طريقة كتابة الأمر DEL في الDOS و الذي يُستخدم في حذف الملفات

delete_command ::= DEL [path_descriptor] filename

و هنا يتم تعريف الnon-terminal المسمى delete_command بأنه الTerminal DEL متبوع بnon terminal اختياري و هو الpath متبوعاً بnon-terminal آخر و هو اسم الملف filename

و فيما يلي بعض الأمثلة على الBNF في التعبير عن المتغيرات المختلفة

identifier ::= letter [letter | digit]#

و كما نرى أن تعريف الIdentifier هو حرف متبوع بتكرار اختياري من الحروف و الأرقام

و فيما يلي مثال متقدم يشرح التعبير عن الثوابت المختلفة عن طريق مجموعة قواعد

numeric_constant ::= integer | real
integer ::= digit#
real ::= digit#.[digit#] | .digit#
digit ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

و للحديث بقية

ملحوظة: هذا الدرس ممل و لكن مهم ....

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#2

ممكن اخى الباش مهندس تجعل الامثلة على شكل لغة السى حتى نستوعب المثال

وياريت تسرع شوية فى اكمال الدرس انا نفسى اوصل الى الدرس العشرين

وممكن بس لو توضح كيف يتم بناء الجدول semplyl tabel

تم تعديل هذه المشاركة بواسطة hamada hassan ali في 15 سبتمبر 2005 في 21:47

_____________________________

C Language && Windwos_API

_____________________________

#3

هذه الأمثلة ليست بأي لغة برمجة و لكن هي لغة الBNF و هي أشهر لغة في وصف الSyntax و ستجدها في جميع كتب الCompilers

و اطمئن لن يظهر أي كود C او ++C حتى آخر الدروس

بالنسبة لبناء الSymbol Table فهو مجرد جدول يعني ممكن يكون Array of Structures أو Linked List أو Tree أو أي Data Structure يناسبك

يجب أن تُفرق بين المبادئ Concepts و التطبيق Implementation

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

تم تعديل هذه المشاركة بواسطة bashmohandes في 15 سبتمبر 2005 في 21:29

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#4

رائع أخى الباشمهندس

سلسلة دروس رائعه

و إلى الأمام

لا تراجع و لا إستسلام

#5

ممكن لو سمحت اعرف ماهو optimizer code وكيف يتم التعامل معه

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

_____________________________

C Language && Windwos_API

_____________________________

#6
hamada hassan ali كتب:
ممكن لو سمحت اعرف ماهو  optimizer code  وكيف يتم التعامل معه

مش فاهم انت عاوز تعرف ايه بالضبط؟؟؟ :blink:

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#7

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

هذا يعنى انه قوى وفى نفس الوقت اول مرة اسمع اسمه وعاوز اعرف هو ايه بالظبط

_____________________________

C Language && Windwos_API

_____________________________

#8

ما تطلبه تم شرج نبذة بسيطة عنه في الدرس السابق و سيتم شرحه بالتفصيل عندما يأتي وقته (و هو سيكون آخر موضوع سيتم شرحه )

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#9

باشمهندس ارجوك اسرع شويه انا متشوق اوى لباقيه هذا الدرس

_____________________________

C Language && Windwos_API

_____________________________

#10

اعجبنى الموضوع جدا والله يا باش مهندس انا معجب جدا باسلوبك الرائع فى القاء الدروس والرد على الاعضاء

ولكنى لى ملاحظمة

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

ونقوم بتحديد المسوليات

فانا اعانى من هذه اللغات رغم انى محترف سى ++

ولكنى امل منها احيانا

لما نصمم الفكرة دى وهى ( بناء مفسر )

وهذا لان المفسرات اسهل لانها تعتمد على المترجم الموجود

وقد قرات فى كتاب يسمى complete refrence in c++ 6

جزء خاص بما يسمى building the generic praser

ام المترجم فيعتمد على بناء انظمة ملفات خاصة به وهذا اصعب لماذا لاتفكرو فى الامر لنقوم بصنع شىء واحد فى حياتنا بدلا

من الكلام الكتير والدروس

وشكرا

تم تعديل هذه المشاركة بواسطة mido_c2003 في 20 سبتمبر 2005 في 11:36

#11
mido_c2003 كتب:
ام المترجم  فيعتمد على بناء  انظمة ملفات خاصة به  وهذا اصعب  لماذا  لاتفكرو فى الامر  لنقوم بصنع شىء واحد  فى حياتنا بدلا

من الكلام الكتير  والدروس

وشكرا

هقولك حاجه

إزاى هتعمل حاجه و أنت مش عارف تعملها إزاى؟

و إذا كنت أنت ملم بالموضوع فيه ناس تانيه عايزه الدروس دى علشان تفهم الحكايه

لا تراجع و لا إستسلام

#12

عزيزى باشمهندس

اخ mido_c2003

انت تتحدث وكانك فاهم كيفية بناء المفسرات ولكن انا ومعظم الاعضاء نعانى من بعض الامور كمثل كيف يصمم sempoly tabel

code generitor

praser

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

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

شكرا لك نتمنى مساعدتك اذا كنت تعرف ولو قليل عن هذا العلم

اخى باش مهندس اين انت

_____________________________

C Language && Windwos_API

_____________________________

#13

مستوى المنتدى الحالي

المنتدى لا يصلح لأي مشروع جماعي و لا حتى آلة حاسبة

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#14
hamada hassan ali كتب:
اخى باش مهندس  اين انت

أنا موجود و لكن مشغول في العمل و لكن بدأت في كابة الجزء الثاني من المرحلة الثانية و بمجرد أن أجد وقت لأنهيه سأنشره

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#15

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

اخى محمد

الدروس جميله جدا جدا كمل وربنا يوفقك

وجزاك الله خير

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

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