SlideShare a Scribd company logo
1 of 179
Download to read offline
AUTOMATA AND
COMPILER
‫محور‬‫االوتومات‬‫المترجمات‬ ‫و‬
12020
Content
■ Overview.
■ Automate.
■ Regular Expression.
■ Context Free Grammars.
■ Compiler.
■ MCQ.
22020
AUTOMATA
32020
Automata
■‫عن‬ ‫أمثلة‬‫األوتومات‬:
–‫القهوة‬ ‫بيع‬ ‫آلة‬ ‫في‬ ‫الموجود‬ ‫الحاسب‬
–‫اآللي‬ ‫الصراف‬ ‫في‬ ‫الموجود‬ ‫الحاسب‬ATM
■‫خدم‬ ‫لتنفيذ‬ ‫المفاتيح‬ ‫لوحة‬ ‫نستخدم‬ ‫ثم‬ ‫ومن‬ ً‫أوال‬ ‫البطاقة‬ ‫نضع‬ ‫اآللي‬ ‫الصراف‬ ‫في‬‫ة‬
(،‫مبلغ‬ ‫سحب‬ ،‫الرصيد‬ ‫عن‬ ‫االستعالم‬.)...
■‫معين‬ ‫بتسلسل‬ ‫األحداث‬ ‫من‬ ‫عدد‬ ‫لدينا‬ ‫يكون‬ ‫أي‬.
■‫مرة‬ ‫كل‬ ‫في‬ ‫التسلسل‬ ‫بنفس‬ ‫السير‬ ‫الضروري‬ ‫من‬ ‫ليس‬ ‫ولكن‬.
–ً‫مثال‬:‫الجا‬ ‫الحساب‬ ‫اختيار‬ ً‫دائما‬ ‫المفروض‬ ‫من‬ ‫ليس‬ ‫للصراف‬ ‫البطاقة‬ ‫ادخال‬ ‫بعد‬‫بل‬ ‫ري‬
‫وبالت‬ ‫لنا‬ ‫بالنسبة‬ ‫مقبولتان‬ ‫العمليتين‬ ‫فكال‬ ‫التوفير‬ ‫حساب‬ ‫اختيار‬ ‫ممكن‬‫يمكن‬ ‫الي‬
‫في‬ ‫مختلفين‬ ‫بفرعين‬ ‫الذهاب‬‫األتومات‬.
42020
Automata
■‫الرياضي‬ ‫التعريف‬‫لألوتومات‬:
■ M = ( Q , Σ , δ , q0 , F) were
– Q = { q0 , q1 , q2 , q3 } states
– Σ = { 0 , 1 } domain
– q0 = q0 initial state
– F = { q0 } end state
■‫االصفار‬ ‫عدد‬ ‫فيها‬ ‫يكون‬ ‫التي‬ ‫السالسل‬ ‫جميع‬ ‫يقبل‬ ‫المثال‬‫والواحدات‬‫زوجي‬.
52020
Different Kinds of Automata (Chomsky)
(‫القواعد‬ ‫لتوصيف‬ ‫وهرميتها‬ ‫اللغات‬ ‫أنواع‬)
1. Regular Languages: (‫المنتظمة‬ ‫)اللغات‬
– Definition Tool: Finite Automata ( ‫األوتومات‬‫المنتهي‬ )
– Memory Type: no temporary memory
– Ex: ATM, Search.
2. Context-Free Languages: (‫السياق‬ ‫عديمة‬ ‫)اللغات‬
– Definition Tool: Push down Automata (PDA) ( ‫األوتومات‬‫المكدس‬ ‫ذات‬ )
– Memory Type: stack
– Ex: Syntax recognition of a specific language, Identify the conditional (IF)
3. Recursive Languages:
– Definition Tool: Turing Machines
– Memory Type: random access memory (RAM)
– Ex: Recognize all languages regardless their form
62020
Finite Automata
■‫أنواع‬‫االوتومات‬‫المنتهي‬:Finite Automata
–‫االوتومات‬‫الحتمي‬ ‫المنتهي‬( :Deterministic finite automata DFA)
■‫هذا‬ ‫يحقق‬‫االوتومات‬‫حالة‬ ‫الى‬ ‫يكون‬ ‫معين‬ ‫رمز‬ ‫اجل‬ ‫ومن‬ ‫وحيدة‬ ‫حالة‬ ‫من‬ ‫االنتقال‬ ‫ان‬
‫محددة‬ ‫وحيدة‬.
–‫االوتومات‬‫المنتهي‬‫الالحتمي‬( :Non deterministic finite automata NFA)
■‫شرط‬ ‫يحقق‬ ‫ال‬ ‫الذي‬ ‫وهو‬‫االوتومات‬‫السابق‬.
■‫الرمز‬ ‫بنفس‬ ‫حالة‬ ‫من‬ ‫اكثر‬ ‫الى‬ ‫االنتقال‬ ‫نستطيع‬ ‫أي‬.
7
NFA2020
Finite Automata
■‫مالحظات‬:
–‫اجل‬ ‫من‬‫اوتومات‬‫نوع‬ ‫من‬DFA‫ما‬ ‫لسلسلة‬ ‫القبول‬ ‫خوارزمية‬ ‫بناء‬ ‫يمكن‬.
■‫تنتمي‬ ‫سلسلة‬ ‫كانت‬ ‫اذا‬ ‫معرفة‬ ‫خاللها‬ ‫من‬ ‫نستطيع‬ ‫التي‬ ‫الخوارزمية‬ ‫أي‬‫لالوتومات‬‫ا‬‫ال‬ ‫م‬.
–‫حالة‬ ‫في‬ ‫اما‬NFA‫قبول‬ ‫خوارزمية‬ ‫بناء‬ ‫يمكن‬ ‫فال‬.
■‫جدا‬ ‫مكلفة‬ ‫ولكنها‬ ‫تراجعية‬ ‫قبول‬ ‫خوارزمية‬ ‫بناء‬ ‫يمكن‬.
–‫على‬ ‫يبرهن‬NFA‫ل‬ ‫بتحويلها‬DFA‫لها‬ ‫مكافئ‬.
■‫لكل‬NFA‫هنالك‬DFA‫له‬ ‫مكافئ‬.
82020
Finite Automata
From NFA To DFA
92020
Finite Automata
From NFA To DFA
102020
Finite Automata
From NFA To DFA
112020
Finite Automata
ε-NFA
■‫االوتومات‬‫الالحتمي‬‫االنتقال‬ ‫مع‬‫ابسيلون‬
–‫مثال‬:
–‫هي‬ ‫االبجدية‬ ‫ان‬ ‫نعتبر‬:
■0 1 2 ε
122020
Notes
■‫من‬ ‫أنواع‬ ‫ثالثة‬ ‫هنالك‬‫األوتومات‬‫ومساوئه‬ ‫ميزاته‬ ‫له‬ ‫منها‬ ‫وكل‬:
–DFA
■‫المزايا‬:‫بسهولة‬ ‫تحقيقها‬ ‫يمكن‬ ‫بسيطة‬ ‫قبول‬ ‫خوارزمية‬ ‫له‬.
■‫المساوئ‬:‫لتصميمه‬ ‫كبير‬ ‫جهد‬ ‫إلى‬ ‫يحتاج‬.
–NFA
■‫المزايا‬:‫اإلنسان‬ ‫تفكير‬ ‫نمط‬ ‫من‬ ‫يقترب‬ ‫حيث‬ ‫التصميمية‬ ‫الناحية‬ ‫من‬ ‫أسهل‬.
■‫المساوئ‬:‫الط‬ ‫جميع‬ ‫اختبار‬ ‫يجب‬ ‫تراجعية‬ ‫خوارزمية‬ ‫فهي‬ ‫معقدة‬ ‫فيه‬ ‫القبول‬ ‫خوارزمية‬‫رق‬
‫ال‬ ‫أو‬ ‫مقبول‬ ‫طريق‬ ‫وجود‬ ‫من‬ ‫للتأكد‬ ‫فيها‬.‫ب‬ ‫استبداله‬ ‫الى‬ ‫نلجأ‬ ‫لذا‬DFA‫مقابل‬
–ε-NFA
■‫المزايا‬:‫أنواع‬ ‫أقرب‬‫األوتومات‬‫البشري‬ ‫للتفكير‬(‫ال‬ ‫من‬ ‫أقرب‬NFA)
■‫المساوئ‬:‫الى‬ ‫يحول‬ ‫لذلك‬ ‫أعقد‬ ‫فيه‬ ‫القبول‬ ‫خوارزميات‬NFA‫الى‬ ‫ثم‬DFA
132020
Question 1
■‫أعط‬‫األوتومات‬‫المكافئ‬ ‫الحتمي‬ ‫المنتهي‬‫لألوتومات‬‫المنتهي‬‫الالحتمي‬‫التالي‬:
142020
Question 1
■‫الجواب‬:
152020
REGULAR LANGUAGE
‫المنتظمة‬ ‫اللغات‬
162020
Regular Language
■‫النظامي‬ ‫التعبير‬:
–‫لتمثيل‬ ‫مختصرة‬ ‫مبسطة‬ ‫طريقة‬ ‫عن‬ ‫عبارة‬ ‫هو‬‫االوتومات‬‫معينة‬ ‫لغة‬ ‫يوصف‬ ‫الذي‬
‫من‬ ‫مجموعة‬ ‫على‬ ‫ويعتمد‬‫التراميز‬.
■‫المنتظمة‬ ‫اللغة‬:
–‫ب‬ ‫تمثيلها‬ ‫يمكن‬ ‫لغة‬ ‫كل‬ ‫هي‬RE‫ب‬ ‫ممثلة‬ ‫تكون‬ ‫عمليا‬ ‫أي‬DFA.
172020
Regular Language
■‫امثلة‬:
–‫االبجدية‬ ‫لدينا‬ ‫كانت‬ ‫اذا‬σ = {𝑎}‫النظامية‬ ‫التعابير‬ ‫من‬ ‫العديد‬ ‫بناء‬ ‫نستطيع‬:
■a‫واحد‬ ‫حرف‬ ‫من‬ ‫المؤلفة‬ ‫السلسلة‬ ‫يكافئ‬.
■ε‫الخالية‬ ‫السلسلة‬ ‫يكافئ‬.
■a*‫تكرار‬ ‫من‬ ‫المؤلفة‬ ‫السلسلة‬ ‫او‬ ‫الخالية‬ ‫السلسلة‬ ‫يكافئ‬a‫أو‬ ‫أكبر‬ ‫المرات‬ ‫من‬ ‫عدد‬
‫الواحد‬ ‫يساوي‬.
■a+‫تكرار‬ ‫من‬ ‫المؤلفة‬ ‫السلسلة‬ ‫يكافئ‬a‫الواحد‬ ‫يساوي‬ ‫أو‬ ‫أكبر‬ ‫المرات‬ ‫من‬ ‫عدد‬.
■an‫تكرار‬ ‫من‬ ‫المؤلفة‬ ‫السلسلة‬ ‫يكافئ‬a(n)‫فقط‬ ‫مرة‬.
–‫األبجدية‬ ‫لدينا‬ ‫كانت‬ ‫اذا‬σ = {𝑎,𝑏}‫المنتظمة‬ ‫التعابير‬ ‫من‬ ‫العديد‬ ‫بناء‬ ‫نستطيع‬:
■a*b*:‫عملية‬ ‫عن‬ ‫الناتجة‬ ‫السلسلة‬ ‫يكافئ‬concatenation‫أي‬).(‫نظاميين‬ ‫تعبيرين‬ ‫بين‬.
182020
Regular Language
■ L1 = { a*b* : a,b ∈ σ }
– L1 is regular language.
■ L2 = { anbn : a,b ∈ σ , n>=0}
– L2 is not regular language.
■‫اللغة‬ ‫ان‬ ‫نالحظ‬L2‫ير‬ ‫أن‬ ‫يجب‬ ‫مقبولة‬ ‫السلسة‬ ‫تكون‬ ‫حتى‬ ‫ألنه‬ ‫وذلك‬ ،‫ذاكرة‬ ‫الى‬ ‫تحتاج‬‫ى‬
b‫ورود‬ ‫مرات‬ ‫عدد‬ ‫بنفس‬a.
192020
Regular Language
■ L1, L2: Regular Languages then:
– L = L1 . L2 = { X.W were X ∈ L1 , W ∈ L2 } is Regular Language
– L1 ∪ L2 is Regular Language
– L1 , L2 is Regular Language
– L1 ∩ L2 is Regular Language
202020
Regular Expressions
Exercise 1
■ Suppose the only characters are 0 and 1.
■ A regular expression for strings containing 00 as a substring:
(0 | 1)* 00 (0 | 1)*
11011100101
0000
11111011110011111
212020
Regular Expressions
Exercise 2
■ Suppose the only characters are 0 and 1.
■ A regular expression for strings of length exactly four:
(0|1)(0|1)(0|1)(0|1)
(0|1){4}
0000
1010
1111
1000
222020
Regular Expressions
Exercise 3
■ Suppose the only characters are 0 and 1.
■ A regular expression for strings that contain at most one zero:
1*(0 | ε)1*
1*0?1*
11110111
111111
0111
0
232020
Regular Expressions
Exercise 4
■ Suppose that our alphabet is all ASCII characters.
■ A regular expression for even numbers:
(+|-)?(0|1|2|3|4|5|6|7|8|9)*(0|2|4|6|8)
(+|-)?[0123456789]*[02468]
(+|-)?[0-9]*[02468]
42
+1370
-3248
-9999912
242020
Regular Expressions
Exercise 5
■ Suppose that our alphabet is a, @, and ., where a represents “some letter”
■ regular expression for email addresses:
a+(.a+)*@a+(.a+)+
cs143@cs.stanford.edu
first.middle.last@mail.site.org
barack.obama@whitehouse.gov
252020
Regular Language & Automata
■‫التعبير‬(ab)‫مقابلته‬ ‫يمكن‬‫باالوتومات‬:
■‫التعبير‬(a + b)‫مقابلته‬ ‫يمكن‬‫باالوتومات‬:
262020
Regular Language & Automata
■‫التعبير‬(a*)‫مقابلته‬ ‫يمكن‬‫باالوتومات‬:
■‫التعبير‬(a+)‫مقابلته‬ ‫يمكن‬‫باالوتومات‬:
272020
Regular Language & Automata
■‫التعبير‬(θ)‫طريق‬ ‫وجود‬ ‫عدم‬ ‫عن‬ ‫تعبر‬(‫فارغة‬ ‫مجموعة‬ ‫هي‬ ‫الحلول‬ ‫مجموعة‬ ‫أي‬):
■‫التعبير‬(ε)‫رموز‬ ‫من‬ ‫رمز‬ ‫أي‬ ‫لوجود‬ ‫الحاجة‬ ‫دون‬ ‫عبره‬ ‫ننتقل‬ ‫مفتوح‬ ‫طريق‬ ‫وجود‬ ‫عن‬ ‫تعبر‬
‫االبجدية‬:
282020
Regular Language & Automata
Example numbers
■ Draw a DFA equivalent to the following regular expression:
1) digit = [0-9]
2) nat = digit+
3) signedNat = (+|-)? nat
4) number = signedNat ("." nat)? (E signedNat)?
292020
nat = digit+
Regular Language & Automata
Example numbers
302020
signedNat = (+|-)? nat
Regular Language & Automata
Example numbers
312020
signedNat ("." nat)?
Regular Language & Automata
Example numbers
322020
number = signedNat ("." nat)? (E signedNat)?
Regular Language & Automata
Example numbers
332020
Question 1
■‫التي‬ ‫اللغات‬ ‫هي‬ ‫ما‬‫توصفها‬‫األبجدية‬ ‫على‬ ‫المعرفة‬ ‫التالية‬ ‫المنتظمة‬ ‫التعابير‬{a,b}:
–a (a + b)* b
–aab (aa|bb)*
–(aa)* a
342020
Question 1
■‫التي‬ ‫اللغات‬ ‫هي‬ ‫ما‬‫توصفها‬‫األبجدية‬ ‫على‬ ‫المعرفة‬ ‫التالية‬ ‫المنتظمة‬ ‫التعابير‬{a,b}:
–a (a + b)* b
–aab (aa|bb)*
–(aa)* a
■‫الجواب‬:
–‫بالحرف‬ ‫كلماتها‬ ‫جميع‬ ‫تبدأ‬ ‫التي‬ ‫اللغة‬a‫بالحرف‬ ‫وتنتهي‬b
–‫بالسلسلة‬ ‫كلماتها‬ ‫جميع‬ ‫تبدأ‬ ‫التي‬ ‫اللغة‬aab‫األقل‬ ‫على‬ ‫واحد‬ ‫تكرار‬ ‫يليها‬ ‫ثم‬ ‫ومن‬
‫لثنائية‬aa‫من‬ ‫أو‬bb
–‫حرف‬ ‫على‬ ‫إال‬ ‫كلماتها‬ ‫تحتوي‬ ‫ال‬ ‫التي‬ ‫اللغة‬a‫مفردا‬ ‫كلماتها‬ ‫طول‬ ‫ويكون‬
352020
Question 2
■‫التالية‬ ‫اللغات‬ ‫تعرف‬ ‫أن‬ ‫يمكن‬ ‫التي‬ ‫المنتظمة‬ ‫التعابير‬ ‫هي‬ ‫ما‬:
–‫األبجدية‬ ‫على‬ ‫اللغة‬{a,b,c}‫بالحرف‬ ‫كلماتها‬ ‫جميع‬ ‫تبدأ‬ ‫والتي‬a
–‫مضاعفات‬ ‫من‬ ‫الصحيحة‬ ‫األعداد‬5
362020
Question 2
■‫التالية‬ ‫اللغات‬ ‫تعرف‬ ‫أن‬ ‫يمكن‬ ‫التي‬ ‫المنتظمة‬ ‫التعابير‬ ‫هي‬ ‫ما‬:
–‫األبجدية‬ ‫على‬ ‫اللغة‬{a,b,c}‫بالحرف‬ ‫كلماتها‬ ‫جميع‬ ‫تبدأ‬ ‫والتي‬a
–‫مضاعفات‬ ‫من‬ ‫الصحيحة‬ ‫األعداد‬5
■‫الجواب‬:
–a (a + b + c)*
–(0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9)* 5
372020
Pumping Lemma
(‫الضخ‬ ‫)توطئة‬
■‫لها‬ ‫الالزم‬ ‫والشرط‬ ‫المنتظمة‬ ‫اللغة‬ ‫بين‬ ‫رياضي‬ ‫تكافؤ‬ ‫عالقة‬ ‫تمثل‬
■ L is Regular ➔ ∃ n >= 0
∀ Z ∈ L |Z|>=n
∃ u, v, w : Z = u.v.w , |v|>=1 , |u.w|<=n
∀ i >= 0 u.vi.w ∈ L
■‫صحيح‬ ‫غير‬ ‫العكس‬ ‫ولكن‬ ‫الضخ‬ ‫توطئة‬ ‫تحقق‬ ‫حتما‬ ‫فهي‬ ‫منتظمة‬ ‫اللغة‬ ‫كانت‬ ‫إذا‬ ‫أي‬
382020
Pumping Lemma
(‫الضخ‬ ‫)توطئة‬
■‫يلي‬ ‫كما‬ ‫السابقة‬ ‫العالقة‬ ‫قراءة‬ ‫نستطيع‬:‫اللغة‬ ‫كانت‬ ‫إذا‬(L)‫ما‬ ‫تحقق‬ ‫حتما‬ ‫فهي‬ ‫منتظمة‬
‫يلي‬:
–‫ما‬ ‫ثابت‬ ‫هناك‬(n)،
–‫يساوي‬ ‫أو‬ ‫أكبر‬ ‫طولها‬ ‫التي‬ ‫السالسل‬ ‫جميع‬ ‫أن‬ ‫بحيث‬(n)
–‫إلى‬ ‫للتقسيم‬ ‫قابلة‬ ‫هي‬(3)‫أجزاء‬(u,v,w)‫بحيث‬(|v|>=1 , |u.w|<=n)
–‫التقسيمات‬ ‫هذه‬ ‫من‬ ‫األقل‬ ‫على‬ ‫واحد‬ ‫أسلوب‬ ‫من‬ ‫بد‬ ‫وال‬
–‫انتماء‬ ‫على‬ ‫يحافظ‬(Z)‫على‬ ‫الضخ‬ ‫بعد‬ ‫اللغة‬ ‫إلى‬(v)‫من‬ ‫عدد‬ ‫بأي‬ ‫تكرارها‬ ‫أي‬
‫المرات‬.
392020
Pumping Lemma
(‫الضخ‬ ‫)توطئة‬
■‫مثال‬:‫المنتظمة‬ ‫اللغة‬ ‫لدينا‬ ‫كانت‬ ‫إذا‬:
■ L2 = { a*b* : a,b ∈ σ }
■‫وليكن‬ ‫ما‬ ‫ثابت‬ ‫أجل‬ ‫من‬ ‫فإنه‬(n=6)‫من‬ ‫أكبر‬ ‫طولها‬ ‫التي‬ ‫السالسل‬ ‫جميع‬ ‫تحقق‬ ‫أن‬ ‫يجب‬
(n)‫أي‬(Z ∈ L were |Z|>=6)‫السالسل‬ ‫هذه‬ ‫إحدى‬ ‫على‬ ‫وكمثال‬ ‫السابق‬ ‫الشروط‬:
■ z = aaabbb
■ u = aaa u.vi.w = aaa b….b bb ∈ L
■ v = b
■ w = bb i times
■‫السالسل‬ ‫كافة‬ ‫أجل‬ ‫من‬ ‫نبرهن‬ ‫لم‬ ‫ألننا‬ ‫برهانا‬ ‫يمثل‬ ‫ال‬ ‫السابق‬ ‫الكالم‬.
■‫القسم‬ ‫كررنا‬ ‫مهما‬ ‫اننا‬ ‫أي‬(v)‫للغة‬ ‫تنتمي‬ ‫الناتجة‬ ‫السلسلة‬ ‫تبقى‬ ‫سوف‬(L2)
402020
Pumping Lemma
(‫الضخ‬ ‫)توطئة‬
■‫الضخ؟‬ ‫توطئة‬ ‫فكرة‬ ‫من‬ ‫نستفيد‬ ‫أن‬ ‫الممكن‬ ‫من‬ ‫كيف‬
–‫انفسنا‬ ‫على‬ ‫نوفر‬ ‫حتى‬ ‫منتظمة‬ ‫غير‬ ‫لغة‬ ‫هي‬ ‫ما‬ ‫لغة‬ ‫أن‬ ‫برهان‬ ‫في‬ ‫منها‬ ‫نستفيد‬
‫الى‬ ‫اللغة‬ ‫هذه‬ ‫تحويل‬ ‫محاولة‬ ‫عملية‬(DFA)
■‫اللغة‬ ‫أن‬ ‫على‬ ‫الضخ‬ ‫توطئة‬ ‫خالل‬ ‫من‬ ‫نبرهن‬ ‫كيف‬(L)‫منتظمة؟‬ ‫ليست‬
–‫السابقة‬ ‫العالقة‬ ‫نفي‬ ‫خالل‬ ‫من‬ ‫ذلك‬ ‫يتم‬:
■ ∀ n >= 0
■ ∃ Z ∈ L |Z|>=n L is not regular
■ ∀ u, v, w : Z = u.v.w , |v|>=1 , |u.w|<=n
■ ∃ i >= 0 u.vi.w ∉ L
412020
Pumping Lemma
(‫الضخ‬ ‫)توطئة‬
■‫التالي‬ ‫بالشكل‬ ‫العالقة‬ ‫هذه‬ ‫وتقرأ‬:‫اللغة‬ ‫تمثل‬(L)‫ما‬ ‫تحقق‬ ‫إذا‬ ‫وفقط‬ ‫إذا‬ ‫منتظمة‬ ‫غير‬ ‫لغة‬
‫يلي‬:
–‫ثابت‬ ‫أي‬ ‫أجل‬ ‫من‬(n>=0)‫يكون‬ ‫بحيث‬ ‫اللغة‬ ‫من‬ ‫األقل‬ ‫على‬ ‫واحدة‬ ‫سلسلة‬ ‫هناك‬
(|z|>=n)‫إلى‬ ‫للتقسيم‬ ‫قابلة‬ ‫السلسلة‬ ‫هذه‬ ‫تكون‬ ‫بحيث‬(3)‫سالسل‬ ‫أي‬ ‫أجزاء‬
(u,v,w)‫بحيث‬(|v|=1 , |u.w|<=n)
–‫ما‬ ‫ثابت‬ ‫هناك‬ ‫يكون‬ ‫أي‬ ‫يجب‬ ‫به‬ ‫التقسيم‬ ‫يتم‬ ‫أسلوب‬ ‫أي‬ ‫أجل‬ ‫ومن‬(i)‫على‬ ‫يحافظ‬ ‫ال‬
‫على‬ ‫نضخ‬ ‫عندما‬ ‫اللغة‬ ‫إلى‬ ‫السلسلة‬ ‫انتماء‬(v)‫أي‬:∃ i >= 0 u.vi.w ∉ L
422020
Pumping Lemma
(‫الضخ‬ ‫)توطئة‬
■‫مثال‬:‫أن‬ ‫على‬ ‫نبرهن‬ ‫كيف‬ ،‫التالية‬ ‫اللغة‬ ‫لدينا‬ ‫كانت‬ ‫اذا‬(L)‫منتظمة‬ ‫غير‬:
■ L2 = { anbn : a,b ∈ σ , n>=0}
■‫يكن‬ ‫مهما‬(n>=0)‫يساوي‬ ‫أو‬ ‫أكبر‬ ‫طولها‬ ‫سلسلة‬ ‫هناك‬ ‫فإن‬(n)‫الشكل‬ ‫لها‬ ‫بحيث‬:
■ aaa……….a bbb ……….b
■‫كانت‬ ‫فإذا‬(v=a+)‫كانت‬ ‫إذا‬ ‫وكذلك‬ ‫الشرط‬ ‫يكسر‬ ‫عليها‬ ‫الضخ‬ ‫فإن‬(v=b+)‫كانت‬ ‫أو‬(v=a+b+)‫هي‬ ‫وهذه‬
‫ل‬ ‫الممكنة‬ ‫الحاالت‬ ‫جميع‬(v)
■‫اخر‬ ‫بمعنى‬ ‫أي‬:‫الت‬ ‫بالحاالت‬ ‫عام‬ ‫بشكل‬ ‫حصرها‬ ‫يمكن‬ ‫السلسلة‬ ‫لهذه‬ ‫الممكنة‬ ‫التقسيمات‬ ‫جميع‬ ‫إن‬‫الية‬:
.1(v)‫تحوي‬(a)‫و‬(b)‫عدد‬ ‫يكن‬ ‫مهما‬(a)‫وعدد‬(b)
.2(v)‫تحوي‬(a)‫العدد‬ ‫يكن‬ ‫مهما‬ ‫فقط‬
.3(v)‫تحوي‬(b)‫العدد‬ ‫يكن‬ ‫مهما‬ ‫فقط‬
■‫على‬ ‫الضخ‬ ‫عند‬ ‫السابقة‬ ‫الثالث‬ ‫الحاالت‬ ‫أج‬ ‫من‬ ‫أنه‬ ‫ونالحظ‬(v)‫وبالتالي‬ ،‫للغة‬ ‫تنتمي‬ ‫ال‬ ‫السلسلة‬ ‫تصبح‬
‫منتظمة‬ ‫غير‬ ‫اللغة‬ ‫تكون‬.
432020
Pumping Lemma
(‫الضخ‬ ‫)توطئة‬
■‫مثال‬2:‫ان‬ ‫حيث‬ ‫منتظمة‬ ‫غير‬ ‫لغة‬ ‫انها‬ ‫برهن‬ ،‫التالية‬ ‫اللغة‬ ‫لدينا‬ ‫كانت‬ ‫اذا‬(XR)‫هي‬
‫السلسلة‬ ‫معكوس‬(X)
■ L2 = { X XR : X ∈ (0+1)+}
■‫مالحظة‬:‫السلسلة‬ ‫معكوس‬(1)‫السلسة‬ ‫قراءة‬ ‫عن‬ ‫الناتجة‬ ‫السلسلة‬ ‫هي‬(1)‫باالتجاه‬
‫العاكس‬
■‫الحل‬:‫يكن‬ ‫مهما‬(n>=0)‫يساوي‬ ‫أو‬ ‫أكبر‬ ‫طولها‬ ‫سلسلة‬ ‫هناك‬ ‫فإن‬(n)‫الشكل‬ ‫ولها‬(X XR)
‫الحاالت‬ ‫تحت‬ ‫تنطوي‬ ‫الممكنة‬ ‫التقسيمات‬ ‫جميع‬ ‫فإن‬ ‫وعليه‬:
.1‫كانت‬ ‫إذا‬(v)‫من‬ ‫جزء‬(X)‫على‬ ‫الضخ‬ ‫فإن‬(v)‫الشرط‬ ‫يكسر‬
.2‫كانت‬ ‫إذا‬(v)‫من‬ ‫جزء‬(XR)‫على‬ ‫الضخ‬ ‫فإن‬(v)‫الشرط‬ ‫يكسر‬
.3‫كانت‬ ‫إذا‬(v)‫من‬ ‫جزء‬(X)‫من‬ ‫وجزء‬(XR)‫على‬ ‫الضخ‬ ‫فإن‬(v)‫الشرط‬ ‫يكسر‬
■‫اللغة‬ ‫وبالتالي‬(L)‫منتظمة‬ ‫غير‬
442020
Pumping Lemma
Proof (‫العالقة‬ ‫)برهان‬
■‫المنتظمة‬ ‫اللغة‬ ‫نقسم‬ ‫أننا‬ ‫هو‬ ‫نفعله‬ ‫ما‬(‫ال‬DFA)‫أقسام‬ ‫ثالثة‬ ‫إلى‬(u, v, w)‫أن‬ ‫أي‬:
–‫الجزء‬(u)‫جزء‬ ‫عن‬ ‫يعبر‬‫األوتومات‬‫الحلقة‬ ‫قبل‬(‫اللفة‬.)
–‫الجزء‬(v)‫الحلقة‬ ‫عن‬ ‫يعبر‬.
–‫الجزء‬(w)‫جزء‬ ‫عن‬ ‫يعبر‬‫األوتومات‬‫الحلقة‬ ‫بعد‬.
■‫الحلقة‬ ‫كررنا‬ ‫مهما‬ ‫أنه‬ ‫نبرهن‬ ‫أن‬ ‫استطعنا‬ ‫فإذا‬(v)‫من‬ ‫ألغيناها‬ ‫أو‬‫األوتومات‬‫أي‬(v0)‫سوف‬
‫تنتمي‬ ‫السلسلة‬ ‫تبقى‬‫لألوتومات‬‫ال‬ ‫ألن‬ ‫وذلك‬ ‫منتظمة‬ ‫لغة‬ ‫هي‬ ‫اللغة‬ ‫هذه‬ ‫تكون‬ ‫فسوف‬‫حلقة‬
‫فيها‬ ‫تؤثر‬ ‫لم‬
–‫يؤثر‬ ‫لن‬ ‫ذلك‬ ‫ألن‬ ‫الحلقة‬ ‫هذه‬ ‫في‬ ‫مرورنا‬ ‫مرات‬ ‫عدد‬ ‫لمعرفة‬ ‫ذاكرة‬ ‫إلى‬ ‫نحتاج‬ ‫لن‬ ‫أننا‬ ‫أي‬
‫مثل‬ ‫انتمائها‬ ‫عدم‬ ‫أو‬ ‫للغة‬ ‫السلسلة‬ ‫انتماء‬ ‫على‬a*b*
■‫منتظمة‬ ‫اللغة‬ ‫هذه‬ ‫تكون‬ ‫فلن‬ ‫اللغة‬ ‫في‬ ‫تؤثر‬ ‫الحلقة‬ ‫كانت‬ ‫إذا‬ ‫أنه‬ ‫نجد‬ ‫وبالعكس‬
–‫مثل‬ ‫ذاكرة‬ ‫الى‬ ‫نحتاج‬ ‫أن‬ ‫الممكن‬ ‫من‬ ‫أننا‬ ‫أي‬anbn
452020
Pumping Lemma
(‫الضخ‬ ‫)توطئة‬
■‫منت‬ ‫لغة‬ ‫ليست‬ ‫ما‬ ‫لغة‬ ‫أن‬ ‫لبرهان‬ ‫حصرا‬ ‫المنتظمة‬ ‫اللغات‬ ‫في‬ ‫الضخ‬ ‫توطئة‬ ‫تستخدم‬،‫ظمة‬
‫منتظمة‬ ‫لغة‬ ‫أن‬ ‫لبرهان‬ ‫استعمالها‬ ‫يمكن‬ ‫وال‬.
462020
CONTEXT FREE
GRAMMARS
‫السياق‬ ‫عديمة‬ ‫اللغات‬(‫السياق‬ ‫خارج‬)
472020
Context Free Grammars
(‫السياق‬ ‫عديمة‬ ‫)اللغات‬
■‫القواعدي‬ ‫النموذج‬ ‫مفهوم‬:
–‫ال‬ ‫مفهوم‬ ‫من‬ ‫تطورا‬ ‫أكثر‬ ‫مفهوم‬ ‫هو‬DFA‫هو‬ ‫اللغات‬ ‫من‬ ‫بسيط‬ ‫نمط‬ ‫عن‬ ‫يعبر‬ ‫الذي‬
‫النمط‬ ‫هذا‬ ‫تعدي‬ ‫يستطيع‬ ‫وال‬ ‫المنتظمة‬ ‫اللغات‬.
–‫ال‬ ‫يعد‬ ‫وبالتالي‬DFA‫قاصرا‬‫تحمل‬ ‫التي‬ ‫اللغات‬ ‫تمثيل‬ ‫عن‬‫ذاكرة‬‫الى‬ ‫نلجأ‬ ‫وبالتالي‬
‫اللغات‬ ‫من‬ ‫النوع‬ ‫هذا‬ ‫لتمثيل‬ ‫القواعدي‬ ‫النموذج‬.
■‫السياق‬ ‫عديمة‬ ‫اللغات‬ ‫اذا‬:
–‫من‬ ‫جديد‬ ‫نوع‬‫االوتومات‬
–‫بذاكرة‬ ‫مزود‬
■‫ذاكرة‬ ‫الى‬ ‫تحتاج‬ ‫لغات‬ ‫تمثيل‬ ‫يستطيع‬
■‫النمط‬ ‫من‬ ‫السالسل‬ ‫مثل‬(anbn)
■‫هذا‬ ‫ان‬ ‫حيث‬‫االوتومات‬‫الرموز‬ ‫اعداد‬ ‫يتذكر‬(a,b)‫عليه‬ ‫مرت‬ ‫التي‬
482020
Context Free Grammars
(‫السياق‬ ‫عديمة‬ ‫)اللغات‬
■ Non Terminal Symbols (V):
–‫السالسل‬ ‫توليد‬ ‫عملية‬ ‫على‬ ‫تساعد‬ ‫التي‬ ‫البسيطة‬ ‫الحروف‬ ‫من‬ ‫مجموعة‬ ‫تمثل‬(‫أي‬
‫المساعدة‬ ‫التوابع‬ ‫من‬ ‫مجموعة‬.)
■ Terminal Symbols (T):
–‫اللغة‬ ‫سالسل‬ ‫منها‬ ‫تتألف‬ ‫التي‬ ‫الحروف‬ ‫من‬ ‫تتكون‬ ‫التي‬ ‫االبجدية‬ ‫تؤلف‬.
■ Production (P):
–‫اللغة‬ ‫توليد‬ ‫قواعد‬ ‫هو‬.
■ Starting Symbol (S):
–‫اللغة‬ ‫توليد‬ ‫عملية‬ ‫في‬ ‫منه‬ ‫تبدأ‬ ‫الذي‬ ‫البدائي‬ ‫الرمز‬.
492020
Context Free Grammars
Example 1
■‫للغة‬ ‫القواعدي‬ ‫النموذج‬ ‫اوجد‬:
– L = { anbn : a,b ∈ σ , n>=0}
■‫الحل‬:
– L = {V , T , S , P} where
■ S → a S b (1)
■ S → a b (2)
– V = {S}
– S = {S}
– T = {a,b}
502020
Context Free Grammars
Example 2
■‫اللغة‬ ‫لدينا‬ ‫ليكن‬L‫بالشكل‬ ‫اللغة‬ ‫هذه‬ ‫تعريف‬ ‫نستطيع‬ ،‫الحسابية‬ ‫للتعابير‬ ‫الممثلة‬
‫التالي‬ ‫القواعدي‬:
– Exp → Exp Op Exp | ( Exp ) | id
– Op → + | - | * | /
■‫الحل‬:
– V = {Exp, Op}
– T = { + , - , / , id , ( , ) }
– S = {Exp}
512020
Context Free Grammars
Left Most Derivation
■ Exp → Exp Op Exp | ( Exp ) | id
■ Op → + | - | * | /
■‫التالية‬ ‫السلسلة‬ ‫نشتق‬ ‫كيف‬:id + id * id
–‫ال‬ ‫نعوض‬(None Terminal Symbol)‫وهكذا‬ ‫أوال‬ ‫اليسار‬ ‫اقصى‬ ‫في‬ ‫الموجود‬..
–‫التالية‬ ‫المراحل‬ ‫عبر‬ ‫ذلك‬ ‫يتم‬:
■ Exp → Exp Op Exp
→ id Op Exp
→ id + Exp
→ id + Exp Op Exp
→ id + id Op Exp
→ id + id * Exp
→ id + id * id
522020
Context Free Grammars
Right Most Derivation
■ Exp → Exp Op Exp | ( Exp ) | id
■ Op → + | - | * | /
■‫على‬ ‫مبدؤها‬ ‫ينطوي‬ ‫االشتقاق‬ ‫في‬ ‫أخرى‬ ‫خوارزمية‬ ‫هنالك‬:
■‫ال‬ ‫تعويض‬(None Terminal Symbol)‫وهكذا‬ ‫أوال‬ ‫اليمين‬ ‫اقصى‬ ‫في‬ ‫الموجود‬...
■ Exp → Exp Op Exp
→ Exp Op id
→ Exp * id
→ Exp Op Exp * id
→ Exp Op id * id
→ Exp + id * id
→ id + id * id
532020
Context Free Grammars
Ambiguity
■‫هي‬ ‫السابق‬ ‫المثال‬ ‫في‬ ‫اللغة‬ ‫ان‬ ‫على‬ ‫نالحظ‬‫غامضة‬ ‫لغة‬
–‫نفس‬ ‫الشتقاق‬ ‫طريقتين‬ ‫هنالك‬ ‫االشتقاق‬ ‫خوارزمية‬ ‫نفس‬ ‫أجل‬ ‫من‬ ‫ألنه‬ ‫وذلك‬
‫قابلية‬ ‫مع‬ ‫يتناسب‬ ‫ال‬ ‫الغموض‬ ‫وهذا‬ ‫السلسلة‬‫االوتومات‬‫البرمجي‬ ‫لإلسقاط‬.
542020
Parse Tree Example
(number – number ) * number
exp  exp op exp
 exp op number
 exp * number
 ( exp ) * number
 ( exp op exp ) * number
 ( exp op number ) * number
 ( exp – number ) * number
 (number – number ) * number
552020
Abstract Syntax Trees
■ A parse tree contains much more information than is necessary for a compiler to
produce executable code.
■ Syntax trees contain just the information needed for translation.
562020
Abstract Syntax Trees
Example
■ Show the Parse and Syntax Trees of the derivation of the string 3 + 4 using the
grammar.
exp → exp op exp | ( exp ) | number
op → + | - | * | /
Parse Tree Syntax Tree 572020
Context Free Grammars
Ambiguity Example
■ Example 1 The Grammar
– exp → exp op exp | ( exp ) | number
– op → + | - | * | /
■ and the string: 34 – 3 * 42
582020
Context Free Grammars
Ambiguity Example
■ exp  exp op exp
 exp op exp op exp
 number op exp op exp
 number - exp op exp
 number - number op exp
 number - number * exp
 number - number * number
■ The expression evaluates to (34-3)*42 = 1302 !
59
Parse Tree
Abstract Syntax Tree
2020
Context Free Grammars
Ambiguity Example
■ exp  exp op exp
 number op exp
 number - exp
 number - exp op exp
 number - number op exp
 number - number * exp
 number - number * number
■ The expression evaluates to 34-(3*42) = - 92
60
Parse Tree
Abstract Syntax Tree
2020
Context Free Grammars
Dealing with ambiguity
■ Disambiguating rules : state a rule that specifies in each ambiguous case which of
the parse trees (or syntax trees) is the correct one.
– Advantage: it corrects the ambiguity without changing the grammar.
– Disadvantage: syntax is no longer given by the grammar alone.
■ Changing the grammar into a form that forces the construction of the correct parse
tree.
612020
Left-Recursion Removal
A → A α | β β does not begin with A
A → β is the base case
A → A α is the recursive case
A → β A'
A' → α A' | ε
exp → term exp'
exp' → addop term exp' | ε
To remove the recursion we re-write the rule :
Example
exp → exp addop term | term
622020
COMPILER
‫المترجم‬
632020
Compiler Definition
■‫المترجم‬ ‫تعريف‬:
–‫المترجم‬ ‫ندعوها‬ ،‫البرمجة‬ ‫عملية‬ ‫في‬ ‫جدا‬ ‫ضرورية‬ ‫أداة‬ ‫المبرمج‬ ‫يستخدم‬.
–‫الم‬ ‫عالية‬ ‫برمجية‬ ‫بلغة‬ ‫نكتبه‬ ‫الذي‬ ‫البرمجي‬ ‫النص‬ ‫يترجم‬ ‫حاسوبي‬ ‫برنامج‬ ‫هو‬‫ستوى‬
(C, Pascal, C++, C#, Java, …)‫قبل‬ ‫من‬ ‫للتنفيذ‬ ‫قابلة‬ ‫تعليمات‬ ‫مجموعة‬ ‫الى‬
‫الحاسوب‬.
–‫كانت‬ ‫سواء‬ ‫المستوى‬ ‫منخفضة‬ ‫بلغة‬ ‫مكتوبة‬ ‫التنفيذية‬ ‫التعليمات‬ ‫هذه‬ ‫تكون‬‫ثنائية‬ ‫لغة‬
‫و‬ ‫اصفار‬ ‫من‬ ‫مؤلفة‬‫واحدات‬‫تجميع‬ ‫لغة‬ ‫او‬(Assembly.)
–‫المستو‬ ‫عالية‬ ‫أخرى‬ ‫لغة‬ ‫الى‬ ‫المستوى‬ ‫عالية‬ ‫لغة‬ ‫من‬ ‫مترجمات‬ ‫بناء‬ ‫أيضا‬ ‫يمكن‬‫ى‬.
(‫البرمجية‬ ‫البيئة‬ ‫تغيير‬)
■‫المصدري‬ ‫البرنامج‬ ‫تعريف‬(Source Program:)
–‫حاسوبي‬ ‫برنامج‬ ‫تؤلف‬ ‫التي‬ ‫البرمجية‬ ‫النصوص‬ ‫مجموعة‬.
642020
Compiler Definition
■‫واحد‬ ‫بأن‬ ‫اثنين‬ ‫بعنصرين‬ ‫تتعلق‬ ‫المترجم‬ ‫بناء‬ ‫عملية‬ ‫إن‬:
–‫المبرمج‬ ‫يستخدمها‬ ‫الذي‬ ‫المستوى‬ ‫عالية‬ ‫المصدرية‬ ‫البرمجة‬ ‫لغة‬.
–‫عليه‬ ‫البرنامج‬ ‫تشغيل‬ ‫سيجري‬ ‫الذي‬ ‫التشغيل‬ ‫نظام‬.
■‫مثال‬:
–‫لغة‬ ‫مترجم‬ ‫يختلف‬C++‫نظام‬ ‫على‬ ‫يعمل‬ ‫الذي‬windows‫لغة‬ ‫مترجم‬ ‫عن‬C++‫الذي‬
‫نظام‬ ‫على‬ ‫يعمل‬Linux‫ف‬ ‫مختلفة‬ ‫تنفيذية‬ ‫تشغيل‬ ‫تعليمات‬ ‫توليد‬ ‫لضرورة‬ ‫نظرا‬ ،‫ي‬
‫اللغة‬ ‫نفس‬ ‫عن‬ ‫نتكلم‬ ‫اننا‬ ‫من‬ ‫بالرغم‬ ،‫الحالتين‬ ‫هاتين‬.
–‫لغة‬ ‫مترجم‬ ‫يختلف‬C++‫لغة‬ ‫مترجم‬ ‫عن‬Pascal‫يعمالن‬ ‫المترجمان‬ ‫كان‬ ‫ولو‬ ‫حتى‬
‫نظام‬ ‫على‬Windows‫مختلفتين‬ ‫برمجيتين‬ ‫لغتين‬ ‫نترجم‬ ‫اننا‬ ‫نظرا‬ ،.
652020
Compiler Structure
662020
Compiler Structure
■‫أساسيتين‬ ‫مرحلتين‬ ‫من‬ ‫الترجمة‬ ‫عملية‬ ‫تتألف‬:
.1‫التحليل‬ ‫مرحلة‬(Analysis Phase:)
■‫ودالالتها‬ ‫صحتها‬ ‫من‬ ‫والتأكد‬ ‫وجمل‬ ‫كلمات‬ ‫الى‬ ‫البرمجي‬ ‫النص‬ ‫تقسيم‬ ‫فيها‬ ‫يجري‬.
.2‫التركيب‬ ‫مرحلة‬(Synthesis Phase:)
■‫أخرى‬ ‫بلغة‬ ‫ولكن‬ ‫المصدري‬ ‫النص‬ ‫داللة‬ ‫بنفس‬ ‫جديد‬ ‫برمجي‬ ‫نص‬ ‫تركيب‬ ‫فيها‬ ‫يجري‬
‫التشغيل‬ ‫نظام‬ ‫يفهمها‬.
672020
Compiler Structure
Analysis Phase (‫التحليل‬ ‫)مرحلة‬
682020
Natural Language Translation
69
The hungry teacher is eating a banana and reading a book
The hungry teacher is eating a book and reading a banana
The hungry teacher are eat a book and reading an banana
Teh mungry teamher are eak a mook and seading an banban
Check for and correct LEXICAL
(spelling) errors
Check for and correct SYNTACTIC
(grammar) errors
Check for and correct SEMANTIC
(meaning) errors
TRANSLATE
‫يأكل‬ ‫الجائع‬ ‫األستاذ‬‫موزة‬‫كتاب‬ ‫ويقرأ‬
2020
Compiler Structure
Analysis Phase (‫التحليل‬ ‫)مرحلة‬
■‫خطوات‬ ‫ثالث‬ ‫تحوي‬ ‫التحليل‬ ‫مرحلة‬:
.1‫او‬ ‫اللفظي‬ ‫التحليل‬‫المفرداتي‬:
■‫ال‬ ‫ام‬ ‫البرمجة‬ ‫لغة‬ ‫في‬ ‫موجودة‬ ‫الكلمة‬ ‫كانت‬ ‫ما‬ ‫اذا‬ ‫معرفة‬ ‫أي‬.
.2‫القواعدي‬ ‫التحليل‬:
■‫ال‬ ‫على‬ ‫التعرف‬ ‫أي‬syntax‫المحكية‬ ‫اللغات‬ ‫في‬ ‫كما‬ ‫اللغة‬ ‫كتابة‬ ‫قواعد‬ ‫أي‬ ،.
■‫مثال‬:
–‫يأتي‬ ‫ان‬ ‫يجب‬ ‫العربية‬ ‫اللغة‬ ‫في‬(‫فعل‬–‫فاعل‬–‫به‬ ‫مفعول‬.)
–‫البرمجة‬ ‫لغات‬ ‫في‬:if ( statement )
.3‫الداللي‬ ‫التحليل‬:
■‫دالليا‬ ‫ليس‬ ‫لكن‬ ‫و‬ ‫قواعديا‬ ‫صحيحة‬ ‫تكون‬ ‫ان‬ ‫الممكن‬ ‫من‬ ‫الجملة‬ ‫ان‬ ‫اي‬.
■‫مثال‬:
–‫التفاحة‬ ‫الولد‬ ‫اكل‬.
–‫المقعد‬ ‫الولد‬ ‫اكل‬.
702020
Compiler Structure
Analysis Phase (‫التحليل‬ ‫)مرحلة‬
■‫خطوات‬ ‫ثالث‬ ‫تحوي‬ ‫التحليل‬ ‫مرحلة‬:
.1‫المعجمي‬ ‫التحليل‬ ‫مرحلة‬(Lexical Analysis - Scanner:)
■‫الدخل‬ ‫يقرأ‬ ‫أن‬ ‫مهمته‬input‫الى‬ ‫ويحلله‬tokens‫من‬ ‫محدد‬ ‫جزء‬ ‫تمثل‬ ‫الكلمات‬ ‫هذه‬ ‫من‬ ‫وكل‬
‫اللغة‬ ‫في‬ ‫الثابتة‬ ‫الكلمات‬ ‫من‬ ‫ام‬ ‫متغير‬ ‫أكان‬ ‫سواء‬ ‫اللغة‬(reserved word)‫بمسح‬ ً‫ايضا‬ ‫ويقوم‬
‫الـ‬ ‫وحفظ‬ ‫المسافات‬tokens‫الرموز‬ ‫جدول‬ ‫في‬(symboltable.)
.2‫الجملة‬ ‫بناء‬ ‫مرحلة‬(Syntax Analysis - Parser:)
■‫الـ‬ ‫يأخذ‬ ‫ان‬ ‫مهمته‬tokens‫مرحلة‬ ‫عن‬ ‫الناتجة‬(Lexical Analysis)‫برمجية‬ ‫جمل‬ ‫في‬ ‫ويكونها‬
‫اللغة‬ ‫قواعد‬ ‫أساس‬ ‫على‬ ‫صحتها‬ ‫ويختبر‬.
■‫يدعى‬ ‫داللي‬ ‫هيكل‬ ‫عنها‬ ‫ينتج‬ ‫المرحلة‬ ‫هذه‬(semantic structure)‫البرمجية‬ ‫الجمل‬ ‫وتكون‬
‫ب‬ ‫يسمى‬ ‫شجري‬ ‫شكل‬ ‫على‬(parser tree.)
.3‫الداللي‬ ‫التحليل‬ ‫مرحلة‬(Semantic Analysis – Intermediate Code Generator:)
■‫لن‬ ‫القيمة‬ ‫اسناد‬ ‫صحة‬ ‫مثل‬ ،‫بالمنطق‬ ‫المتعلقة‬ ‫األخطاء‬ ‫من‬ ‫التحقق‬ ‫يتم‬ ‫المرحلة‬ ‫هذه‬ ‫في‬‫وع‬
‫وغيرها‬ ‫المتغير‬.
712020
Compiler Structure
Synthesis Phase (‫التركيب‬ ‫)مرحلة‬
■‫المتوسطة‬ ‫اللغة‬ ‫تحويل‬ ‫يتم‬ ‫المرحلة‬ ‫هذه‬ ‫في‬(Intermediate Language)‫تفهمها‬ ‫لغة‬ ‫الى‬
‫اآللة‬(Machine Language)‫التالي‬ ‫النحو‬ ‫على‬ ‫ذلك‬ ‫ويتم‬:
.1‫األكواد‬ ‫تحسين‬ ‫مرحلة‬(Code Optimization:)
■‫بأن‬ ‫والتأكد‬ ‫البرنامج‬ ‫وتطوير‬ ‫التكرار‬ ‫وابعاد‬ ‫الكود‬ ‫تحسين‬ ‫مسألة‬ ‫تتولى‬ ‫الخطوة‬ ‫هذه‬‫يكون‬
‫آخر‬ ‫مترجم‬ ‫عن‬ ‫مترجم‬ ‫تميز‬ ‫التي‬ ‫هي‬ ‫الخطوة‬ ‫هذه‬ ‫و‬ ‫حاالته‬ ‫أحسن‬ ‫في‬ ‫البرنامج‬.
.2‫األكواد‬ ‫د‬ّ‫مول‬ ‫مرحلة‬(Code Generation:)
■‫اآللة‬ ‫تفهمه‬ ‫شكل‬ ‫الى‬ ‫نهائي‬ ‫بشكل‬ ‫الكود‬ ‫تحويل‬ ‫يتم‬ ‫هنا‬.
722020
Compiler Structure
732020
Compiler Structure
(‫موازية‬ ‫)مراحل‬
■‫الرموز‬ ‫جدول‬ ‫إدارة‬(Symbol Table)
–‫المترجمات‬ ‫في‬ ‫المستخدمة‬ ‫المعطيات‬ ‫بنى‬ ‫اهم‬ ‫احد‬ ‫الرموز‬ ‫جدول‬ ‫يشكل‬.
–‫انماطها‬ ‫مع‬ ‫المصدري‬ ‫البرمجي‬ ‫النص‬ ‫ضمن‬ ‫المعرفة‬ ‫المتحوالت‬ ‫تخزين‬ ‫فيه‬ ‫يتم‬.
–‫المتحول‬ ‫مدى‬ ‫او‬ ‫رؤية‬ ‫مجال‬ ‫تحديد‬ ‫في‬ ‫يستخدم‬.
■‫األخطاء‬ ‫إدارة‬(Error Handling)
–‫النص‬ ‫كتابة‬ ‫اثناء‬ ‫المبرمج‬ ‫ارتكبها‬ ‫أخطاء‬ ‫والتركيب‬ ‫التحليل‬ ‫عمليات‬ ‫عن‬ ‫تنتج‬‫البرمجي‬.
■‫داللية‬ ‫أخطاء‬ ،‫الجمل‬ ‫بناء‬ ‫في‬ ‫أخطاء‬ ،‫الكلمات‬ ‫كتابة‬ ‫في‬ ‫أخطاء‬...
–‫الهدف‬ ‫يبقى‬ ‫لكن‬ ‫مختلف‬ ‫بشكل‬ ‫األخطاء‬ ‫أنواع‬ ‫من‬ ‫نوع‬ ‫كل‬ ‫مع‬ ‫التعامل‬ ‫يجري‬
‫االخطاء‬ ‫وجود‬ ‫الى‬ ‫إشارة‬ ‫المبرمج‬ ‫إعطاء‬ ‫هو‬ ‫األخطاء‬ ‫لمعالجة‬.‫الخطأ‬ ‫سبب‬ ‫وتوضيح‬
(‫اإلمكان‬ ‫قدر‬.)
742020
Interpreter
(‫)المفسر‬
■‫خطوة‬ ‫خطوة‬ ‫ينفذه‬ ‫ولكن‬ ‫البرنامج‬ ‫يحول‬ ‫ال‬.
752020
Compiler V.S. Interpreter
■ The machine language target program produced by a compiler is usually much
faster than an interpreter at mapping inputs to outputs.
■ An interpreter, however, can usually give better error diagnostics than a compiler,
because it executes the source program statement by statement.
762020
Compiler Kinds
■‫معنى‬ ‫ما‬multi-pass compiler‫و‬one pass compiler‫؟‬
–One pass compiler:
■‫التحليل‬ ‫عمل‬ ‫يتم‬‫المفرداتي‬‫والتحلي‬ ‫التجميع‬ ‫فيها‬ ‫يتم‬ ‫التي‬ ‫اللحظة‬ ‫نفس‬ ‫في‬‫ل‬
‫األعل‬ ‫من‬ ‫هذه‬ ‫المسح‬ ‫عملية‬ ‫ثم‬ ‫الداللي‬ ‫التحليل‬ ‫الى‬ ‫مباشرة‬ ‫االنتقال‬ ‫ثم‬ ‫القواعدي‬‫ى‬
‫لالسفل‬.
■‫و‬ ‫بقراءة‬ ‫يعني‬ ‫والداللي‬ ‫والقواعدي‬ ‫اللفظي‬ ‫التحليل‬ ‫على‬ ‫المرور‬ ‫يعني‬ ‫الوحيد‬ ‫المرور‬‫حدة‬.
–Multi pass compiler:
■‫اكتر‬ ‫وقت‬ ‫وتتطلب‬ ‫مرة‬ ‫من‬ ‫اكتر‬ ‫البرنامج‬ ‫مسح‬ ‫يتم‬.
772020
Backtracking
Example
■‫التالية‬ ‫القواعد‬ ‫لدينا‬ ‫لتكن‬.‫يعبر‬ ‫حيث‬S‫البداية‬ ‫رمز‬ ‫عن‬.‫وحيث‬A‫تحليل‬ ‫ونريد‬ ‫وسيط‬ ‫رمز‬
‫الكلمة‬w=acb
■ S → aAb
■ A → d | c
■‫وهوة‬ ‫الشجرة‬ ‫جذر‬ ‫من‬ ‫لنبدأ‬S.‫الكلمة‬ ‫قراءة‬ ‫فتؤدي‬a‫الشجرة‬ ‫بناء‬ ‫عملية‬ ‫في‬ ‫التقدم‬ ‫الى‬
‫على‬ ‫لنحصل‬
782020
Backtracking
Example
■‫قراءة‬ ‫عند‬ ‫ولكن‬c‫الثاني‬ ‫او‬ ‫األولى‬ ‫القاعدة‬ ‫أخذ‬ ‫علينا‬ ‫كان‬ ‫إذا‬ ‫فيما‬ ‫تحديد‬ ‫نستطيع‬ ‫لن‬‫ة‬.
■‫وهي‬ ‫التالية‬ ‫الكلمة‬ ‫فراءة‬ ‫علينا‬ ‫يتوجب‬ ‫االمر‬ ‫ولتحديد‬(b)
■‫ونتابع‬ ‫األولى‬ ‫القاعدة‬ ‫نجرب‬ ‫بحيث‬ ‫الخلف‬ ‫الى‬ ‫الرجوع‬ ‫إمكانية‬ ‫وإعطاء‬.
■‫الق‬ ‫مع‬ ‫الجزء‬ ‫هذا‬ ‫بناء‬ ‫ونعيد‬ ‫الخلف‬ ‫الى‬ ‫نعود‬ ‫الصحيح‬ ‫بالشكل‬ ‫االمر‬ ‫يجر‬ ‫لم‬ ‫حال‬ ‫وفي‬‫اعدة‬
‫الثانية‬.
■‫التحليل‬ ‫عملية‬ ‫كلفة‬ ‫ارتفاع‬ ‫الى‬ ‫الخلف‬ ‫الى‬ ‫العودة‬ ‫تؤدي‬(backtracking)
792020
Backtracking
Example
■‫بم‬ ‫السابقة‬ ‫المشكلة‬ ‫لحل‬ ‫نحتاجها‬ ‫التي‬ ‫النازل‬ ‫التحليل‬ ‫منهجية‬ ‫نلخص‬ ‫ان‬ ‫يمكننا‬‫يلي‬ ‫ا‬:
–‫لنا‬ ‫يحدد‬ ‫جدول‬ ‫الى‬ ‫نحتاج‬.‫ما‬ ‫كلمة‬ ‫بقراءة‬ ‫قمنا‬ ‫حال‬ ‫في‬.‫مرحلة‬ ‫في‬ ‫كنا‬ ‫حال‬ ‫وفي‬
‫وسيط‬ ‫برمز‬ ‫ممثلة‬ ‫للشجرة‬ ‫معينة‬ ‫عقدة‬ ‫عند‬ ‫معينة‬ ‫اشتقاق‬.‫الخ‬ ‫القاعدة‬ ‫هي‬ ‫ما‬‫اصة‬
‫الشجرة‬ ‫بناء‬ ‫لمتابعة‬ ‫اختيارها‬ ‫يجب‬ ‫التي‬ ‫الرمز‬ ‫بهذا‬.
802020
First Sets
(‫األولى‬ ‫الرموز‬ ‫)مجموعة‬
■ The First Set of a nonterminal A is the set of terminals that may appear as the first
symbols in a string derived from A.
A → BCD
B → b | ε
C → cd | ε
D → e | ε
First (A) = { b , c , e , ε }
First (B) = { b, ε }
First (C) = { c , ε }
First (D) = { e , ε }
A  b
A  bcd
A  bcde
A  be
A  cd
A  cde
A  e
A  ε
812020
First Sets
(‫األولى‬ ‫الرموز‬ ‫)مجموعة‬
■ The First Set of a nonterminal A is the set of terminals that may appear as the first
symbols in a string derived from A.
Let X be a grammar symbol (a terminal or nonterminal) or ε. Then the set First (X)
consisting of terminals, and possibly ε, is defined as follows:
1. If X is a terminal or ε, then First (X) = {X}
2. If X is a nonterminal, then
1. for each production choice X → X1 X2 … Xn , First (X) contains First (X1) – {ε}.
2. and if for some i < n, all the sets First (X1), …, First (Xi) contain ε, then First (X)
contains First (Xi+1) – {ε}.
3. and if all the sets First (X1), …, First (Xn) contain ε, then First (X) also contains ε.
822020
First Sets
Example 1
Grammar Rule Pass 1 Pass 2 Pass 3
exp → exp addop term
exp → term
First (exp) = { (
, number}
addop → + First (addop) = {+}
addop → - First (adop) = {+,-}
term → term mulop
factor
term → factor
First (trem) = { ( ,
number}
mulop → * First (mulop) = {*}
factor → ( exp ) First (factor) = { ( }
factor → number
First (factor) = { ( ,
number}
exp → exp addop term| term
addop → + | -
term → term mulop factor| factor
mulop → *
factor → ( exp ) | number
832020
First Sets
Example 2
Grammar Rule Pass 1 Pass 2
statement → if-stmt
First (statement) =
{if , other}
statement → other
First (statement) =
{other}
if-stmt → if ( exp )
statement else-part
First (if-stmt) = {if}
else-part → else
statement
First (else-part) =
{else}
else-part → ε
First (else-part) =
{else, ε}
exp → 0 First (exp) = {0}
exp → 1 First (exp) = {0,1}
statement → if-stmt | other
If-stmt → if ( exp ) statement else-part
else-part → else statement | ε
exp → 0 | 1
842020
First Sets
More Examples
85
E → TE’
E’ → +TE’ | ε
T → FT’
T’ → *FT’ | ε
F → (E) | id
S → ABC
A → aA | ε
B → bB | cB | ε
C → de | da | dA
2020
First Sets
More Examples
86
E → TE’
E’ → +TE’ | ε
T → FT’
T’ → *FT’ | ε
F → (E) | id
First (E) = { ( , id }
First (E’) = { * , ε }
First (T) = { ( , id }
First (T’) = { * , ε }
First (F) = { ( , id }
S → ABC
A → aA | ε
B → bB | cB | ε
C → de | da | dA
First (S) = { a , b , c , d }
First (A) = { a , ε }
First (B) = { b , c , ε }
First (C) = { d }
2020
Follow Sets
(‫الالحقة‬ ‫الرموز‬ ‫)مجموعة‬
■ The Follow Set of a nonterminal A is the set of terminals that may appear after A in a
string derived from the start symbol.
A → BCD
B → b | ε
C → cd | ε
D → e | ε
Follow (A) = $
Follow (B) = First (CD) – {ε} + Follow (A) = {c, e, ε} – {ε} + {$} = {c, e, $}
Follow (C) = First (D) – {ε} + Follow (A) = {$, e}
Follow (D) = Follow (A) = {$}
872020
Follow Sets
(‫الالحقة‬ ‫الرموز‬ ‫)مجموعة‬
■ The Follow Set of a nonterminal A is the set of terminals that may appear after A in a
string derived from the start symbol.
Given a nonterminal A, the set Follow(A), consisting of terminals, and possibly $, is
defined as follows:
1. If A is the start symbol, then $ is in Follow(A)
2. If there is a production B → α A γ, then First (γ) – {ε} is in Follow (A).
3. If there is a production B → α A γ such that ε is in First (γ), then Follow (A) contains
Follow (B).
882020
Follow Sets
Example
Grammar Rule Pass 1 Pass 2
exp → exp addop term Follow (exp) = {$, + , -}
Follow (addop) = { ( , number}
Follow (term) = {$, + , -}
Follow (term) = { $, + , - , *, ) }
exp → term
term → term mulop factor Follow (term) = {$,+,-, *}
Follow (mulop) = { ( , number}
Follow (factor) = {$, +, -, *}
Follow (factor) = { $, + , - , *, ) }
term → factor
factor → ( exp ) Follow (exp) = { $, + , - , ) }
exp → exp addop term| term
addop → + | -
term → term mulop factor| factor
mulop → *
factor → ( exp ) | number
First (exp) = { ( , number}
First (term) = { ( , number}
First (factor) = { ( , number}
First (adop) = {+,-}
First (mulop) = {*}
892020
Follow Sets
More Example
90
E → TE’
E’ → +TE’ | ε
T → FT’
T’ → *FT’ | ε
F → (E) | id
S → aSb | cd | SAe
A → aAdB | ε
B → bb
2020
Follow Sets
More Example
91
E → TE’
E’ → +TE’ | ε
T → FT’
T’ → *FT’ | ε
F → (E) | id
First (E) = { ( , id }
First (E’) = { + , ε }
First (T) = { ( , id }
First (T’) = { * , ε }
First (F) = { ( , id }
Follow (E) = { ) , $ }
Follow (E’) = { ) , $ }
Follow (T) = { + , ) , $ }
Follow (T’) = { + , ) , $ }
Follow (F) = { * , + , ) , $ }
First (S) = { a , c }
First (A) = { a , ε }
First (B) = { b }
Follow (S) = { b , a , e , $ }
Follow (A) = { e , d , $ }
Follow (B) = { e , d , $ }
S → aSb | cd | SAe
A → aAdB | ε
B → bb
2020
Types of Parsing
■ Syntax analyzers follow production rules defined by means of context-free grammar.
■ The way the production rules are implemented (derivation) divides parsing into two
types:
– Top-down parsing
– Bottom-up parsing
922020
Types of Parsing
■ Top-down Parsing:
– When the parser starts constructing the parse tree from the start symbol and
then tries to transform the start symbol to the input, it is called top-down
parsing.
■ Bottom-up Parsing:
– As the name suggests, bottom-up parsing starts with the input symbols and
tries to construct the parse tree up to the start symbol.
932020
Types of Parsing
Example
■ Input string: a + b * c
■ Production rules:
– S → E
– E → E + T
– E → E * T
– E → T
– T → id
942020
Types of Parsing
Example
■ Let us start bottom-up parsing: a + b * c
■ Read the input and check if any production matches with the input:
– a + b * c
– T + b * c
– E + b * c
– E + T * c
– E * c
– E * T
– E
– S
952020
LL(1)
Simple Predictive Parser
■ Top-down, predictive parsing:
– L: Left-to-right scan of the tokens
– L: Leftmost derivation
– (1): One token of lookahead
■ Construct a leftmost derivation for the sequence of tokens.
■ When expanding a nonterminal, we predict the production to use by looking at the
next token of the input. The decision is forced.
962020
LL(1) Parse Tables
E → int
E →(E OpE)
Op → +
Op → *
int ( ) + *
E int (E Op E)
Op + *
972020
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
(int + (int * int))LL(1) Parsing
982020
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
E (int + (int * int))LL(1) Parsing
992020
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
E (int + (int * int))
int ( ) + *
E 1 2
Op 3 4
LL(1) Parsing
1002020
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
E$ (int + (int * int))$
int ( ) + *
E 1 2
Op 3 4
LL(1) Parsing
1012020
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
E$ (int + (int * int))$
int ( ) + *
E 1 2
Op 3 4
LL(1) Parsing
102
T he $ symbol is t he end - of - input
marker and is used by the parser
t o detect when we have reached
the end o f the input. I t is not
a part o f the grammar.
2020
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
E$ (int + (int * int))$
int ( ) + *
E 1 2
Op 3 4
LL(1) Parsing
1032020
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
E$ (int + (int * int))$
int ( ) + *
E 1 2
Op 3 4
LL(1) Parsing
104
The f ir st symbol of our guess is a
nonterminal. We then look at our
parsing table t o see what
production t o use.
This is called a predict step.
2020
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
E$ (int + (int * int))$
int ( ) + *
E 1 2
Op 3 4
LL(1) Parsing
1052020
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
E$ (int + (int * int))$
(E Op E)$ (int + (int * int))$
int ( ) + *
E 1 2
Op 3 4
LL(1) Parsing
1062020
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
E$ (int + (int * int))$
(E Op E)$ (int + (int * int))$
int ( ) + *
E 1 2
Op 3 4
LL(1) Parsing
107
The f ir st symbol of our guess is
now a terminal symbol. We thus
match i t against the f i r s t symbol
o f the string t o parse.
This is called a match step.
2020
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
E$ (int + (int * int))$
(E Op E)$ (int + (int * int))$
E Op E)$ int + (int * int))$
int ( ) + *
E 1 2
Op 3 4
LL(1) Parsing
1082020
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
E$ (int + (int * int))$
(E Op E)$ (int + (int * int))$
E Op E)$ int + (int * int))$
int ( ) + *
E 1 2
Op 3 4
LL(1) Parsing
1092020
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
E$ (int + (int * int))$
(E Op E)$ (int + (int * int))$
E Op E)$ int + (int * int))$
int Op E)$ int + (int * int))$
int ( ) + *
E 1 2
Op 3 4
LL(1) Parsing
1102020
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
E$ (int + (int * int))$
(E Op E)$ (int + (int * int))$
E Op E)$ int + (int * int))$
int Op E)$ int + (int * int))$
Op E)$ + (int * int))$
int ( ) + *
E 1 2
Op 3 4
LL(1) Parsing
1112020
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
E$ (int + (int * int))$
(E Op E)$ (int + (int * int))$
E Op E)$ int + (int * int))$
int Op E)$ int + (int * int))$
Op E)$ + (int * int))$
int ( ) + *
E 1 2
Op 3 4
LL(1) Parsing
1122020
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
E$ (int + (int * int))$
(E Op E)$ (int + (int * int))$
E Op E)$ int + (int * int))$
int Op E)$ int + (int * int))$
Op E)$ + (int * int))$
+ E)$ + (int * int))$
int ( ) + *
E 1 2
Op 3 4
LL(1) Parsing
1132020
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
E$ (int + (int * int))$
(E Op E)$ (int + (int * int))$
E Op E)$ int + (int * int))$
int Op E)$ int + (int * int))$
Op E)$ + (int * int))$
+ E)$ + (int * int))$
E)$ (int * int))$
int ( ) + *
E 1 2
Op 3 4
LL(1) Parsing
1142020
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
E$ (int + (int * int))$
(E Op E)$ (int + (int * int))$
E Op E)$ int + (int * int))$
int Op E)$ int + (int * int))$
Op E)$ + (int * int))$
+ E)$ + (int * int))$
E)$ (int * int))$
int ( ) + *
E 1 2
Op 3 4
LL(1) Parsing
1152020
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
E$ (int + (int * int))$
(E Op E)$ (int + (int * int))$
E Op E)$ int + (int * int))$
int Op E)$ int + (int * int))$
Op E)$ + (int * int))$
+ E)$ + (int * int))$
E)$ (int * int))$
(E Op E))$ (int * int))$
int ( ) + *
E 1 2
Op 3 4
LL(1) Parsing
1162020
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
E$ (int + (int * int))$
(E Op E)$ (int + (int * int))$
E Op E)$ int + (int * int))$
int Op E)$ int + (int * int))$
Op E)$ + (int * int))$
+ E)$ + (int * int))$
E)$ (int * int))$
(E Op E))$ (int * int))$
E Op E))$ int * int))$int ( ) + *
E 1 2
Op 3 4
LL(1) Parsing
1172020
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
E$ (int + (int * int))$
(E Op E)$ (int + (int * int))$
E Op E)$ int + (int * int))$
int Op E)$ int + (int * int))$
Op E)$ + (int * int))$
+ E)$ + (int * int))$
E)$ (int * int))$
(E Op E))$ (int * int))$
E Op E))$ int * int))$int ( ) + *
E 1 2
Op 3 4
LL(1) Parsing
1182020
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
int * int))$
E$ (int + (int * int))$
(E Op E)$ (int + (int * int))$
E Op E)$ int + (int * int))$
int Op E)$ int + (int * int))$
Op E)$ + (int * int))$
+ E)$ + (int * int))$
E)$ (int * int))$
(E Op E))$ (int * int))$
E Op E))$ int * int))$
int Op E))$ int * int))$
int ( ) + *
E 1 2
Op 3 4
LL(1) Parsing
1192020
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
int * int))$
E$ (int + (int * int))$
(E Op E)$ (int + (int * int))$
E Op E)$ int + (int * int))$
int Op E)$ int + (int * int))$
Op E)$ + (int * int))$
+ E)$ + (int * int))$
E)$ (int * int))$
(E Op E))$ (int * int))$
E Op E))$ int * int))$
int Op E))$ int * int))$
Op E))$ * int))$
int ( ) + *
E 1 2
Op 3 4
LL(1) Parsing
1202020
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
int * int))$
E$ (int + (int * int))$
(E Op E)$ (int + (int * int))$
E Op E)$ int + (int * int))$
int Op E)$ int + (int * int))$
Op E)$ + (int * int))$
+ E)$ + (int * int))$
E)$ (int * int))$
(E Op E))$ (int * int))$
E Op E))$ int * int))$
int Op E))$ int * int))$
Op E))$ * int))$
int ( ) + *
E 1 2
Op 3 4
LL(1) Parsing
1212020
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
int * int))$
E$ (int + (int * int))$
(E Op E)$ (int + (int * int))$
E Op E)$ int + (int * int))$
int Op E)$ int + (int * int))$
Op E)$ + (int * int))$
+ E)$ + (int * int))$
E)$ (int * int))$
(E Op E))$ (int * int))$
E Op E))$ int * int))$
int Op E))$ int * int))$
Op E))$ * int))$
* E))$ * int))$
int ( ) + *
E 1 2
Op 3 4
LL(1) Parsing
1222020
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
int * int))$
E$ (int + (int * int))$
(E Op E)$ (int + (int * int))$
E Op E)$ int + (int * int))$
int Op E)$ int + (int * int))$
Op E)$ + (int * int))$
+ E)$ + (int * int))$
E)$ (int * int))$
(E Op E))$ (int * int))$
E Op E))$ int * int))$
int Op E))$ int * int))$
Op E))$ * int))$
* E))$ * int))$
E))$ int))$
int ( ) + *
E 1 2
Op 3 4
LL(1) Parsing
1232020
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
int * int))$
E$ (int + (int * int))$
(E Op E)$ (int + (int * int))$
E Op E)$ int + (int * int))$
int Op E)$ int + (int * int))$
Op E)$ + (int * int))$
+ E)$ + (int * int))$
E)$ (int * int))$
(E Op E))$ (int * int))$
E Op E))$ int * int))$
int Op E))$ int * int))$
Op E))$ * int))$
* E))$ * int))$
E))$ int))$
int ( ) + *
E 1 2
Op 3 4
LL(1) Parsing
1242020
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
int * int))$
E$ (int + (int * int))$
(E Op E)$ (int + (int * int))$
E Op E)$ int + (int * int))$
int Op E)$ int + (int * int))$
Op E)$ + (int * int))$
+ E)$ + (int * int))$
E)$ (int * int))$
(E Op E))$ (int * int))$
E Op E))$ int * int))$
int Op E))$ int * int))$
Op E))$ * int))$
* E))$ * int))$
E))$ int))$
int))$ int))$
int ( ) + *
E 1 2
Op 3 4
LL(1) Parsing
1252020
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
int * int))$
E$ (int + (int * int))$
(E Op E)$ (int + (int * int))$
E Op E)$ int + (int * int))$
int Op E)$ int + (int * int))$
Op E)$ + (int * int))$
+ E)$ + (int * int))$
E)$ (int * int))$
(E Op E))$ (int * int))$
E Op E))$ int * int))$
int Op E))$ int * int))$
Op E))$ * int))$
* E))$ * int))$
E))$ int))$
int))$ int))$
))$ ))$
int ( ) + *
E 1 2
Op 3 4
LL(1) Parsing
1262020
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
int * int))$
E$ (int + (int * int))$
(E Op E)$ (int + (int * int))$
E Op E)$ int + (int * int))$
int Op E)$ int + (int * int))$
Op E)$ + (int * int))$
+ E)$ + (int * int))$
E)$ (int * int))$
(E Op E))$ (int * int))$
E Op E))$ int * int))$
int Op E))$ int * int))$
Op E))$ * int))$
* E))$ * int))$
E))$ int))$
int))$ int))$
))$ ))$
)$ )$
int ( ) + *
E 1 2
Op 3 4
LL(1) Parsing
1272020
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
int * int))$
E$ (int + (int * int))$
(E Op E)$ (int + (int * int))$
E Op E)$ int + (int * int))$
int Op E)$ int + (int * int))$
Op E)$ + (int * int))$
+ E)$ + (int * int))$
E)$ (int * int))$
(E Op E))$ (int * int))$
E Op E))$ int * int))$
int Op E))$ int * int))$
Op E))$ * int))$
* E))$ * int))$
E))$ int))$
int))$ int))$
))$ ))$
)$ )$
$ $
int ( ) + *
E 1 2
Op 3 4
LL(1) Parsing
1282020
int + int$
LL(1) Error Detection
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
int ( ) + *
E 1 2
Op 3 4
1292020
int + int$E$
LL(1) Error Detection
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
int ( ) + *
E 1 2
Op 3 4
1302020
int + int$E$
LL(1) Error Detection
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
int ( ) + *
E 1 2
Op 3 4
1312020
E$ int + int$
int $ int + int$
LL(1) Error Detection
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
int ( ) + *
E 1 2
Op 3 4
1322020
E$ int + int$
int $ int + int$
$ + int$
LL(1) Error Detection
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
int ( ) + *
E 1 2
Op 3 4
1332020
E$ int + int$
int $ int + int$
$ + int$
LL(1) Error Detection
(1) E → int
(2) E → (E OpE)
(3) Op → +
(4) Op → *
int ( ) + *
E 1 2
Op 3 4
1342020
CONSTRUCTING LL(1)
PARSE TABLES
Try this link:
http://andrewduncan.net/parsing/index.html
1352020
Constructing LL(1) Parse Tables
Example 1
136
E → TE’
E’ → +TE’ | ε
T → FT’
T’ → *FT’ | ε
F → (E) | id
First (E) = { ( , id }
First (E’) = { + , ε }
First (T) = { ( , id }
First (T’) = { * , ε }
First (F) = { ( , id }
Follow (E) = { ) , $ }
Follow (E’) = { ) , $ }
Follow (T) = { + , ) , $ }
Follow (T’) = { + , ) , $ }
Follow (F) = { * , + , ) , $ }
First (TE’) = { ( , id }
First (+TE’ ) = { + }
First (ε) = { ε }
First (FT’) = { ( , id }
First (*FT’) = { * }
First (ε) = { ε }
First ((E)) = { ( }
First (id) = { id }
2020
Constructing LL(1) Parse Tables
Example 1
137
E → TE’ FIRST(TE’)={(,id} ➔ E → TE’ into M[E,(] and M[E,id]
E’ → +TE’ FIRST(+TE’ )={+} ➔ E’ → +TE’ into M[E’,+]
E’ →  FIRST()={} ➔ none
but since  in FIRST()
and FOLLOW(E’)={$,)} ➔ E’ →  into M[E’,$] and M[E’,)]
T → FT’ FIRST(FT’)={(,id} ➔ T → FT’ into M[T,(] and M[T,id]
T’ → *FT’ FIRST(*FT’ )={*} ➔ T’ → *FT’ into M[T’,*]
T’ →  FIRST()={} ➔ none
but since  in FIRST()
and FOLLOW(T’)={$,),+} ➔ T’ →  into M[T’,$], M[T’,)] and M[T’,+]
F → (E) FIRST((E) )={(} ➔ F → (E) into M[F,(]
F → id FIRST(id)={id} ➔ F → id into M[F,id]
2020
Constructing LL(1) Parse Tables
Example 1
138
id + * ( ) $
E E → TE’ E → TE’
E’ E’ → +TE’ E’ →  E’ → 
T T → FT’ T → FT’
T’ T’ →  T’ → *FT’ T’ →  T’ → 
F F → id F → (E)
2020
Constructing LL(1) Parse Tables
■ Rules for adding production choices to the table :
– If A → α is a production choice, and there is a derivation α ➔* aβ, then add A
→ α to the table entry M[A, a].
– If A → α is a production choice, and there are derivations α ➔* ε and S$ ➔* β
A a γ, then add A → α to the table entry M[A, a].
■ Clearly, the token a in rule 1 is in First (α), and the token a in rule 2 is in Follow (A)
139
Repeat the following two steps for each nonterminal A and production choice A→ α
1. For each token a in First (α), add A → α to the entry M[A,a]
2. if ε is in First (α), for each element a of Follow A (a token or $), add A → α to M[A,a]
2020
Constructing LL(1) Parse Tables
Example 2
140
Repeat the following two steps for each nonterminal A and production choice A→ α
1. For each token a in First (α), add A → α to the entry M[A,a]
2. if ε is in First (α), for each element a of Follow A (a token or $), add A → α to M[A,a]
S → (S) S
S → ε
First ( (S)S ) = { ( }
First (ε) = {ε}
Follow (S) = { $ , ) }
M [N, T] ( ) $
S S → ( S ) S S → ε S → ε
A = S , α = (S) S
A = S , α = ε
2020
Constructing LL(1) Parse Tables
Example 3
141
Repeat the following two steps for each nonterminal A and production choice A→ α
1. For each token a in First (α), add A → α to the entry M[A,a]
2. if ε is in First (α), for each element a of Follow A (a token or $), add A → α to M[A,a]
S → A S b
S → C
A → a
C → c C
C → 
a b c $
S S → A S b S → C S → C S → C
A A → a
C C →  C → c C C → 
2020
MCQ
1422020
Question 1
■‫الصحيحة‬ ‫العبارة‬ ‫حدد‬:
.A‫المفسر‬(interpreter)‫للمترجم‬ ‫اخر‬ ‫اسم‬ ‫هو‬(compiler)‫في‬ ‫فقط‬ ‫واالختالف‬
‫المستخدم‬ ‫المصطلح‬.
.B‫البرمج‬ ‫الكود‬ ‫من‬ ‫التحقق‬ ‫عملية‬ ‫فيها‬ ‫تتم‬ ‫التي‬ ‫المترجمات‬ ‫من‬ ‫نمط‬ ‫هو‬ ‫المفسر‬‫ي‬
‫سطرا‬ ‫للعمليات‬ ‫وتنفيذ‬‫سطرا‬.
.C‫األمثلة‬ ‫مرحلة‬ ‫بدون‬ ‫مترجم‬ ‫هو‬ ‫المفسر‬(Optimization Phase)‫البرمجي‬ ‫للكود‬.
.D‫نهائيا‬ ‫بالمترجمات‬ ‫للمفسرات‬ ‫عالقة‬ ‫ال‬.
1432020
Question 1
■‫الصحيحة‬ ‫العبارة‬ ‫حدد‬:
.A‫المفسر‬(interpreter)‫للمترجم‬ ‫اخر‬ ‫اسم‬ ‫هو‬(compiler)‫في‬ ‫فقط‬ ‫واالختالف‬
‫المستخدم‬ ‫المصطلح‬.
.B‫البرمج‬ ‫الكود‬ ‫من‬ ‫التحقق‬ ‫عملية‬ ‫فيها‬ ‫تتم‬ ‫التي‬ ‫المترجمات‬ ‫من‬ ‫نمط‬ ‫هو‬ ‫المفسر‬‫ي‬
‫سطرا‬ ‫للعمليات‬ ‫وتنفيذ‬‫سطرا‬.
.C‫األمثلة‬ ‫مرحلة‬ ‫بدون‬ ‫مترجم‬ ‫هو‬ ‫المفسر‬(Optimization Phase)‫البرمجي‬ ‫للكود‬.
.D‫نهائيا‬ ‫بالمترجمات‬ ‫للمفسرات‬ ‫عالقة‬ ‫ال‬.
1442020
Question 2
■‫ب‬ ‫يتعلق‬ ‫فيما‬ ‫الصحيح‬ ‫الخيار‬ ‫اختر‬top down parsing‫المترجم‬ ‫بناء‬ ‫عند‬:
.A‫حساب‬ ‫دائما‬ ‫الزم‬first‫حساب‬ ‫دون‬follow.
.B‫حساب‬ ‫الزم‬follow‫دون‬first.
.C‫حساب‬ ‫الزم‬follow‫واحيانا‬first.
.D‫خطأ‬ ‫سبق‬ ‫ما‬ ‫كل‬.
1452020
Question 2
■‫ب‬ ‫يتعلق‬ ‫فيما‬ ‫الصحيح‬ ‫الخيار‬ ‫اختر‬top down parsing‫المترجم‬ ‫بناء‬ ‫عند‬:
.A‫حساب‬ ‫دائما‬ ‫الزم‬first‫حساب‬ ‫دون‬follow.
.B‫حساب‬ ‫الزم‬follow‫دون‬first.
.C‫حساب‬ ‫الزم‬follow‫واحيانا‬first.
.D‫خطأ‬ ‫سبق‬ ‫ما‬ ‫كل‬.
1462020
Question 3
■‫الصرفية‬ ‫القواعد‬ ‫استخدمنا‬ ‫حال‬ ‫في‬(grammer)‫صحيح‬ ‫عدد‬ ‫أي‬ ‫بنية‬ ‫توصف‬ ‫التي‬ ‫التالية‬
‫حقيقي‬ ‫او‬R‫برمجة‬ ‫لغة‬ ‫ضمن‬:
■‫القوا‬ ‫وفق‬ ‫ما‬ ‫عدد‬ ‫عن‬ ‫للتعبير‬ ‫مقبولة‬ ‫صيغة‬ ‫تعتبر‬ ‫التالية‬ ‫الصيغ‬ ‫من‬ ‫صيغة‬ ‫اي‬‫السابقة‬ ‫عد‬.
.A2.45E02
.BE1-1.1-
.C1.1.1
.DE02+1
1472020
Question 3
■‫الصرفية‬ ‫القواعد‬ ‫استخدمنا‬ ‫حال‬ ‫في‬(grammer)‫صحيح‬ ‫عدد‬ ‫أي‬ ‫بنية‬ ‫توصف‬ ‫التي‬ ‫التالية‬
‫حقيقي‬ ‫او‬R‫برمجة‬ ‫لغة‬ ‫ضمن‬:
■‫القوا‬ ‫وفق‬ ‫ما‬ ‫عدد‬ ‫عن‬ ‫للتعبير‬ ‫مقبولة‬ ‫صيغة‬ ‫تعتبر‬ ‫التالية‬ ‫الصيغ‬ ‫من‬ ‫صيغة‬ ‫اي‬‫السابقة‬ ‫عد‬.
.A2.45E02
.BE1-1.1-
.C1.1.1
.DE02+1
1482020
Question 4
■ A grammar that produces more than one parse tree for some sentence is called:
A. Ambiguous.
B. Unambiguous.
C. Regular.
D. None of the mentioned.
1492020
Question 4
■ A grammar that produces more than one parse tree for some sentence is called:
A. Ambiguous.
B. Unambiguous.
C. Regular.
D. None of the mentioned.
1502020
Question 5
■ An intermediate code form is:
A. Postfix notation.
B. Syntax trees.
C. Three address codes.
D. All of these.
1512020
Question 5
■ An intermediate code form is:
A. Postfix notation.
B. Syntax trees.
C. Three address codes.
D. All of these.
1522020
Question 6
■ Compiler translates the source code to:
A. Executable code.
B. Machine code.
C. Binary code.
D. Both B and C.
1532020
Question 6
■ Compiler translates the source code to:
A. Executable code.
B. Machine code.
C. Binary code.
D. Both B and C.
1542020
Question 7
■ Which of the following groups is/are token together into semantic structures?
A. Syntax analyzer.
B. Intermediate code generation.
C. Lexical analyzer.
D. Semantic analyzer.
1552020
Question 7
■ Which of the following groups is/are token together into semantic structures?
A. Syntax analyzer.
B. Intermediate code generation.
C. Lexical analyzer.
D. Semantic analyzer.
1562020
Question 8
■ _________ is a process of finding a parse tree for a string of tokens:
A. Parsing.
B. Analyzing.
C. Recognizing.
D. Tokenizing.
1572020
Question 8
■ _________ is a process of finding a parse tree for a string of tokens:
A. Parsing.
B. Analyzing.
C. Recognizing.
D. Tokenizing.
1582020
Question 9
■ What is the action of parsing the source program into proper syntactic classes?
A. Lexical analysis.
B. Syntax analysis.
C. General syntax analysis.
D. Interpretation analysis.
1592020
Question 9
■ What is the action of parsing the source program into proper syntactic classes?
A. Lexical analysis.
B. Syntax analysis.
C. General syntax analysis.
D. Interpretation analysis.
1602020
Question 10
■ Which of the following languages is generated by the given grammar?
■ S → a S | b S | ε
A. anbm
B. {a,b}*
C. {a,b}n
D. Other.
1612020
Question 10
■ Which of the following languages is generated by the given grammar?
■ S → a S | b S | ε
A. anbm
B. {a,b}*
C. {a,b}n
D. Other.
1622020
Question 11
■ Which of the following strings is not generated by the following grammar?
■ S → SaSbS|ε
A. aabb
B. abab
C. aababb
D. aabbb
1632020
Question 11
■ Which of the following strings is not generated by the following grammar?
■ S → SaSbS|ε
A. aabb
B. abab
C. aababb
D. aabbb
1642020
Question 12
■ Which of the following is NOT the set of regular expression R = (ab + abb)* bbab
A. ababbbbab
B. abbbab
C. ababbabbbab
D. abababab
1652020
Question 12
■ Which of the following is NOT the set of regular expression R = (ab + abb)* bbab
A. ababbbbab
B. abbbab
C. ababbabbbab
D. abababab
1662020
Question 13
■ In a one pass compiler, the syntax analysis is performed:
A. After the lexical analysis.
B. After the semantic analysis.
C. With the lexical analysis.
1672020
Question 13
■ In a one pass compiler, the syntax analysis is performed:
A. After the lexical analysis.
B. After the semantic analysis.
C. With the lexical analysis.
1682020
Question 14
■ When a syntax error appears, the compiler:
A. Stops Immediately.
B. Stops after collecting few Errors.
C. Depends on the organization of the syntax rules.
1692020
Question 14
■ When a syntax error appears, the compiler:
A. Stops Immediately.
B. Stops after collecting few Errors.
C. Depends on the organization of the syntax rules.
1702020
Question 15
■ Each deterministic finite automata (DFA) has an equivalent regular expression
A. True.
B. False.
1712020
Question 15
■ Each deterministic finite automata (DFA) has an equivalent regular expression
A. True.
B. False.
1722020
Question 16
■ Each Non deterministic finite automata (NFA) has an equivalent regular expression
A. True.
B. False.
1732020
Question 16
■ Each Non deterministic finite automata (NFA) has an equivalent regular expression
A. True.
B. False.
1742020
Question 17
■‫أعط‬‫األوتومات‬‫زوجي‬ ‫طول‬ ‫لها‬ ‫سالسل‬ ‫تقبل‬ ‫التي‬ ‫الحتمي‬ ‫المنتهي‬(‫السلسلة‬ ‫عدا‬
‫الفارغة‬)‫؟‬
1752020
Question 17
■‫أعط‬‫األوتومات‬‫زوجي‬ ‫طول‬ ‫لها‬ ‫سالسل‬ ‫تقبل‬ ‫التي‬ ‫الحتمي‬ ‫المنتهي‬(‫السلسلة‬ ‫عدا‬
‫الفارغة‬)‫؟‬
1762020
Question 18
■‫عن‬ ‫المعبر‬ ‫المنتظم‬ ‫التعبير‬ ‫اعط‬‫األوتومات‬‫التالي‬ ‫الحتمي‬ ‫المنتهي‬:
1772020
Question 18
■‫عن‬ ‫المعبر‬ ‫المنتظم‬ ‫التعبير‬ ‫اعط‬‫األوتومات‬‫التالي‬ ‫الحتمي‬ ‫المنتهي‬:
■‫الجواب‬:
–(aa+bb)b
1782020
CONTACT INFO
1792020

More Related Content

What's hot

Chapter2CDpdf__2021_11_26_09_19_08.pdf
Chapter2CDpdf__2021_11_26_09_19_08.pdfChapter2CDpdf__2021_11_26_09_19_08.pdf
Chapter2CDpdf__2021_11_26_09_19_08.pdfDrIsikoIsaac
 
NFA Converted to DFA , Minimization of DFA , Transition Diagram
NFA Converted to DFA , Minimization of DFA , Transition DiagramNFA Converted to DFA , Minimization of DFA , Transition Diagram
NFA Converted to DFA , Minimization of DFA , Transition DiagramAbdullah Jan
 
Complexity Analysis of Recursive Function
Complexity Analysis of Recursive FunctionComplexity Analysis of Recursive Function
Complexity Analysis of Recursive FunctionMeghaj Mallick
 
Speech recognition system seminar
Speech recognition system seminarSpeech recognition system seminar
Speech recognition system seminarDiptimaya Sarangi
 
Syntax Analysis in Compiler Design
Syntax Analysis in Compiler Design Syntax Analysis in Compiler Design
Syntax Analysis in Compiler Design MAHASREEM
 
Top down parsing(sid) (1)
Top down parsing(sid) (1)Top down parsing(sid) (1)
Top down parsing(sid) (1)Siddhesh Pange
 
Regular Languages
Regular LanguagesRegular Languages
Regular Languagesparmeet834
 
Natural Language Processing: Parsing
Natural Language Processing: ParsingNatural Language Processing: Parsing
Natural Language Processing: ParsingRushdi Shams
 
16890 unit 2 heuristic search techniques
16890 unit 2 heuristic  search techniques16890 unit 2 heuristic  search techniques
16890 unit 2 heuristic search techniquesJais Balta
 
Undecidability.pptx
Undecidability.pptxUndecidability.pptx
Undecidability.pptxPEzhumalai
 
Usage of regular expressions in nlp
Usage of regular expressions in nlpUsage of regular expressions in nlp
Usage of regular expressions in nlpeSAT Journals
 
Longest common subsequence
Longest common subsequenceLongest common subsequence
Longest common subsequenceKiran K
 

What's hot (20)

Sorting algorithms
Sorting algorithmsSorting algorithms
Sorting algorithms
 
Chapter2CDpdf__2021_11_26_09_19_08.pdf
Chapter2CDpdf__2021_11_26_09_19_08.pdfChapter2CDpdf__2021_11_26_09_19_08.pdf
Chapter2CDpdf__2021_11_26_09_19_08.pdf
 
Viterbi algorithm
Viterbi algorithmViterbi algorithm
Viterbi algorithm
 
07. disjoint set
07. disjoint set07. disjoint set
07. disjoint set
 
NFA Converted to DFA , Minimization of DFA , Transition Diagram
NFA Converted to DFA , Minimization of DFA , Transition DiagramNFA Converted to DFA , Minimization of DFA , Transition Diagram
NFA Converted to DFA , Minimization of DFA , Transition Diagram
 
Complexity Analysis of Recursive Function
Complexity Analysis of Recursive FunctionComplexity Analysis of Recursive Function
Complexity Analysis of Recursive Function
 
Speech recognition system seminar
Speech recognition system seminarSpeech recognition system seminar
Speech recognition system seminar
 
Syntax Analysis in Compiler Design
Syntax Analysis in Compiler Design Syntax Analysis in Compiler Design
Syntax Analysis in Compiler Design
 
Top down parsing(sid) (1)
Top down parsing(sid) (1)Top down parsing(sid) (1)
Top down parsing(sid) (1)
 
Regular Languages
Regular LanguagesRegular Languages
Regular Languages
 
Theory of Computation Unit 3
Theory of Computation Unit 3Theory of Computation Unit 3
Theory of Computation Unit 3
 
Natural Language Processing: Parsing
Natural Language Processing: ParsingNatural Language Processing: Parsing
Natural Language Processing: Parsing
 
16890 unit 2 heuristic search techniques
16890 unit 2 heuristic  search techniques16890 unit 2 heuristic  search techniques
16890 unit 2 heuristic search techniques
 
Undecidability.pptx
Undecidability.pptxUndecidability.pptx
Undecidability.pptx
 
Regular expressions
Regular expressionsRegular expressions
Regular expressions
 
LL(1) Parsers
LL(1) ParsersLL(1) Parsers
LL(1) Parsers
 
Kleene's theorem
Kleene's theoremKleene's theorem
Kleene's theorem
 
Usage of regular expressions in nlp
Usage of regular expressions in nlpUsage of regular expressions in nlp
Usage of regular expressions in nlp
 
Theory of Computation Unit 1
Theory of Computation Unit 1Theory of Computation Unit 1
Theory of Computation Unit 1
 
Longest common subsequence
Longest common subsequenceLongest common subsequence
Longest common subsequence
 

More from Joud Khattab

Customer Engagement Management
Customer Engagement ManagementCustomer Engagement Management
Customer Engagement ManagementJoud Khattab
 
Design thinking and Role Playing
Design thinking and Role PlayingDesign thinking and Role Playing
Design thinking and Role PlayingJoud Khattab
 
Algorithms and Data Structure 2020
Algorithms and Data Structure 2020Algorithms and Data Structure 2020
Algorithms and Data Structure 2020Joud Khattab
 
Artificial Intelligence 2020
Artificial Intelligence 2020Artificial Intelligence 2020
Artificial Intelligence 2020Joud Khattab
 
Software Engineering 2020
Software Engineering 2020Software Engineering 2020
Software Engineering 2020Joud Khattab
 
Software Engineering 2018
Software Engineering 2018Software Engineering 2018
Software Engineering 2018Joud Khattab
 
Artificial Intelligence 2018
Artificial Intelligence 2018Artificial Intelligence 2018
Artificial Intelligence 2018Joud Khattab
 
Algorithms and Data Structure 2018
Algorithms and Data Structure 2018Algorithms and Data Structure 2018
Algorithms and Data Structure 2018Joud Khattab
 
Geospatial Information Management
Geospatial Information ManagementGeospatial Information Management
Geospatial Information ManagementJoud Khattab
 
Big Data for Development
Big Data for DevelopmentBig Data for Development
Big Data for DevelopmentJoud Khattab
 
Personality Detection via MBTI Test
Personality Detection via MBTI TestPersonality Detection via MBTI Test
Personality Detection via MBTI TestJoud Khattab
 
Optimization Techniques
Optimization TechniquesOptimization Techniques
Optimization TechniquesJoud Khattab
 
Network Address Translation (NAT)
Network Address Translation (NAT)Network Address Translation (NAT)
Network Address Translation (NAT)Joud Khattab
 
From Image Processing To Computer Vision
From Image Processing To Computer VisionFrom Image Processing To Computer Vision
From Image Processing To Computer VisionJoud Khattab
 

More from Joud Khattab (20)

Customer Engagement Management
Customer Engagement ManagementCustomer Engagement Management
Customer Engagement Management
 
Design thinking and Role Playing
Design thinking and Role PlayingDesign thinking and Role Playing
Design thinking and Role Playing
 
Algorithms and Data Structure 2020
Algorithms and Data Structure 2020Algorithms and Data Structure 2020
Algorithms and Data Structure 2020
 
Artificial Intelligence 2020
Artificial Intelligence 2020Artificial Intelligence 2020
Artificial Intelligence 2020
 
Database 2020
Database 2020Database 2020
Database 2020
 
Software Engineering 2020
Software Engineering 2020Software Engineering 2020
Software Engineering 2020
 
Software Engineering 2018
Software Engineering 2018Software Engineering 2018
Software Engineering 2018
 
Database 2018
Database 2018Database 2018
Database 2018
 
Artificial Intelligence 2018
Artificial Intelligence 2018Artificial Intelligence 2018
Artificial Intelligence 2018
 
Algorithms and Data Structure 2018
Algorithms and Data Structure 2018Algorithms and Data Structure 2018
Algorithms and Data Structure 2018
 
Data Storytelling
Data StorytellingData Storytelling
Data Storytelling
 
Geospatial Information Management
Geospatial Information ManagementGeospatial Information Management
Geospatial Information Management
 
Big Data for Development
Big Data for DevelopmentBig Data for Development
Big Data for Development
 
Personality Detection via MBTI Test
Personality Detection via MBTI TestPersonality Detection via MBTI Test
Personality Detection via MBTI Test
 
Fog Computing
Fog ComputingFog Computing
Fog Computing
 
Seasonal ARIMA
Seasonal ARIMASeasonal ARIMA
Seasonal ARIMA
 
Optimization Techniques
Optimization TechniquesOptimization Techniques
Optimization Techniques
 
Network Address Translation (NAT)
Network Address Translation (NAT)Network Address Translation (NAT)
Network Address Translation (NAT)
 
From Image Processing To Computer Vision
From Image Processing To Computer VisionFrom Image Processing To Computer Vision
From Image Processing To Computer Vision
 
Spark SQL
Spark SQLSpark SQL
Spark SQL
 

Automata and Compiler 2020

  • 2. Content ■ Overview. ■ Automate. ■ Regular Expression. ■ Context Free Grammars. ■ Compiler. ■ MCQ. 22020
  • 4. Automata ■‫عن‬ ‫أمثلة‬‫األوتومات‬: –‫القهوة‬ ‫بيع‬ ‫آلة‬ ‫في‬ ‫الموجود‬ ‫الحاسب‬ –‫اآللي‬ ‫الصراف‬ ‫في‬ ‫الموجود‬ ‫الحاسب‬ATM ■‫خدم‬ ‫لتنفيذ‬ ‫المفاتيح‬ ‫لوحة‬ ‫نستخدم‬ ‫ثم‬ ‫ومن‬ ً‫أوال‬ ‫البطاقة‬ ‫نضع‬ ‫اآللي‬ ‫الصراف‬ ‫في‬‫ة‬ (،‫مبلغ‬ ‫سحب‬ ،‫الرصيد‬ ‫عن‬ ‫االستعالم‬.)... ■‫معين‬ ‫بتسلسل‬ ‫األحداث‬ ‫من‬ ‫عدد‬ ‫لدينا‬ ‫يكون‬ ‫أي‬. ■‫مرة‬ ‫كل‬ ‫في‬ ‫التسلسل‬ ‫بنفس‬ ‫السير‬ ‫الضروري‬ ‫من‬ ‫ليس‬ ‫ولكن‬. –ً‫مثال‬:‫الجا‬ ‫الحساب‬ ‫اختيار‬ ً‫دائما‬ ‫المفروض‬ ‫من‬ ‫ليس‬ ‫للصراف‬ ‫البطاقة‬ ‫ادخال‬ ‫بعد‬‫بل‬ ‫ري‬ ‫وبالت‬ ‫لنا‬ ‫بالنسبة‬ ‫مقبولتان‬ ‫العمليتين‬ ‫فكال‬ ‫التوفير‬ ‫حساب‬ ‫اختيار‬ ‫ممكن‬‫يمكن‬ ‫الي‬ ‫في‬ ‫مختلفين‬ ‫بفرعين‬ ‫الذهاب‬‫األتومات‬. 42020
  • 5. Automata ■‫الرياضي‬ ‫التعريف‬‫لألوتومات‬: ■ M = ( Q , Σ , δ , q0 , F) were – Q = { q0 , q1 , q2 , q3 } states – Σ = { 0 , 1 } domain – q0 = q0 initial state – F = { q0 } end state ■‫االصفار‬ ‫عدد‬ ‫فيها‬ ‫يكون‬ ‫التي‬ ‫السالسل‬ ‫جميع‬ ‫يقبل‬ ‫المثال‬‫والواحدات‬‫زوجي‬. 52020
  • 6. Different Kinds of Automata (Chomsky) (‫القواعد‬ ‫لتوصيف‬ ‫وهرميتها‬ ‫اللغات‬ ‫أنواع‬) 1. Regular Languages: (‫المنتظمة‬ ‫)اللغات‬ – Definition Tool: Finite Automata ( ‫األوتومات‬‫المنتهي‬ ) – Memory Type: no temporary memory – Ex: ATM, Search. 2. Context-Free Languages: (‫السياق‬ ‫عديمة‬ ‫)اللغات‬ – Definition Tool: Push down Automata (PDA) ( ‫األوتومات‬‫المكدس‬ ‫ذات‬ ) – Memory Type: stack – Ex: Syntax recognition of a specific language, Identify the conditional (IF) 3. Recursive Languages: – Definition Tool: Turing Machines – Memory Type: random access memory (RAM) – Ex: Recognize all languages regardless their form 62020
  • 7. Finite Automata ■‫أنواع‬‫االوتومات‬‫المنتهي‬:Finite Automata –‫االوتومات‬‫الحتمي‬ ‫المنتهي‬( :Deterministic finite automata DFA) ■‫هذا‬ ‫يحقق‬‫االوتومات‬‫حالة‬ ‫الى‬ ‫يكون‬ ‫معين‬ ‫رمز‬ ‫اجل‬ ‫ومن‬ ‫وحيدة‬ ‫حالة‬ ‫من‬ ‫االنتقال‬ ‫ان‬ ‫محددة‬ ‫وحيدة‬. –‫االوتومات‬‫المنتهي‬‫الالحتمي‬( :Non deterministic finite automata NFA) ■‫شرط‬ ‫يحقق‬ ‫ال‬ ‫الذي‬ ‫وهو‬‫االوتومات‬‫السابق‬. ■‫الرمز‬ ‫بنفس‬ ‫حالة‬ ‫من‬ ‫اكثر‬ ‫الى‬ ‫االنتقال‬ ‫نستطيع‬ ‫أي‬. 7 NFA2020
  • 8. Finite Automata ■‫مالحظات‬: –‫اجل‬ ‫من‬‫اوتومات‬‫نوع‬ ‫من‬DFA‫ما‬ ‫لسلسلة‬ ‫القبول‬ ‫خوارزمية‬ ‫بناء‬ ‫يمكن‬. ■‫تنتمي‬ ‫سلسلة‬ ‫كانت‬ ‫اذا‬ ‫معرفة‬ ‫خاللها‬ ‫من‬ ‫نستطيع‬ ‫التي‬ ‫الخوارزمية‬ ‫أي‬‫لالوتومات‬‫ا‬‫ال‬ ‫م‬. –‫حالة‬ ‫في‬ ‫اما‬NFA‫قبول‬ ‫خوارزمية‬ ‫بناء‬ ‫يمكن‬ ‫فال‬. ■‫جدا‬ ‫مكلفة‬ ‫ولكنها‬ ‫تراجعية‬ ‫قبول‬ ‫خوارزمية‬ ‫بناء‬ ‫يمكن‬. –‫على‬ ‫يبرهن‬NFA‫ل‬ ‫بتحويلها‬DFA‫لها‬ ‫مكافئ‬. ■‫لكل‬NFA‫هنالك‬DFA‫له‬ ‫مكافئ‬. 82020
  • 10. Finite Automata From NFA To DFA 102020
  • 11. Finite Automata From NFA To DFA 112020
  • 13. Notes ■‫من‬ ‫أنواع‬ ‫ثالثة‬ ‫هنالك‬‫األوتومات‬‫ومساوئه‬ ‫ميزاته‬ ‫له‬ ‫منها‬ ‫وكل‬: –DFA ■‫المزايا‬:‫بسهولة‬ ‫تحقيقها‬ ‫يمكن‬ ‫بسيطة‬ ‫قبول‬ ‫خوارزمية‬ ‫له‬. ■‫المساوئ‬:‫لتصميمه‬ ‫كبير‬ ‫جهد‬ ‫إلى‬ ‫يحتاج‬. –NFA ■‫المزايا‬:‫اإلنسان‬ ‫تفكير‬ ‫نمط‬ ‫من‬ ‫يقترب‬ ‫حيث‬ ‫التصميمية‬ ‫الناحية‬ ‫من‬ ‫أسهل‬. ■‫المساوئ‬:‫الط‬ ‫جميع‬ ‫اختبار‬ ‫يجب‬ ‫تراجعية‬ ‫خوارزمية‬ ‫فهي‬ ‫معقدة‬ ‫فيه‬ ‫القبول‬ ‫خوارزمية‬‫رق‬ ‫ال‬ ‫أو‬ ‫مقبول‬ ‫طريق‬ ‫وجود‬ ‫من‬ ‫للتأكد‬ ‫فيها‬.‫ب‬ ‫استبداله‬ ‫الى‬ ‫نلجأ‬ ‫لذا‬DFA‫مقابل‬ –ε-NFA ■‫المزايا‬:‫أنواع‬ ‫أقرب‬‫األوتومات‬‫البشري‬ ‫للتفكير‬(‫ال‬ ‫من‬ ‫أقرب‬NFA) ■‫المساوئ‬:‫الى‬ ‫يحول‬ ‫لذلك‬ ‫أعقد‬ ‫فيه‬ ‫القبول‬ ‫خوارزميات‬NFA‫الى‬ ‫ثم‬DFA 132020
  • 14. Question 1 ■‫أعط‬‫األوتومات‬‫المكافئ‬ ‫الحتمي‬ ‫المنتهي‬‫لألوتومات‬‫المنتهي‬‫الالحتمي‬‫التالي‬: 142020
  • 17. Regular Language ■‫النظامي‬ ‫التعبير‬: –‫لتمثيل‬ ‫مختصرة‬ ‫مبسطة‬ ‫طريقة‬ ‫عن‬ ‫عبارة‬ ‫هو‬‫االوتومات‬‫معينة‬ ‫لغة‬ ‫يوصف‬ ‫الذي‬ ‫من‬ ‫مجموعة‬ ‫على‬ ‫ويعتمد‬‫التراميز‬. ■‫المنتظمة‬ ‫اللغة‬: –‫ب‬ ‫تمثيلها‬ ‫يمكن‬ ‫لغة‬ ‫كل‬ ‫هي‬RE‫ب‬ ‫ممثلة‬ ‫تكون‬ ‫عمليا‬ ‫أي‬DFA. 172020
  • 18. Regular Language ■‫امثلة‬: –‫االبجدية‬ ‫لدينا‬ ‫كانت‬ ‫اذا‬σ = {𝑎}‫النظامية‬ ‫التعابير‬ ‫من‬ ‫العديد‬ ‫بناء‬ ‫نستطيع‬: ■a‫واحد‬ ‫حرف‬ ‫من‬ ‫المؤلفة‬ ‫السلسلة‬ ‫يكافئ‬. ■ε‫الخالية‬ ‫السلسلة‬ ‫يكافئ‬. ■a*‫تكرار‬ ‫من‬ ‫المؤلفة‬ ‫السلسلة‬ ‫او‬ ‫الخالية‬ ‫السلسلة‬ ‫يكافئ‬a‫أو‬ ‫أكبر‬ ‫المرات‬ ‫من‬ ‫عدد‬ ‫الواحد‬ ‫يساوي‬. ■a+‫تكرار‬ ‫من‬ ‫المؤلفة‬ ‫السلسلة‬ ‫يكافئ‬a‫الواحد‬ ‫يساوي‬ ‫أو‬ ‫أكبر‬ ‫المرات‬ ‫من‬ ‫عدد‬. ■an‫تكرار‬ ‫من‬ ‫المؤلفة‬ ‫السلسلة‬ ‫يكافئ‬a(n)‫فقط‬ ‫مرة‬. –‫األبجدية‬ ‫لدينا‬ ‫كانت‬ ‫اذا‬σ = {𝑎,𝑏}‫المنتظمة‬ ‫التعابير‬ ‫من‬ ‫العديد‬ ‫بناء‬ ‫نستطيع‬: ■a*b*:‫عملية‬ ‫عن‬ ‫الناتجة‬ ‫السلسلة‬ ‫يكافئ‬concatenation‫أي‬).(‫نظاميين‬ ‫تعبيرين‬ ‫بين‬. 182020
  • 19. Regular Language ■ L1 = { a*b* : a,b ∈ σ } – L1 is regular language. ■ L2 = { anbn : a,b ∈ σ , n>=0} – L2 is not regular language. ■‫اللغة‬ ‫ان‬ ‫نالحظ‬L2‫ير‬ ‫أن‬ ‫يجب‬ ‫مقبولة‬ ‫السلسة‬ ‫تكون‬ ‫حتى‬ ‫ألنه‬ ‫وذلك‬ ،‫ذاكرة‬ ‫الى‬ ‫تحتاج‬‫ى‬ b‫ورود‬ ‫مرات‬ ‫عدد‬ ‫بنفس‬a. 192020
  • 20. Regular Language ■ L1, L2: Regular Languages then: – L = L1 . L2 = { X.W were X ∈ L1 , W ∈ L2 } is Regular Language – L1 ∪ L2 is Regular Language – L1 , L2 is Regular Language – L1 ∩ L2 is Regular Language 202020
  • 21. Regular Expressions Exercise 1 ■ Suppose the only characters are 0 and 1. ■ A regular expression for strings containing 00 as a substring: (0 | 1)* 00 (0 | 1)* 11011100101 0000 11111011110011111 212020
  • 22. Regular Expressions Exercise 2 ■ Suppose the only characters are 0 and 1. ■ A regular expression for strings of length exactly four: (0|1)(0|1)(0|1)(0|1) (0|1){4} 0000 1010 1111 1000 222020
  • 23. Regular Expressions Exercise 3 ■ Suppose the only characters are 0 and 1. ■ A regular expression for strings that contain at most one zero: 1*(0 | ε)1* 1*0?1* 11110111 111111 0111 0 232020
  • 24. Regular Expressions Exercise 4 ■ Suppose that our alphabet is all ASCII characters. ■ A regular expression for even numbers: (+|-)?(0|1|2|3|4|5|6|7|8|9)*(0|2|4|6|8) (+|-)?[0123456789]*[02468] (+|-)?[0-9]*[02468] 42 +1370 -3248 -9999912 242020
  • 25. Regular Expressions Exercise 5 ■ Suppose that our alphabet is a, @, and ., where a represents “some letter” ■ regular expression for email addresses: a+(.a+)*@a+(.a+)+ cs143@cs.stanford.edu first.middle.last@mail.site.org barack.obama@whitehouse.gov 252020
  • 26. Regular Language & Automata ■‫التعبير‬(ab)‫مقابلته‬ ‫يمكن‬‫باالوتومات‬: ■‫التعبير‬(a + b)‫مقابلته‬ ‫يمكن‬‫باالوتومات‬: 262020
  • 27. Regular Language & Automata ■‫التعبير‬(a*)‫مقابلته‬ ‫يمكن‬‫باالوتومات‬: ■‫التعبير‬(a+)‫مقابلته‬ ‫يمكن‬‫باالوتومات‬: 272020
  • 28. Regular Language & Automata ■‫التعبير‬(θ)‫طريق‬ ‫وجود‬ ‫عدم‬ ‫عن‬ ‫تعبر‬(‫فارغة‬ ‫مجموعة‬ ‫هي‬ ‫الحلول‬ ‫مجموعة‬ ‫أي‬): ■‫التعبير‬(ε)‫رموز‬ ‫من‬ ‫رمز‬ ‫أي‬ ‫لوجود‬ ‫الحاجة‬ ‫دون‬ ‫عبره‬ ‫ننتقل‬ ‫مفتوح‬ ‫طريق‬ ‫وجود‬ ‫عن‬ ‫تعبر‬ ‫االبجدية‬: 282020
  • 29. Regular Language & Automata Example numbers ■ Draw a DFA equivalent to the following regular expression: 1) digit = [0-9] 2) nat = digit+ 3) signedNat = (+|-)? nat 4) number = signedNat ("." nat)? (E signedNat)? 292020
  • 30. nat = digit+ Regular Language & Automata Example numbers 302020
  • 31. signedNat = (+|-)? nat Regular Language & Automata Example numbers 312020
  • 32. signedNat ("." nat)? Regular Language & Automata Example numbers 322020
  • 33. number = signedNat ("." nat)? (E signedNat)? Regular Language & Automata Example numbers 332020
  • 34. Question 1 ■‫التي‬ ‫اللغات‬ ‫هي‬ ‫ما‬‫توصفها‬‫األبجدية‬ ‫على‬ ‫المعرفة‬ ‫التالية‬ ‫المنتظمة‬ ‫التعابير‬{a,b}: –a (a + b)* b –aab (aa|bb)* –(aa)* a 342020
  • 35. Question 1 ■‫التي‬ ‫اللغات‬ ‫هي‬ ‫ما‬‫توصفها‬‫األبجدية‬ ‫على‬ ‫المعرفة‬ ‫التالية‬ ‫المنتظمة‬ ‫التعابير‬{a,b}: –a (a + b)* b –aab (aa|bb)* –(aa)* a ■‫الجواب‬: –‫بالحرف‬ ‫كلماتها‬ ‫جميع‬ ‫تبدأ‬ ‫التي‬ ‫اللغة‬a‫بالحرف‬ ‫وتنتهي‬b –‫بالسلسلة‬ ‫كلماتها‬ ‫جميع‬ ‫تبدأ‬ ‫التي‬ ‫اللغة‬aab‫األقل‬ ‫على‬ ‫واحد‬ ‫تكرار‬ ‫يليها‬ ‫ثم‬ ‫ومن‬ ‫لثنائية‬aa‫من‬ ‫أو‬bb –‫حرف‬ ‫على‬ ‫إال‬ ‫كلماتها‬ ‫تحتوي‬ ‫ال‬ ‫التي‬ ‫اللغة‬a‫مفردا‬ ‫كلماتها‬ ‫طول‬ ‫ويكون‬ 352020
  • 36. Question 2 ■‫التالية‬ ‫اللغات‬ ‫تعرف‬ ‫أن‬ ‫يمكن‬ ‫التي‬ ‫المنتظمة‬ ‫التعابير‬ ‫هي‬ ‫ما‬: –‫األبجدية‬ ‫على‬ ‫اللغة‬{a,b,c}‫بالحرف‬ ‫كلماتها‬ ‫جميع‬ ‫تبدأ‬ ‫والتي‬a –‫مضاعفات‬ ‫من‬ ‫الصحيحة‬ ‫األعداد‬5 362020
  • 37. Question 2 ■‫التالية‬ ‫اللغات‬ ‫تعرف‬ ‫أن‬ ‫يمكن‬ ‫التي‬ ‫المنتظمة‬ ‫التعابير‬ ‫هي‬ ‫ما‬: –‫األبجدية‬ ‫على‬ ‫اللغة‬{a,b,c}‫بالحرف‬ ‫كلماتها‬ ‫جميع‬ ‫تبدأ‬ ‫والتي‬a –‫مضاعفات‬ ‫من‬ ‫الصحيحة‬ ‫األعداد‬5 ■‫الجواب‬: –a (a + b + c)* –(0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9)* 5 372020
  • 38. Pumping Lemma (‫الضخ‬ ‫)توطئة‬ ■‫لها‬ ‫الالزم‬ ‫والشرط‬ ‫المنتظمة‬ ‫اللغة‬ ‫بين‬ ‫رياضي‬ ‫تكافؤ‬ ‫عالقة‬ ‫تمثل‬ ■ L is Regular ➔ ∃ n >= 0 ∀ Z ∈ L |Z|>=n ∃ u, v, w : Z = u.v.w , |v|>=1 , |u.w|<=n ∀ i >= 0 u.vi.w ∈ L ■‫صحيح‬ ‫غير‬ ‫العكس‬ ‫ولكن‬ ‫الضخ‬ ‫توطئة‬ ‫تحقق‬ ‫حتما‬ ‫فهي‬ ‫منتظمة‬ ‫اللغة‬ ‫كانت‬ ‫إذا‬ ‫أي‬ 382020
  • 39. Pumping Lemma (‫الضخ‬ ‫)توطئة‬ ■‫يلي‬ ‫كما‬ ‫السابقة‬ ‫العالقة‬ ‫قراءة‬ ‫نستطيع‬:‫اللغة‬ ‫كانت‬ ‫إذا‬(L)‫ما‬ ‫تحقق‬ ‫حتما‬ ‫فهي‬ ‫منتظمة‬ ‫يلي‬: –‫ما‬ ‫ثابت‬ ‫هناك‬(n)، –‫يساوي‬ ‫أو‬ ‫أكبر‬ ‫طولها‬ ‫التي‬ ‫السالسل‬ ‫جميع‬ ‫أن‬ ‫بحيث‬(n) –‫إلى‬ ‫للتقسيم‬ ‫قابلة‬ ‫هي‬(3)‫أجزاء‬(u,v,w)‫بحيث‬(|v|>=1 , |u.w|<=n) –‫التقسيمات‬ ‫هذه‬ ‫من‬ ‫األقل‬ ‫على‬ ‫واحد‬ ‫أسلوب‬ ‫من‬ ‫بد‬ ‫وال‬ –‫انتماء‬ ‫على‬ ‫يحافظ‬(Z)‫على‬ ‫الضخ‬ ‫بعد‬ ‫اللغة‬ ‫إلى‬(v)‫من‬ ‫عدد‬ ‫بأي‬ ‫تكرارها‬ ‫أي‬ ‫المرات‬. 392020
  • 40. Pumping Lemma (‫الضخ‬ ‫)توطئة‬ ■‫مثال‬:‫المنتظمة‬ ‫اللغة‬ ‫لدينا‬ ‫كانت‬ ‫إذا‬: ■ L2 = { a*b* : a,b ∈ σ } ■‫وليكن‬ ‫ما‬ ‫ثابت‬ ‫أجل‬ ‫من‬ ‫فإنه‬(n=6)‫من‬ ‫أكبر‬ ‫طولها‬ ‫التي‬ ‫السالسل‬ ‫جميع‬ ‫تحقق‬ ‫أن‬ ‫يجب‬ (n)‫أي‬(Z ∈ L were |Z|>=6)‫السالسل‬ ‫هذه‬ ‫إحدى‬ ‫على‬ ‫وكمثال‬ ‫السابق‬ ‫الشروط‬: ■ z = aaabbb ■ u = aaa u.vi.w = aaa b….b bb ∈ L ■ v = b ■ w = bb i times ■‫السالسل‬ ‫كافة‬ ‫أجل‬ ‫من‬ ‫نبرهن‬ ‫لم‬ ‫ألننا‬ ‫برهانا‬ ‫يمثل‬ ‫ال‬ ‫السابق‬ ‫الكالم‬. ■‫القسم‬ ‫كررنا‬ ‫مهما‬ ‫اننا‬ ‫أي‬(v)‫للغة‬ ‫تنتمي‬ ‫الناتجة‬ ‫السلسلة‬ ‫تبقى‬ ‫سوف‬(L2) 402020
  • 41. Pumping Lemma (‫الضخ‬ ‫)توطئة‬ ■‫الضخ؟‬ ‫توطئة‬ ‫فكرة‬ ‫من‬ ‫نستفيد‬ ‫أن‬ ‫الممكن‬ ‫من‬ ‫كيف‬ –‫انفسنا‬ ‫على‬ ‫نوفر‬ ‫حتى‬ ‫منتظمة‬ ‫غير‬ ‫لغة‬ ‫هي‬ ‫ما‬ ‫لغة‬ ‫أن‬ ‫برهان‬ ‫في‬ ‫منها‬ ‫نستفيد‬ ‫الى‬ ‫اللغة‬ ‫هذه‬ ‫تحويل‬ ‫محاولة‬ ‫عملية‬(DFA) ■‫اللغة‬ ‫أن‬ ‫على‬ ‫الضخ‬ ‫توطئة‬ ‫خالل‬ ‫من‬ ‫نبرهن‬ ‫كيف‬(L)‫منتظمة؟‬ ‫ليست‬ –‫السابقة‬ ‫العالقة‬ ‫نفي‬ ‫خالل‬ ‫من‬ ‫ذلك‬ ‫يتم‬: ■ ∀ n >= 0 ■ ∃ Z ∈ L |Z|>=n L is not regular ■ ∀ u, v, w : Z = u.v.w , |v|>=1 , |u.w|<=n ■ ∃ i >= 0 u.vi.w ∉ L 412020
  • 42. Pumping Lemma (‫الضخ‬ ‫)توطئة‬ ■‫التالي‬ ‫بالشكل‬ ‫العالقة‬ ‫هذه‬ ‫وتقرأ‬:‫اللغة‬ ‫تمثل‬(L)‫ما‬ ‫تحقق‬ ‫إذا‬ ‫وفقط‬ ‫إذا‬ ‫منتظمة‬ ‫غير‬ ‫لغة‬ ‫يلي‬: –‫ثابت‬ ‫أي‬ ‫أجل‬ ‫من‬(n>=0)‫يكون‬ ‫بحيث‬ ‫اللغة‬ ‫من‬ ‫األقل‬ ‫على‬ ‫واحدة‬ ‫سلسلة‬ ‫هناك‬ (|z|>=n)‫إلى‬ ‫للتقسيم‬ ‫قابلة‬ ‫السلسلة‬ ‫هذه‬ ‫تكون‬ ‫بحيث‬(3)‫سالسل‬ ‫أي‬ ‫أجزاء‬ (u,v,w)‫بحيث‬(|v|=1 , |u.w|<=n) –‫ما‬ ‫ثابت‬ ‫هناك‬ ‫يكون‬ ‫أي‬ ‫يجب‬ ‫به‬ ‫التقسيم‬ ‫يتم‬ ‫أسلوب‬ ‫أي‬ ‫أجل‬ ‫ومن‬(i)‫على‬ ‫يحافظ‬ ‫ال‬ ‫على‬ ‫نضخ‬ ‫عندما‬ ‫اللغة‬ ‫إلى‬ ‫السلسلة‬ ‫انتماء‬(v)‫أي‬:∃ i >= 0 u.vi.w ∉ L 422020
  • 43. Pumping Lemma (‫الضخ‬ ‫)توطئة‬ ■‫مثال‬:‫أن‬ ‫على‬ ‫نبرهن‬ ‫كيف‬ ،‫التالية‬ ‫اللغة‬ ‫لدينا‬ ‫كانت‬ ‫اذا‬(L)‫منتظمة‬ ‫غير‬: ■ L2 = { anbn : a,b ∈ σ , n>=0} ■‫يكن‬ ‫مهما‬(n>=0)‫يساوي‬ ‫أو‬ ‫أكبر‬ ‫طولها‬ ‫سلسلة‬ ‫هناك‬ ‫فإن‬(n)‫الشكل‬ ‫لها‬ ‫بحيث‬: ■ aaa……….a bbb ……….b ■‫كانت‬ ‫فإذا‬(v=a+)‫كانت‬ ‫إذا‬ ‫وكذلك‬ ‫الشرط‬ ‫يكسر‬ ‫عليها‬ ‫الضخ‬ ‫فإن‬(v=b+)‫كانت‬ ‫أو‬(v=a+b+)‫هي‬ ‫وهذه‬ ‫ل‬ ‫الممكنة‬ ‫الحاالت‬ ‫جميع‬(v) ■‫اخر‬ ‫بمعنى‬ ‫أي‬:‫الت‬ ‫بالحاالت‬ ‫عام‬ ‫بشكل‬ ‫حصرها‬ ‫يمكن‬ ‫السلسلة‬ ‫لهذه‬ ‫الممكنة‬ ‫التقسيمات‬ ‫جميع‬ ‫إن‬‫الية‬: .1(v)‫تحوي‬(a)‫و‬(b)‫عدد‬ ‫يكن‬ ‫مهما‬(a)‫وعدد‬(b) .2(v)‫تحوي‬(a)‫العدد‬ ‫يكن‬ ‫مهما‬ ‫فقط‬ .3(v)‫تحوي‬(b)‫العدد‬ ‫يكن‬ ‫مهما‬ ‫فقط‬ ■‫على‬ ‫الضخ‬ ‫عند‬ ‫السابقة‬ ‫الثالث‬ ‫الحاالت‬ ‫أج‬ ‫من‬ ‫أنه‬ ‫ونالحظ‬(v)‫وبالتالي‬ ،‫للغة‬ ‫تنتمي‬ ‫ال‬ ‫السلسلة‬ ‫تصبح‬ ‫منتظمة‬ ‫غير‬ ‫اللغة‬ ‫تكون‬. 432020
  • 44. Pumping Lemma (‫الضخ‬ ‫)توطئة‬ ■‫مثال‬2:‫ان‬ ‫حيث‬ ‫منتظمة‬ ‫غير‬ ‫لغة‬ ‫انها‬ ‫برهن‬ ،‫التالية‬ ‫اللغة‬ ‫لدينا‬ ‫كانت‬ ‫اذا‬(XR)‫هي‬ ‫السلسلة‬ ‫معكوس‬(X) ■ L2 = { X XR : X ∈ (0+1)+} ■‫مالحظة‬:‫السلسلة‬ ‫معكوس‬(1)‫السلسة‬ ‫قراءة‬ ‫عن‬ ‫الناتجة‬ ‫السلسلة‬ ‫هي‬(1)‫باالتجاه‬ ‫العاكس‬ ■‫الحل‬:‫يكن‬ ‫مهما‬(n>=0)‫يساوي‬ ‫أو‬ ‫أكبر‬ ‫طولها‬ ‫سلسلة‬ ‫هناك‬ ‫فإن‬(n)‫الشكل‬ ‫ولها‬(X XR) ‫الحاالت‬ ‫تحت‬ ‫تنطوي‬ ‫الممكنة‬ ‫التقسيمات‬ ‫جميع‬ ‫فإن‬ ‫وعليه‬: .1‫كانت‬ ‫إذا‬(v)‫من‬ ‫جزء‬(X)‫على‬ ‫الضخ‬ ‫فإن‬(v)‫الشرط‬ ‫يكسر‬ .2‫كانت‬ ‫إذا‬(v)‫من‬ ‫جزء‬(XR)‫على‬ ‫الضخ‬ ‫فإن‬(v)‫الشرط‬ ‫يكسر‬ .3‫كانت‬ ‫إذا‬(v)‫من‬ ‫جزء‬(X)‫من‬ ‫وجزء‬(XR)‫على‬ ‫الضخ‬ ‫فإن‬(v)‫الشرط‬ ‫يكسر‬ ■‫اللغة‬ ‫وبالتالي‬(L)‫منتظمة‬ ‫غير‬ 442020
  • 45. Pumping Lemma Proof (‫العالقة‬ ‫)برهان‬ ■‫المنتظمة‬ ‫اللغة‬ ‫نقسم‬ ‫أننا‬ ‫هو‬ ‫نفعله‬ ‫ما‬(‫ال‬DFA)‫أقسام‬ ‫ثالثة‬ ‫إلى‬(u, v, w)‫أن‬ ‫أي‬: –‫الجزء‬(u)‫جزء‬ ‫عن‬ ‫يعبر‬‫األوتومات‬‫الحلقة‬ ‫قبل‬(‫اللفة‬.) –‫الجزء‬(v)‫الحلقة‬ ‫عن‬ ‫يعبر‬. –‫الجزء‬(w)‫جزء‬ ‫عن‬ ‫يعبر‬‫األوتومات‬‫الحلقة‬ ‫بعد‬. ■‫الحلقة‬ ‫كررنا‬ ‫مهما‬ ‫أنه‬ ‫نبرهن‬ ‫أن‬ ‫استطعنا‬ ‫فإذا‬(v)‫من‬ ‫ألغيناها‬ ‫أو‬‫األوتومات‬‫أي‬(v0)‫سوف‬ ‫تنتمي‬ ‫السلسلة‬ ‫تبقى‬‫لألوتومات‬‫ال‬ ‫ألن‬ ‫وذلك‬ ‫منتظمة‬ ‫لغة‬ ‫هي‬ ‫اللغة‬ ‫هذه‬ ‫تكون‬ ‫فسوف‬‫حلقة‬ ‫فيها‬ ‫تؤثر‬ ‫لم‬ –‫يؤثر‬ ‫لن‬ ‫ذلك‬ ‫ألن‬ ‫الحلقة‬ ‫هذه‬ ‫في‬ ‫مرورنا‬ ‫مرات‬ ‫عدد‬ ‫لمعرفة‬ ‫ذاكرة‬ ‫إلى‬ ‫نحتاج‬ ‫لن‬ ‫أننا‬ ‫أي‬ ‫مثل‬ ‫انتمائها‬ ‫عدم‬ ‫أو‬ ‫للغة‬ ‫السلسلة‬ ‫انتماء‬ ‫على‬a*b* ■‫منتظمة‬ ‫اللغة‬ ‫هذه‬ ‫تكون‬ ‫فلن‬ ‫اللغة‬ ‫في‬ ‫تؤثر‬ ‫الحلقة‬ ‫كانت‬ ‫إذا‬ ‫أنه‬ ‫نجد‬ ‫وبالعكس‬ –‫مثل‬ ‫ذاكرة‬ ‫الى‬ ‫نحتاج‬ ‫أن‬ ‫الممكن‬ ‫من‬ ‫أننا‬ ‫أي‬anbn 452020
  • 46. Pumping Lemma (‫الضخ‬ ‫)توطئة‬ ■‫منت‬ ‫لغة‬ ‫ليست‬ ‫ما‬ ‫لغة‬ ‫أن‬ ‫لبرهان‬ ‫حصرا‬ ‫المنتظمة‬ ‫اللغات‬ ‫في‬ ‫الضخ‬ ‫توطئة‬ ‫تستخدم‬،‫ظمة‬ ‫منتظمة‬ ‫لغة‬ ‫أن‬ ‫لبرهان‬ ‫استعمالها‬ ‫يمكن‬ ‫وال‬. 462020
  • 47. CONTEXT FREE GRAMMARS ‫السياق‬ ‫عديمة‬ ‫اللغات‬(‫السياق‬ ‫خارج‬) 472020
  • 48. Context Free Grammars (‫السياق‬ ‫عديمة‬ ‫)اللغات‬ ■‫القواعدي‬ ‫النموذج‬ ‫مفهوم‬: –‫ال‬ ‫مفهوم‬ ‫من‬ ‫تطورا‬ ‫أكثر‬ ‫مفهوم‬ ‫هو‬DFA‫هو‬ ‫اللغات‬ ‫من‬ ‫بسيط‬ ‫نمط‬ ‫عن‬ ‫يعبر‬ ‫الذي‬ ‫النمط‬ ‫هذا‬ ‫تعدي‬ ‫يستطيع‬ ‫وال‬ ‫المنتظمة‬ ‫اللغات‬. –‫ال‬ ‫يعد‬ ‫وبالتالي‬DFA‫قاصرا‬‫تحمل‬ ‫التي‬ ‫اللغات‬ ‫تمثيل‬ ‫عن‬‫ذاكرة‬‫الى‬ ‫نلجأ‬ ‫وبالتالي‬ ‫اللغات‬ ‫من‬ ‫النوع‬ ‫هذا‬ ‫لتمثيل‬ ‫القواعدي‬ ‫النموذج‬. ■‫السياق‬ ‫عديمة‬ ‫اللغات‬ ‫اذا‬: –‫من‬ ‫جديد‬ ‫نوع‬‫االوتومات‬ –‫بذاكرة‬ ‫مزود‬ ■‫ذاكرة‬ ‫الى‬ ‫تحتاج‬ ‫لغات‬ ‫تمثيل‬ ‫يستطيع‬ ■‫النمط‬ ‫من‬ ‫السالسل‬ ‫مثل‬(anbn) ■‫هذا‬ ‫ان‬ ‫حيث‬‫االوتومات‬‫الرموز‬ ‫اعداد‬ ‫يتذكر‬(a,b)‫عليه‬ ‫مرت‬ ‫التي‬ 482020
  • 49. Context Free Grammars (‫السياق‬ ‫عديمة‬ ‫)اللغات‬ ■ Non Terminal Symbols (V): –‫السالسل‬ ‫توليد‬ ‫عملية‬ ‫على‬ ‫تساعد‬ ‫التي‬ ‫البسيطة‬ ‫الحروف‬ ‫من‬ ‫مجموعة‬ ‫تمثل‬(‫أي‬ ‫المساعدة‬ ‫التوابع‬ ‫من‬ ‫مجموعة‬.) ■ Terminal Symbols (T): –‫اللغة‬ ‫سالسل‬ ‫منها‬ ‫تتألف‬ ‫التي‬ ‫الحروف‬ ‫من‬ ‫تتكون‬ ‫التي‬ ‫االبجدية‬ ‫تؤلف‬. ■ Production (P): –‫اللغة‬ ‫توليد‬ ‫قواعد‬ ‫هو‬. ■ Starting Symbol (S): –‫اللغة‬ ‫توليد‬ ‫عملية‬ ‫في‬ ‫منه‬ ‫تبدأ‬ ‫الذي‬ ‫البدائي‬ ‫الرمز‬. 492020
  • 50. Context Free Grammars Example 1 ■‫للغة‬ ‫القواعدي‬ ‫النموذج‬ ‫اوجد‬: – L = { anbn : a,b ∈ σ , n>=0} ■‫الحل‬: – L = {V , T , S , P} where ■ S → a S b (1) ■ S → a b (2) – V = {S} – S = {S} – T = {a,b} 502020
  • 51. Context Free Grammars Example 2 ■‫اللغة‬ ‫لدينا‬ ‫ليكن‬L‫بالشكل‬ ‫اللغة‬ ‫هذه‬ ‫تعريف‬ ‫نستطيع‬ ،‫الحسابية‬ ‫للتعابير‬ ‫الممثلة‬ ‫التالي‬ ‫القواعدي‬: – Exp → Exp Op Exp | ( Exp ) | id – Op → + | - | * | / ■‫الحل‬: – V = {Exp, Op} – T = { + , - , / , id , ( , ) } – S = {Exp} 512020
  • 52. Context Free Grammars Left Most Derivation ■ Exp → Exp Op Exp | ( Exp ) | id ■ Op → + | - | * | / ■‫التالية‬ ‫السلسلة‬ ‫نشتق‬ ‫كيف‬:id + id * id –‫ال‬ ‫نعوض‬(None Terminal Symbol)‫وهكذا‬ ‫أوال‬ ‫اليسار‬ ‫اقصى‬ ‫في‬ ‫الموجود‬.. –‫التالية‬ ‫المراحل‬ ‫عبر‬ ‫ذلك‬ ‫يتم‬: ■ Exp → Exp Op Exp → id Op Exp → id + Exp → id + Exp Op Exp → id + id Op Exp → id + id * Exp → id + id * id 522020
  • 53. Context Free Grammars Right Most Derivation ■ Exp → Exp Op Exp | ( Exp ) | id ■ Op → + | - | * | / ■‫على‬ ‫مبدؤها‬ ‫ينطوي‬ ‫االشتقاق‬ ‫في‬ ‫أخرى‬ ‫خوارزمية‬ ‫هنالك‬: ■‫ال‬ ‫تعويض‬(None Terminal Symbol)‫وهكذا‬ ‫أوال‬ ‫اليمين‬ ‫اقصى‬ ‫في‬ ‫الموجود‬... ■ Exp → Exp Op Exp → Exp Op id → Exp * id → Exp Op Exp * id → Exp Op id * id → Exp + id * id → id + id * id 532020
  • 54. Context Free Grammars Ambiguity ■‫هي‬ ‫السابق‬ ‫المثال‬ ‫في‬ ‫اللغة‬ ‫ان‬ ‫على‬ ‫نالحظ‬‫غامضة‬ ‫لغة‬ –‫نفس‬ ‫الشتقاق‬ ‫طريقتين‬ ‫هنالك‬ ‫االشتقاق‬ ‫خوارزمية‬ ‫نفس‬ ‫أجل‬ ‫من‬ ‫ألنه‬ ‫وذلك‬ ‫قابلية‬ ‫مع‬ ‫يتناسب‬ ‫ال‬ ‫الغموض‬ ‫وهذا‬ ‫السلسلة‬‫االوتومات‬‫البرمجي‬ ‫لإلسقاط‬. 542020
  • 55. Parse Tree Example (number – number ) * number exp  exp op exp  exp op number  exp * number  ( exp ) * number  ( exp op exp ) * number  ( exp op number ) * number  ( exp – number ) * number  (number – number ) * number 552020
  • 56. Abstract Syntax Trees ■ A parse tree contains much more information than is necessary for a compiler to produce executable code. ■ Syntax trees contain just the information needed for translation. 562020
  • 57. Abstract Syntax Trees Example ■ Show the Parse and Syntax Trees of the derivation of the string 3 + 4 using the grammar. exp → exp op exp | ( exp ) | number op → + | - | * | / Parse Tree Syntax Tree 572020
  • 58. Context Free Grammars Ambiguity Example ■ Example 1 The Grammar – exp → exp op exp | ( exp ) | number – op → + | - | * | / ■ and the string: 34 – 3 * 42 582020
  • 59. Context Free Grammars Ambiguity Example ■ exp  exp op exp  exp op exp op exp  number op exp op exp  number - exp op exp  number - number op exp  number - number * exp  number - number * number ■ The expression evaluates to (34-3)*42 = 1302 ! 59 Parse Tree Abstract Syntax Tree 2020
  • 60. Context Free Grammars Ambiguity Example ■ exp  exp op exp  number op exp  number - exp  number - exp op exp  number - number op exp  number - number * exp  number - number * number ■ The expression evaluates to 34-(3*42) = - 92 60 Parse Tree Abstract Syntax Tree 2020
  • 61. Context Free Grammars Dealing with ambiguity ■ Disambiguating rules : state a rule that specifies in each ambiguous case which of the parse trees (or syntax trees) is the correct one. – Advantage: it corrects the ambiguity without changing the grammar. – Disadvantage: syntax is no longer given by the grammar alone. ■ Changing the grammar into a form that forces the construction of the correct parse tree. 612020
  • 62. Left-Recursion Removal A → A α | β β does not begin with A A → β is the base case A → A α is the recursive case A → β A' A' → α A' | ε exp → term exp' exp' → addop term exp' | ε To remove the recursion we re-write the rule : Example exp → exp addop term | term 622020
  • 64. Compiler Definition ■‫المترجم‬ ‫تعريف‬: –‫المترجم‬ ‫ندعوها‬ ،‫البرمجة‬ ‫عملية‬ ‫في‬ ‫جدا‬ ‫ضرورية‬ ‫أداة‬ ‫المبرمج‬ ‫يستخدم‬. –‫الم‬ ‫عالية‬ ‫برمجية‬ ‫بلغة‬ ‫نكتبه‬ ‫الذي‬ ‫البرمجي‬ ‫النص‬ ‫يترجم‬ ‫حاسوبي‬ ‫برنامج‬ ‫هو‬‫ستوى‬ (C, Pascal, C++, C#, Java, …)‫قبل‬ ‫من‬ ‫للتنفيذ‬ ‫قابلة‬ ‫تعليمات‬ ‫مجموعة‬ ‫الى‬ ‫الحاسوب‬. –‫كانت‬ ‫سواء‬ ‫المستوى‬ ‫منخفضة‬ ‫بلغة‬ ‫مكتوبة‬ ‫التنفيذية‬ ‫التعليمات‬ ‫هذه‬ ‫تكون‬‫ثنائية‬ ‫لغة‬ ‫و‬ ‫اصفار‬ ‫من‬ ‫مؤلفة‬‫واحدات‬‫تجميع‬ ‫لغة‬ ‫او‬(Assembly.) –‫المستو‬ ‫عالية‬ ‫أخرى‬ ‫لغة‬ ‫الى‬ ‫المستوى‬ ‫عالية‬ ‫لغة‬ ‫من‬ ‫مترجمات‬ ‫بناء‬ ‫أيضا‬ ‫يمكن‬‫ى‬. (‫البرمجية‬ ‫البيئة‬ ‫تغيير‬) ■‫المصدري‬ ‫البرنامج‬ ‫تعريف‬(Source Program:) –‫حاسوبي‬ ‫برنامج‬ ‫تؤلف‬ ‫التي‬ ‫البرمجية‬ ‫النصوص‬ ‫مجموعة‬. 642020
  • 65. Compiler Definition ■‫واحد‬ ‫بأن‬ ‫اثنين‬ ‫بعنصرين‬ ‫تتعلق‬ ‫المترجم‬ ‫بناء‬ ‫عملية‬ ‫إن‬: –‫المبرمج‬ ‫يستخدمها‬ ‫الذي‬ ‫المستوى‬ ‫عالية‬ ‫المصدرية‬ ‫البرمجة‬ ‫لغة‬. –‫عليه‬ ‫البرنامج‬ ‫تشغيل‬ ‫سيجري‬ ‫الذي‬ ‫التشغيل‬ ‫نظام‬. ■‫مثال‬: –‫لغة‬ ‫مترجم‬ ‫يختلف‬C++‫نظام‬ ‫على‬ ‫يعمل‬ ‫الذي‬windows‫لغة‬ ‫مترجم‬ ‫عن‬C++‫الذي‬ ‫نظام‬ ‫على‬ ‫يعمل‬Linux‫ف‬ ‫مختلفة‬ ‫تنفيذية‬ ‫تشغيل‬ ‫تعليمات‬ ‫توليد‬ ‫لضرورة‬ ‫نظرا‬ ،‫ي‬ ‫اللغة‬ ‫نفس‬ ‫عن‬ ‫نتكلم‬ ‫اننا‬ ‫من‬ ‫بالرغم‬ ،‫الحالتين‬ ‫هاتين‬. –‫لغة‬ ‫مترجم‬ ‫يختلف‬C++‫لغة‬ ‫مترجم‬ ‫عن‬Pascal‫يعمالن‬ ‫المترجمان‬ ‫كان‬ ‫ولو‬ ‫حتى‬ ‫نظام‬ ‫على‬Windows‫مختلفتين‬ ‫برمجيتين‬ ‫لغتين‬ ‫نترجم‬ ‫اننا‬ ‫نظرا‬ ،. 652020
  • 67. Compiler Structure ■‫أساسيتين‬ ‫مرحلتين‬ ‫من‬ ‫الترجمة‬ ‫عملية‬ ‫تتألف‬: .1‫التحليل‬ ‫مرحلة‬(Analysis Phase:) ■‫ودالالتها‬ ‫صحتها‬ ‫من‬ ‫والتأكد‬ ‫وجمل‬ ‫كلمات‬ ‫الى‬ ‫البرمجي‬ ‫النص‬ ‫تقسيم‬ ‫فيها‬ ‫يجري‬. .2‫التركيب‬ ‫مرحلة‬(Synthesis Phase:) ■‫أخرى‬ ‫بلغة‬ ‫ولكن‬ ‫المصدري‬ ‫النص‬ ‫داللة‬ ‫بنفس‬ ‫جديد‬ ‫برمجي‬ ‫نص‬ ‫تركيب‬ ‫فيها‬ ‫يجري‬ ‫التشغيل‬ ‫نظام‬ ‫يفهمها‬. 672020
  • 68. Compiler Structure Analysis Phase (‫التحليل‬ ‫)مرحلة‬ 682020
  • 69. Natural Language Translation 69 The hungry teacher is eating a banana and reading a book The hungry teacher is eating a book and reading a banana The hungry teacher are eat a book and reading an banana Teh mungry teamher are eak a mook and seading an banban Check for and correct LEXICAL (spelling) errors Check for and correct SYNTACTIC (grammar) errors Check for and correct SEMANTIC (meaning) errors TRANSLATE ‫يأكل‬ ‫الجائع‬ ‫األستاذ‬‫موزة‬‫كتاب‬ ‫ويقرأ‬ 2020
  • 70. Compiler Structure Analysis Phase (‫التحليل‬ ‫)مرحلة‬ ■‫خطوات‬ ‫ثالث‬ ‫تحوي‬ ‫التحليل‬ ‫مرحلة‬: .1‫او‬ ‫اللفظي‬ ‫التحليل‬‫المفرداتي‬: ■‫ال‬ ‫ام‬ ‫البرمجة‬ ‫لغة‬ ‫في‬ ‫موجودة‬ ‫الكلمة‬ ‫كانت‬ ‫ما‬ ‫اذا‬ ‫معرفة‬ ‫أي‬. .2‫القواعدي‬ ‫التحليل‬: ■‫ال‬ ‫على‬ ‫التعرف‬ ‫أي‬syntax‫المحكية‬ ‫اللغات‬ ‫في‬ ‫كما‬ ‫اللغة‬ ‫كتابة‬ ‫قواعد‬ ‫أي‬ ،. ■‫مثال‬: –‫يأتي‬ ‫ان‬ ‫يجب‬ ‫العربية‬ ‫اللغة‬ ‫في‬(‫فعل‬–‫فاعل‬–‫به‬ ‫مفعول‬.) –‫البرمجة‬ ‫لغات‬ ‫في‬:if ( statement ) .3‫الداللي‬ ‫التحليل‬: ■‫دالليا‬ ‫ليس‬ ‫لكن‬ ‫و‬ ‫قواعديا‬ ‫صحيحة‬ ‫تكون‬ ‫ان‬ ‫الممكن‬ ‫من‬ ‫الجملة‬ ‫ان‬ ‫اي‬. ■‫مثال‬: –‫التفاحة‬ ‫الولد‬ ‫اكل‬. –‫المقعد‬ ‫الولد‬ ‫اكل‬. 702020
  • 71. Compiler Structure Analysis Phase (‫التحليل‬ ‫)مرحلة‬ ■‫خطوات‬ ‫ثالث‬ ‫تحوي‬ ‫التحليل‬ ‫مرحلة‬: .1‫المعجمي‬ ‫التحليل‬ ‫مرحلة‬(Lexical Analysis - Scanner:) ■‫الدخل‬ ‫يقرأ‬ ‫أن‬ ‫مهمته‬input‫الى‬ ‫ويحلله‬tokens‫من‬ ‫محدد‬ ‫جزء‬ ‫تمثل‬ ‫الكلمات‬ ‫هذه‬ ‫من‬ ‫وكل‬ ‫اللغة‬ ‫في‬ ‫الثابتة‬ ‫الكلمات‬ ‫من‬ ‫ام‬ ‫متغير‬ ‫أكان‬ ‫سواء‬ ‫اللغة‬(reserved word)‫بمسح‬ ً‫ايضا‬ ‫ويقوم‬ ‫الـ‬ ‫وحفظ‬ ‫المسافات‬tokens‫الرموز‬ ‫جدول‬ ‫في‬(symboltable.) .2‫الجملة‬ ‫بناء‬ ‫مرحلة‬(Syntax Analysis - Parser:) ■‫الـ‬ ‫يأخذ‬ ‫ان‬ ‫مهمته‬tokens‫مرحلة‬ ‫عن‬ ‫الناتجة‬(Lexical Analysis)‫برمجية‬ ‫جمل‬ ‫في‬ ‫ويكونها‬ ‫اللغة‬ ‫قواعد‬ ‫أساس‬ ‫على‬ ‫صحتها‬ ‫ويختبر‬. ■‫يدعى‬ ‫داللي‬ ‫هيكل‬ ‫عنها‬ ‫ينتج‬ ‫المرحلة‬ ‫هذه‬(semantic structure)‫البرمجية‬ ‫الجمل‬ ‫وتكون‬ ‫ب‬ ‫يسمى‬ ‫شجري‬ ‫شكل‬ ‫على‬(parser tree.) .3‫الداللي‬ ‫التحليل‬ ‫مرحلة‬(Semantic Analysis – Intermediate Code Generator:) ■‫لن‬ ‫القيمة‬ ‫اسناد‬ ‫صحة‬ ‫مثل‬ ،‫بالمنطق‬ ‫المتعلقة‬ ‫األخطاء‬ ‫من‬ ‫التحقق‬ ‫يتم‬ ‫المرحلة‬ ‫هذه‬ ‫في‬‫وع‬ ‫وغيرها‬ ‫المتغير‬. 712020
  • 72. Compiler Structure Synthesis Phase (‫التركيب‬ ‫)مرحلة‬ ■‫المتوسطة‬ ‫اللغة‬ ‫تحويل‬ ‫يتم‬ ‫المرحلة‬ ‫هذه‬ ‫في‬(Intermediate Language)‫تفهمها‬ ‫لغة‬ ‫الى‬ ‫اآللة‬(Machine Language)‫التالي‬ ‫النحو‬ ‫على‬ ‫ذلك‬ ‫ويتم‬: .1‫األكواد‬ ‫تحسين‬ ‫مرحلة‬(Code Optimization:) ■‫بأن‬ ‫والتأكد‬ ‫البرنامج‬ ‫وتطوير‬ ‫التكرار‬ ‫وابعاد‬ ‫الكود‬ ‫تحسين‬ ‫مسألة‬ ‫تتولى‬ ‫الخطوة‬ ‫هذه‬‫يكون‬ ‫آخر‬ ‫مترجم‬ ‫عن‬ ‫مترجم‬ ‫تميز‬ ‫التي‬ ‫هي‬ ‫الخطوة‬ ‫هذه‬ ‫و‬ ‫حاالته‬ ‫أحسن‬ ‫في‬ ‫البرنامج‬. .2‫األكواد‬ ‫د‬ّ‫مول‬ ‫مرحلة‬(Code Generation:) ■‫اآللة‬ ‫تفهمه‬ ‫شكل‬ ‫الى‬ ‫نهائي‬ ‫بشكل‬ ‫الكود‬ ‫تحويل‬ ‫يتم‬ ‫هنا‬. 722020
  • 74. Compiler Structure (‫موازية‬ ‫)مراحل‬ ■‫الرموز‬ ‫جدول‬ ‫إدارة‬(Symbol Table) –‫المترجمات‬ ‫في‬ ‫المستخدمة‬ ‫المعطيات‬ ‫بنى‬ ‫اهم‬ ‫احد‬ ‫الرموز‬ ‫جدول‬ ‫يشكل‬. –‫انماطها‬ ‫مع‬ ‫المصدري‬ ‫البرمجي‬ ‫النص‬ ‫ضمن‬ ‫المعرفة‬ ‫المتحوالت‬ ‫تخزين‬ ‫فيه‬ ‫يتم‬. –‫المتحول‬ ‫مدى‬ ‫او‬ ‫رؤية‬ ‫مجال‬ ‫تحديد‬ ‫في‬ ‫يستخدم‬. ■‫األخطاء‬ ‫إدارة‬(Error Handling) –‫النص‬ ‫كتابة‬ ‫اثناء‬ ‫المبرمج‬ ‫ارتكبها‬ ‫أخطاء‬ ‫والتركيب‬ ‫التحليل‬ ‫عمليات‬ ‫عن‬ ‫تنتج‬‫البرمجي‬. ■‫داللية‬ ‫أخطاء‬ ،‫الجمل‬ ‫بناء‬ ‫في‬ ‫أخطاء‬ ،‫الكلمات‬ ‫كتابة‬ ‫في‬ ‫أخطاء‬... –‫الهدف‬ ‫يبقى‬ ‫لكن‬ ‫مختلف‬ ‫بشكل‬ ‫األخطاء‬ ‫أنواع‬ ‫من‬ ‫نوع‬ ‫كل‬ ‫مع‬ ‫التعامل‬ ‫يجري‬ ‫االخطاء‬ ‫وجود‬ ‫الى‬ ‫إشارة‬ ‫المبرمج‬ ‫إعطاء‬ ‫هو‬ ‫األخطاء‬ ‫لمعالجة‬.‫الخطأ‬ ‫سبب‬ ‫وتوضيح‬ (‫اإلمكان‬ ‫قدر‬.) 742020
  • 75. Interpreter (‫)المفسر‬ ■‫خطوة‬ ‫خطوة‬ ‫ينفذه‬ ‫ولكن‬ ‫البرنامج‬ ‫يحول‬ ‫ال‬. 752020
  • 76. Compiler V.S. Interpreter ■ The machine language target program produced by a compiler is usually much faster than an interpreter at mapping inputs to outputs. ■ An interpreter, however, can usually give better error diagnostics than a compiler, because it executes the source program statement by statement. 762020
  • 77. Compiler Kinds ■‫معنى‬ ‫ما‬multi-pass compiler‫و‬one pass compiler‫؟‬ –One pass compiler: ■‫التحليل‬ ‫عمل‬ ‫يتم‬‫المفرداتي‬‫والتحلي‬ ‫التجميع‬ ‫فيها‬ ‫يتم‬ ‫التي‬ ‫اللحظة‬ ‫نفس‬ ‫في‬‫ل‬ ‫األعل‬ ‫من‬ ‫هذه‬ ‫المسح‬ ‫عملية‬ ‫ثم‬ ‫الداللي‬ ‫التحليل‬ ‫الى‬ ‫مباشرة‬ ‫االنتقال‬ ‫ثم‬ ‫القواعدي‬‫ى‬ ‫لالسفل‬. ■‫و‬ ‫بقراءة‬ ‫يعني‬ ‫والداللي‬ ‫والقواعدي‬ ‫اللفظي‬ ‫التحليل‬ ‫على‬ ‫المرور‬ ‫يعني‬ ‫الوحيد‬ ‫المرور‬‫حدة‬. –Multi pass compiler: ■‫اكتر‬ ‫وقت‬ ‫وتتطلب‬ ‫مرة‬ ‫من‬ ‫اكتر‬ ‫البرنامج‬ ‫مسح‬ ‫يتم‬. 772020
  • 78. Backtracking Example ■‫التالية‬ ‫القواعد‬ ‫لدينا‬ ‫لتكن‬.‫يعبر‬ ‫حيث‬S‫البداية‬ ‫رمز‬ ‫عن‬.‫وحيث‬A‫تحليل‬ ‫ونريد‬ ‫وسيط‬ ‫رمز‬ ‫الكلمة‬w=acb ■ S → aAb ■ A → d | c ■‫وهوة‬ ‫الشجرة‬ ‫جذر‬ ‫من‬ ‫لنبدأ‬S.‫الكلمة‬ ‫قراءة‬ ‫فتؤدي‬a‫الشجرة‬ ‫بناء‬ ‫عملية‬ ‫في‬ ‫التقدم‬ ‫الى‬ ‫على‬ ‫لنحصل‬ 782020
  • 79. Backtracking Example ■‫قراءة‬ ‫عند‬ ‫ولكن‬c‫الثاني‬ ‫او‬ ‫األولى‬ ‫القاعدة‬ ‫أخذ‬ ‫علينا‬ ‫كان‬ ‫إذا‬ ‫فيما‬ ‫تحديد‬ ‫نستطيع‬ ‫لن‬‫ة‬. ■‫وهي‬ ‫التالية‬ ‫الكلمة‬ ‫فراءة‬ ‫علينا‬ ‫يتوجب‬ ‫االمر‬ ‫ولتحديد‬(b) ■‫ونتابع‬ ‫األولى‬ ‫القاعدة‬ ‫نجرب‬ ‫بحيث‬ ‫الخلف‬ ‫الى‬ ‫الرجوع‬ ‫إمكانية‬ ‫وإعطاء‬. ■‫الق‬ ‫مع‬ ‫الجزء‬ ‫هذا‬ ‫بناء‬ ‫ونعيد‬ ‫الخلف‬ ‫الى‬ ‫نعود‬ ‫الصحيح‬ ‫بالشكل‬ ‫االمر‬ ‫يجر‬ ‫لم‬ ‫حال‬ ‫وفي‬‫اعدة‬ ‫الثانية‬. ■‫التحليل‬ ‫عملية‬ ‫كلفة‬ ‫ارتفاع‬ ‫الى‬ ‫الخلف‬ ‫الى‬ ‫العودة‬ ‫تؤدي‬(backtracking) 792020
  • 80. Backtracking Example ■‫بم‬ ‫السابقة‬ ‫المشكلة‬ ‫لحل‬ ‫نحتاجها‬ ‫التي‬ ‫النازل‬ ‫التحليل‬ ‫منهجية‬ ‫نلخص‬ ‫ان‬ ‫يمكننا‬‫يلي‬ ‫ا‬: –‫لنا‬ ‫يحدد‬ ‫جدول‬ ‫الى‬ ‫نحتاج‬.‫ما‬ ‫كلمة‬ ‫بقراءة‬ ‫قمنا‬ ‫حال‬ ‫في‬.‫مرحلة‬ ‫في‬ ‫كنا‬ ‫حال‬ ‫وفي‬ ‫وسيط‬ ‫برمز‬ ‫ممثلة‬ ‫للشجرة‬ ‫معينة‬ ‫عقدة‬ ‫عند‬ ‫معينة‬ ‫اشتقاق‬.‫الخ‬ ‫القاعدة‬ ‫هي‬ ‫ما‬‫اصة‬ ‫الشجرة‬ ‫بناء‬ ‫لمتابعة‬ ‫اختيارها‬ ‫يجب‬ ‫التي‬ ‫الرمز‬ ‫بهذا‬. 802020
  • 81. First Sets (‫األولى‬ ‫الرموز‬ ‫)مجموعة‬ ■ The First Set of a nonterminal A is the set of terminals that may appear as the first symbols in a string derived from A. A → BCD B → b | ε C → cd | ε D → e | ε First (A) = { b , c , e , ε } First (B) = { b, ε } First (C) = { c , ε } First (D) = { e , ε } A  b A  bcd A  bcde A  be A  cd A  cde A  e A  ε 812020
  • 82. First Sets (‫األولى‬ ‫الرموز‬ ‫)مجموعة‬ ■ The First Set of a nonterminal A is the set of terminals that may appear as the first symbols in a string derived from A. Let X be a grammar symbol (a terminal or nonterminal) or ε. Then the set First (X) consisting of terminals, and possibly ε, is defined as follows: 1. If X is a terminal or ε, then First (X) = {X} 2. If X is a nonterminal, then 1. for each production choice X → X1 X2 … Xn , First (X) contains First (X1) – {ε}. 2. and if for some i < n, all the sets First (X1), …, First (Xi) contain ε, then First (X) contains First (Xi+1) – {ε}. 3. and if all the sets First (X1), …, First (Xn) contain ε, then First (X) also contains ε. 822020
  • 83. First Sets Example 1 Grammar Rule Pass 1 Pass 2 Pass 3 exp → exp addop term exp → term First (exp) = { ( , number} addop → + First (addop) = {+} addop → - First (adop) = {+,-} term → term mulop factor term → factor First (trem) = { ( , number} mulop → * First (mulop) = {*} factor → ( exp ) First (factor) = { ( } factor → number First (factor) = { ( , number} exp → exp addop term| term addop → + | - term → term mulop factor| factor mulop → * factor → ( exp ) | number 832020
  • 84. First Sets Example 2 Grammar Rule Pass 1 Pass 2 statement → if-stmt First (statement) = {if , other} statement → other First (statement) = {other} if-stmt → if ( exp ) statement else-part First (if-stmt) = {if} else-part → else statement First (else-part) = {else} else-part → ε First (else-part) = {else, ε} exp → 0 First (exp) = {0} exp → 1 First (exp) = {0,1} statement → if-stmt | other If-stmt → if ( exp ) statement else-part else-part → else statement | ε exp → 0 | 1 842020
  • 85. First Sets More Examples 85 E → TE’ E’ → +TE’ | ε T → FT’ T’ → *FT’ | ε F → (E) | id S → ABC A → aA | ε B → bB | cB | ε C → de | da | dA 2020
  • 86. First Sets More Examples 86 E → TE’ E’ → +TE’ | ε T → FT’ T’ → *FT’ | ε F → (E) | id First (E) = { ( , id } First (E’) = { * , ε } First (T) = { ( , id } First (T’) = { * , ε } First (F) = { ( , id } S → ABC A → aA | ε B → bB | cB | ε C → de | da | dA First (S) = { a , b , c , d } First (A) = { a , ε } First (B) = { b , c , ε } First (C) = { d } 2020
  • 87. Follow Sets (‫الالحقة‬ ‫الرموز‬ ‫)مجموعة‬ ■ The Follow Set of a nonterminal A is the set of terminals that may appear after A in a string derived from the start symbol. A → BCD B → b | ε C → cd | ε D → e | ε Follow (A) = $ Follow (B) = First (CD) – {ε} + Follow (A) = {c, e, ε} – {ε} + {$} = {c, e, $} Follow (C) = First (D) – {ε} + Follow (A) = {$, e} Follow (D) = Follow (A) = {$} 872020
  • 88. Follow Sets (‫الالحقة‬ ‫الرموز‬ ‫)مجموعة‬ ■ The Follow Set of a nonterminal A is the set of terminals that may appear after A in a string derived from the start symbol. Given a nonterminal A, the set Follow(A), consisting of terminals, and possibly $, is defined as follows: 1. If A is the start symbol, then $ is in Follow(A) 2. If there is a production B → α A γ, then First (γ) – {ε} is in Follow (A). 3. If there is a production B → α A γ such that ε is in First (γ), then Follow (A) contains Follow (B). 882020
  • 89. Follow Sets Example Grammar Rule Pass 1 Pass 2 exp → exp addop term Follow (exp) = {$, + , -} Follow (addop) = { ( , number} Follow (term) = {$, + , -} Follow (term) = { $, + , - , *, ) } exp → term term → term mulop factor Follow (term) = {$,+,-, *} Follow (mulop) = { ( , number} Follow (factor) = {$, +, -, *} Follow (factor) = { $, + , - , *, ) } term → factor factor → ( exp ) Follow (exp) = { $, + , - , ) } exp → exp addop term| term addop → + | - term → term mulop factor| factor mulop → * factor → ( exp ) | number First (exp) = { ( , number} First (term) = { ( , number} First (factor) = { ( , number} First (adop) = {+,-} First (mulop) = {*} 892020
  • 90. Follow Sets More Example 90 E → TE’ E’ → +TE’ | ε T → FT’ T’ → *FT’ | ε F → (E) | id S → aSb | cd | SAe A → aAdB | ε B → bb 2020
  • 91. Follow Sets More Example 91 E → TE’ E’ → +TE’ | ε T → FT’ T’ → *FT’ | ε F → (E) | id First (E) = { ( , id } First (E’) = { + , ε } First (T) = { ( , id } First (T’) = { * , ε } First (F) = { ( , id } Follow (E) = { ) , $ } Follow (E’) = { ) , $ } Follow (T) = { + , ) , $ } Follow (T’) = { + , ) , $ } Follow (F) = { * , + , ) , $ } First (S) = { a , c } First (A) = { a , ε } First (B) = { b } Follow (S) = { b , a , e , $ } Follow (A) = { e , d , $ } Follow (B) = { e , d , $ } S → aSb | cd | SAe A → aAdB | ε B → bb 2020
  • 92. Types of Parsing ■ Syntax analyzers follow production rules defined by means of context-free grammar. ■ The way the production rules are implemented (derivation) divides parsing into two types: – Top-down parsing – Bottom-up parsing 922020
  • 93. Types of Parsing ■ Top-down Parsing: – When the parser starts constructing the parse tree from the start symbol and then tries to transform the start symbol to the input, it is called top-down parsing. ■ Bottom-up Parsing: – As the name suggests, bottom-up parsing starts with the input symbols and tries to construct the parse tree up to the start symbol. 932020
  • 94. Types of Parsing Example ■ Input string: a + b * c ■ Production rules: – S → E – E → E + T – E → E * T – E → T – T → id 942020
  • 95. Types of Parsing Example ■ Let us start bottom-up parsing: a + b * c ■ Read the input and check if any production matches with the input: – a + b * c – T + b * c – E + b * c – E + T * c – E * c – E * T – E – S 952020
  • 96. LL(1) Simple Predictive Parser ■ Top-down, predictive parsing: – L: Left-to-right scan of the tokens – L: Leftmost derivation – (1): One token of lookahead ■ Construct a leftmost derivation for the sequence of tokens. ■ When expanding a nonterminal, we predict the production to use by looking at the next token of the input. The decision is forced. 962020
  • 97. LL(1) Parse Tables E → int E →(E OpE) Op → + Op → * int ( ) + * E int (E Op E) Op + * 972020
  • 98. (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * (int + (int * int))LL(1) Parsing 982020
  • 99. (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * E (int + (int * int))LL(1) Parsing 992020
  • 100. (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * E (int + (int * int)) int ( ) + * E 1 2 Op 3 4 LL(1) Parsing 1002020
  • 101. (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * E$ (int + (int * int))$ int ( ) + * E 1 2 Op 3 4 LL(1) Parsing 1012020
  • 102. (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * E$ (int + (int * int))$ int ( ) + * E 1 2 Op 3 4 LL(1) Parsing 102 T he $ symbol is t he end - of - input marker and is used by the parser t o detect when we have reached the end o f the input. I t is not a part o f the grammar. 2020
  • 103. (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * E$ (int + (int * int))$ int ( ) + * E 1 2 Op 3 4 LL(1) Parsing 1032020
  • 104. (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * E$ (int + (int * int))$ int ( ) + * E 1 2 Op 3 4 LL(1) Parsing 104 The f ir st symbol of our guess is a nonterminal. We then look at our parsing table t o see what production t o use. This is called a predict step. 2020
  • 105. (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * E$ (int + (int * int))$ int ( ) + * E 1 2 Op 3 4 LL(1) Parsing 1052020
  • 106. (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * E$ (int + (int * int))$ (E Op E)$ (int + (int * int))$ int ( ) + * E 1 2 Op 3 4 LL(1) Parsing 1062020
  • 107. (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * E$ (int + (int * int))$ (E Op E)$ (int + (int * int))$ int ( ) + * E 1 2 Op 3 4 LL(1) Parsing 107 The f ir st symbol of our guess is now a terminal symbol. We thus match i t against the f i r s t symbol o f the string t o parse. This is called a match step. 2020
  • 108. (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * E$ (int + (int * int))$ (E Op E)$ (int + (int * int))$ E Op E)$ int + (int * int))$ int ( ) + * E 1 2 Op 3 4 LL(1) Parsing 1082020
  • 109. (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * E$ (int + (int * int))$ (E Op E)$ (int + (int * int))$ E Op E)$ int + (int * int))$ int ( ) + * E 1 2 Op 3 4 LL(1) Parsing 1092020
  • 110. (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * E$ (int + (int * int))$ (E Op E)$ (int + (int * int))$ E Op E)$ int + (int * int))$ int Op E)$ int + (int * int))$ int ( ) + * E 1 2 Op 3 4 LL(1) Parsing 1102020
  • 111. (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * E$ (int + (int * int))$ (E Op E)$ (int + (int * int))$ E Op E)$ int + (int * int))$ int Op E)$ int + (int * int))$ Op E)$ + (int * int))$ int ( ) + * E 1 2 Op 3 4 LL(1) Parsing 1112020
  • 112. (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * E$ (int + (int * int))$ (E Op E)$ (int + (int * int))$ E Op E)$ int + (int * int))$ int Op E)$ int + (int * int))$ Op E)$ + (int * int))$ int ( ) + * E 1 2 Op 3 4 LL(1) Parsing 1122020
  • 113. (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * E$ (int + (int * int))$ (E Op E)$ (int + (int * int))$ E Op E)$ int + (int * int))$ int Op E)$ int + (int * int))$ Op E)$ + (int * int))$ + E)$ + (int * int))$ int ( ) + * E 1 2 Op 3 4 LL(1) Parsing 1132020
  • 114. (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * E$ (int + (int * int))$ (E Op E)$ (int + (int * int))$ E Op E)$ int + (int * int))$ int Op E)$ int + (int * int))$ Op E)$ + (int * int))$ + E)$ + (int * int))$ E)$ (int * int))$ int ( ) + * E 1 2 Op 3 4 LL(1) Parsing 1142020
  • 115. (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * E$ (int + (int * int))$ (E Op E)$ (int + (int * int))$ E Op E)$ int + (int * int))$ int Op E)$ int + (int * int))$ Op E)$ + (int * int))$ + E)$ + (int * int))$ E)$ (int * int))$ int ( ) + * E 1 2 Op 3 4 LL(1) Parsing 1152020
  • 116. (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * E$ (int + (int * int))$ (E Op E)$ (int + (int * int))$ E Op E)$ int + (int * int))$ int Op E)$ int + (int * int))$ Op E)$ + (int * int))$ + E)$ + (int * int))$ E)$ (int * int))$ (E Op E))$ (int * int))$ int ( ) + * E 1 2 Op 3 4 LL(1) Parsing 1162020
  • 117. (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * E$ (int + (int * int))$ (E Op E)$ (int + (int * int))$ E Op E)$ int + (int * int))$ int Op E)$ int + (int * int))$ Op E)$ + (int * int))$ + E)$ + (int * int))$ E)$ (int * int))$ (E Op E))$ (int * int))$ E Op E))$ int * int))$int ( ) + * E 1 2 Op 3 4 LL(1) Parsing 1172020
  • 118. (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * E$ (int + (int * int))$ (E Op E)$ (int + (int * int))$ E Op E)$ int + (int * int))$ int Op E)$ int + (int * int))$ Op E)$ + (int * int))$ + E)$ + (int * int))$ E)$ (int * int))$ (E Op E))$ (int * int))$ E Op E))$ int * int))$int ( ) + * E 1 2 Op 3 4 LL(1) Parsing 1182020
  • 119. (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * int * int))$ E$ (int + (int * int))$ (E Op E)$ (int + (int * int))$ E Op E)$ int + (int * int))$ int Op E)$ int + (int * int))$ Op E)$ + (int * int))$ + E)$ + (int * int))$ E)$ (int * int))$ (E Op E))$ (int * int))$ E Op E))$ int * int))$ int Op E))$ int * int))$ int ( ) + * E 1 2 Op 3 4 LL(1) Parsing 1192020
  • 120. (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * int * int))$ E$ (int + (int * int))$ (E Op E)$ (int + (int * int))$ E Op E)$ int + (int * int))$ int Op E)$ int + (int * int))$ Op E)$ + (int * int))$ + E)$ + (int * int))$ E)$ (int * int))$ (E Op E))$ (int * int))$ E Op E))$ int * int))$ int Op E))$ int * int))$ Op E))$ * int))$ int ( ) + * E 1 2 Op 3 4 LL(1) Parsing 1202020
  • 121. (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * int * int))$ E$ (int + (int * int))$ (E Op E)$ (int + (int * int))$ E Op E)$ int + (int * int))$ int Op E)$ int + (int * int))$ Op E)$ + (int * int))$ + E)$ + (int * int))$ E)$ (int * int))$ (E Op E))$ (int * int))$ E Op E))$ int * int))$ int Op E))$ int * int))$ Op E))$ * int))$ int ( ) + * E 1 2 Op 3 4 LL(1) Parsing 1212020
  • 122. (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * int * int))$ E$ (int + (int * int))$ (E Op E)$ (int + (int * int))$ E Op E)$ int + (int * int))$ int Op E)$ int + (int * int))$ Op E)$ + (int * int))$ + E)$ + (int * int))$ E)$ (int * int))$ (E Op E))$ (int * int))$ E Op E))$ int * int))$ int Op E))$ int * int))$ Op E))$ * int))$ * E))$ * int))$ int ( ) + * E 1 2 Op 3 4 LL(1) Parsing 1222020
  • 123. (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * int * int))$ E$ (int + (int * int))$ (E Op E)$ (int + (int * int))$ E Op E)$ int + (int * int))$ int Op E)$ int + (int * int))$ Op E)$ + (int * int))$ + E)$ + (int * int))$ E)$ (int * int))$ (E Op E))$ (int * int))$ E Op E))$ int * int))$ int Op E))$ int * int))$ Op E))$ * int))$ * E))$ * int))$ E))$ int))$ int ( ) + * E 1 2 Op 3 4 LL(1) Parsing 1232020
  • 124. (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * int * int))$ E$ (int + (int * int))$ (E Op E)$ (int + (int * int))$ E Op E)$ int + (int * int))$ int Op E)$ int + (int * int))$ Op E)$ + (int * int))$ + E)$ + (int * int))$ E)$ (int * int))$ (E Op E))$ (int * int))$ E Op E))$ int * int))$ int Op E))$ int * int))$ Op E))$ * int))$ * E))$ * int))$ E))$ int))$ int ( ) + * E 1 2 Op 3 4 LL(1) Parsing 1242020
  • 125. (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * int * int))$ E$ (int + (int * int))$ (E Op E)$ (int + (int * int))$ E Op E)$ int + (int * int))$ int Op E)$ int + (int * int))$ Op E)$ + (int * int))$ + E)$ + (int * int))$ E)$ (int * int))$ (E Op E))$ (int * int))$ E Op E))$ int * int))$ int Op E))$ int * int))$ Op E))$ * int))$ * E))$ * int))$ E))$ int))$ int))$ int))$ int ( ) + * E 1 2 Op 3 4 LL(1) Parsing 1252020
  • 126. (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * int * int))$ E$ (int + (int * int))$ (E Op E)$ (int + (int * int))$ E Op E)$ int + (int * int))$ int Op E)$ int + (int * int))$ Op E)$ + (int * int))$ + E)$ + (int * int))$ E)$ (int * int))$ (E Op E))$ (int * int))$ E Op E))$ int * int))$ int Op E))$ int * int))$ Op E))$ * int))$ * E))$ * int))$ E))$ int))$ int))$ int))$ ))$ ))$ int ( ) + * E 1 2 Op 3 4 LL(1) Parsing 1262020
  • 127. (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * int * int))$ E$ (int + (int * int))$ (E Op E)$ (int + (int * int))$ E Op E)$ int + (int * int))$ int Op E)$ int + (int * int))$ Op E)$ + (int * int))$ + E)$ + (int * int))$ E)$ (int * int))$ (E Op E))$ (int * int))$ E Op E))$ int * int))$ int Op E))$ int * int))$ Op E))$ * int))$ * E))$ * int))$ E))$ int))$ int))$ int))$ ))$ ))$ )$ )$ int ( ) + * E 1 2 Op 3 4 LL(1) Parsing 1272020
  • 128. (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * int * int))$ E$ (int + (int * int))$ (E Op E)$ (int + (int * int))$ E Op E)$ int + (int * int))$ int Op E)$ int + (int * int))$ Op E)$ + (int * int))$ + E)$ + (int * int))$ E)$ (int * int))$ (E Op E))$ (int * int))$ E Op E))$ int * int))$ int Op E))$ int * int))$ Op E))$ * int))$ * E))$ * int))$ E))$ int))$ int))$ int))$ ))$ ))$ )$ )$ $ $ int ( ) + * E 1 2 Op 3 4 LL(1) Parsing 1282020
  • 129. int + int$ LL(1) Error Detection (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * int ( ) + * E 1 2 Op 3 4 1292020
  • 130. int + int$E$ LL(1) Error Detection (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * int ( ) + * E 1 2 Op 3 4 1302020
  • 131. int + int$E$ LL(1) Error Detection (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * int ( ) + * E 1 2 Op 3 4 1312020
  • 132. E$ int + int$ int $ int + int$ LL(1) Error Detection (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * int ( ) + * E 1 2 Op 3 4 1322020
  • 133. E$ int + int$ int $ int + int$ $ + int$ LL(1) Error Detection (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * int ( ) + * E 1 2 Op 3 4 1332020
  • 134. E$ int + int$ int $ int + int$ $ + int$ LL(1) Error Detection (1) E → int (2) E → (E OpE) (3) Op → + (4) Op → * int ( ) + * E 1 2 Op 3 4 1342020
  • 135. CONSTRUCTING LL(1) PARSE TABLES Try this link: http://andrewduncan.net/parsing/index.html 1352020
  • 136. Constructing LL(1) Parse Tables Example 1 136 E → TE’ E’ → +TE’ | ε T → FT’ T’ → *FT’ | ε F → (E) | id First (E) = { ( , id } First (E’) = { + , ε } First (T) = { ( , id } First (T’) = { * , ε } First (F) = { ( , id } Follow (E) = { ) , $ } Follow (E’) = { ) , $ } Follow (T) = { + , ) , $ } Follow (T’) = { + , ) , $ } Follow (F) = { * , + , ) , $ } First (TE’) = { ( , id } First (+TE’ ) = { + } First (ε) = { ε } First (FT’) = { ( , id } First (*FT’) = { * } First (ε) = { ε } First ((E)) = { ( } First (id) = { id } 2020
  • 137. Constructing LL(1) Parse Tables Example 1 137 E → TE’ FIRST(TE’)={(,id} ➔ E → TE’ into M[E,(] and M[E,id] E’ → +TE’ FIRST(+TE’ )={+} ➔ E’ → +TE’ into M[E’,+] E’ →  FIRST()={} ➔ none but since  in FIRST() and FOLLOW(E’)={$,)} ➔ E’ →  into M[E’,$] and M[E’,)] T → FT’ FIRST(FT’)={(,id} ➔ T → FT’ into M[T,(] and M[T,id] T’ → *FT’ FIRST(*FT’ )={*} ➔ T’ → *FT’ into M[T’,*] T’ →  FIRST()={} ➔ none but since  in FIRST() and FOLLOW(T’)={$,),+} ➔ T’ →  into M[T’,$], M[T’,)] and M[T’,+] F → (E) FIRST((E) )={(} ➔ F → (E) into M[F,(] F → id FIRST(id)={id} ➔ F → id into M[F,id] 2020
  • 138. Constructing LL(1) Parse Tables Example 1 138 id + * ( ) $ E E → TE’ E → TE’ E’ E’ → +TE’ E’ →  E’ →  T T → FT’ T → FT’ T’ T’ →  T’ → *FT’ T’ →  T’ →  F F → id F → (E) 2020
  • 139. Constructing LL(1) Parse Tables ■ Rules for adding production choices to the table : – If A → α is a production choice, and there is a derivation α ➔* aβ, then add A → α to the table entry M[A, a]. – If A → α is a production choice, and there are derivations α ➔* ε and S$ ➔* β A a γ, then add A → α to the table entry M[A, a]. ■ Clearly, the token a in rule 1 is in First (α), and the token a in rule 2 is in Follow (A) 139 Repeat the following two steps for each nonterminal A and production choice A→ α 1. For each token a in First (α), add A → α to the entry M[A,a] 2. if ε is in First (α), for each element a of Follow A (a token or $), add A → α to M[A,a] 2020
  • 140. Constructing LL(1) Parse Tables Example 2 140 Repeat the following two steps for each nonterminal A and production choice A→ α 1. For each token a in First (α), add A → α to the entry M[A,a] 2. if ε is in First (α), for each element a of Follow A (a token or $), add A → α to M[A,a] S → (S) S S → ε First ( (S)S ) = { ( } First (ε) = {ε} Follow (S) = { $ , ) } M [N, T] ( ) $ S S → ( S ) S S → ε S → ε A = S , α = (S) S A = S , α = ε 2020
  • 141. Constructing LL(1) Parse Tables Example 3 141 Repeat the following two steps for each nonterminal A and production choice A→ α 1. For each token a in First (α), add A → α to the entry M[A,a] 2. if ε is in First (α), for each element a of Follow A (a token or $), add A → α to M[A,a] S → A S b S → C A → a C → c C C →  a b c $ S S → A S b S → C S → C S → C A A → a C C →  C → c C C →  2020
  • 143. Question 1 ■‫الصحيحة‬ ‫العبارة‬ ‫حدد‬: .A‫المفسر‬(interpreter)‫للمترجم‬ ‫اخر‬ ‫اسم‬ ‫هو‬(compiler)‫في‬ ‫فقط‬ ‫واالختالف‬ ‫المستخدم‬ ‫المصطلح‬. .B‫البرمج‬ ‫الكود‬ ‫من‬ ‫التحقق‬ ‫عملية‬ ‫فيها‬ ‫تتم‬ ‫التي‬ ‫المترجمات‬ ‫من‬ ‫نمط‬ ‫هو‬ ‫المفسر‬‫ي‬ ‫سطرا‬ ‫للعمليات‬ ‫وتنفيذ‬‫سطرا‬. .C‫األمثلة‬ ‫مرحلة‬ ‫بدون‬ ‫مترجم‬ ‫هو‬ ‫المفسر‬(Optimization Phase)‫البرمجي‬ ‫للكود‬. .D‫نهائيا‬ ‫بالمترجمات‬ ‫للمفسرات‬ ‫عالقة‬ ‫ال‬. 1432020
  • 144. Question 1 ■‫الصحيحة‬ ‫العبارة‬ ‫حدد‬: .A‫المفسر‬(interpreter)‫للمترجم‬ ‫اخر‬ ‫اسم‬ ‫هو‬(compiler)‫في‬ ‫فقط‬ ‫واالختالف‬ ‫المستخدم‬ ‫المصطلح‬. .B‫البرمج‬ ‫الكود‬ ‫من‬ ‫التحقق‬ ‫عملية‬ ‫فيها‬ ‫تتم‬ ‫التي‬ ‫المترجمات‬ ‫من‬ ‫نمط‬ ‫هو‬ ‫المفسر‬‫ي‬ ‫سطرا‬ ‫للعمليات‬ ‫وتنفيذ‬‫سطرا‬. .C‫األمثلة‬ ‫مرحلة‬ ‫بدون‬ ‫مترجم‬ ‫هو‬ ‫المفسر‬(Optimization Phase)‫البرمجي‬ ‫للكود‬. .D‫نهائيا‬ ‫بالمترجمات‬ ‫للمفسرات‬ ‫عالقة‬ ‫ال‬. 1442020
  • 145. Question 2 ■‫ب‬ ‫يتعلق‬ ‫فيما‬ ‫الصحيح‬ ‫الخيار‬ ‫اختر‬top down parsing‫المترجم‬ ‫بناء‬ ‫عند‬: .A‫حساب‬ ‫دائما‬ ‫الزم‬first‫حساب‬ ‫دون‬follow. .B‫حساب‬ ‫الزم‬follow‫دون‬first. .C‫حساب‬ ‫الزم‬follow‫واحيانا‬first. .D‫خطأ‬ ‫سبق‬ ‫ما‬ ‫كل‬. 1452020
  • 146. Question 2 ■‫ب‬ ‫يتعلق‬ ‫فيما‬ ‫الصحيح‬ ‫الخيار‬ ‫اختر‬top down parsing‫المترجم‬ ‫بناء‬ ‫عند‬: .A‫حساب‬ ‫دائما‬ ‫الزم‬first‫حساب‬ ‫دون‬follow. .B‫حساب‬ ‫الزم‬follow‫دون‬first. .C‫حساب‬ ‫الزم‬follow‫واحيانا‬first. .D‫خطأ‬ ‫سبق‬ ‫ما‬ ‫كل‬. 1462020
  • 147. Question 3 ■‫الصرفية‬ ‫القواعد‬ ‫استخدمنا‬ ‫حال‬ ‫في‬(grammer)‫صحيح‬ ‫عدد‬ ‫أي‬ ‫بنية‬ ‫توصف‬ ‫التي‬ ‫التالية‬ ‫حقيقي‬ ‫او‬R‫برمجة‬ ‫لغة‬ ‫ضمن‬: ■‫القوا‬ ‫وفق‬ ‫ما‬ ‫عدد‬ ‫عن‬ ‫للتعبير‬ ‫مقبولة‬ ‫صيغة‬ ‫تعتبر‬ ‫التالية‬ ‫الصيغ‬ ‫من‬ ‫صيغة‬ ‫اي‬‫السابقة‬ ‫عد‬. .A2.45E02 .BE1-1.1- .C1.1.1 .DE02+1 1472020
  • 148. Question 3 ■‫الصرفية‬ ‫القواعد‬ ‫استخدمنا‬ ‫حال‬ ‫في‬(grammer)‫صحيح‬ ‫عدد‬ ‫أي‬ ‫بنية‬ ‫توصف‬ ‫التي‬ ‫التالية‬ ‫حقيقي‬ ‫او‬R‫برمجة‬ ‫لغة‬ ‫ضمن‬: ■‫القوا‬ ‫وفق‬ ‫ما‬ ‫عدد‬ ‫عن‬ ‫للتعبير‬ ‫مقبولة‬ ‫صيغة‬ ‫تعتبر‬ ‫التالية‬ ‫الصيغ‬ ‫من‬ ‫صيغة‬ ‫اي‬‫السابقة‬ ‫عد‬. .A2.45E02 .BE1-1.1- .C1.1.1 .DE02+1 1482020
  • 149. Question 4 ■ A grammar that produces more than one parse tree for some sentence is called: A. Ambiguous. B. Unambiguous. C. Regular. D. None of the mentioned. 1492020
  • 150. Question 4 ■ A grammar that produces more than one parse tree for some sentence is called: A. Ambiguous. B. Unambiguous. C. Regular. D. None of the mentioned. 1502020
  • 151. Question 5 ■ An intermediate code form is: A. Postfix notation. B. Syntax trees. C. Three address codes. D. All of these. 1512020
  • 152. Question 5 ■ An intermediate code form is: A. Postfix notation. B. Syntax trees. C. Three address codes. D. All of these. 1522020
  • 153. Question 6 ■ Compiler translates the source code to: A. Executable code. B. Machine code. C. Binary code. D. Both B and C. 1532020
  • 154. Question 6 ■ Compiler translates the source code to: A. Executable code. B. Machine code. C. Binary code. D. Both B and C. 1542020
  • 155. Question 7 ■ Which of the following groups is/are token together into semantic structures? A. Syntax analyzer. B. Intermediate code generation. C. Lexical analyzer. D. Semantic analyzer. 1552020
  • 156. Question 7 ■ Which of the following groups is/are token together into semantic structures? A. Syntax analyzer. B. Intermediate code generation. C. Lexical analyzer. D. Semantic analyzer. 1562020
  • 157. Question 8 ■ _________ is a process of finding a parse tree for a string of tokens: A. Parsing. B. Analyzing. C. Recognizing. D. Tokenizing. 1572020
  • 158. Question 8 ■ _________ is a process of finding a parse tree for a string of tokens: A. Parsing. B. Analyzing. C. Recognizing. D. Tokenizing. 1582020
  • 159. Question 9 ■ What is the action of parsing the source program into proper syntactic classes? A. Lexical analysis. B. Syntax analysis. C. General syntax analysis. D. Interpretation analysis. 1592020
  • 160. Question 9 ■ What is the action of parsing the source program into proper syntactic classes? A. Lexical analysis. B. Syntax analysis. C. General syntax analysis. D. Interpretation analysis. 1602020
  • 161. Question 10 ■ Which of the following languages is generated by the given grammar? ■ S → a S | b S | ε A. anbm B. {a,b}* C. {a,b}n D. Other. 1612020
  • 162. Question 10 ■ Which of the following languages is generated by the given grammar? ■ S → a S | b S | ε A. anbm B. {a,b}* C. {a,b}n D. Other. 1622020
  • 163. Question 11 ■ Which of the following strings is not generated by the following grammar? ■ S → SaSbS|ε A. aabb B. abab C. aababb D. aabbb 1632020
  • 164. Question 11 ■ Which of the following strings is not generated by the following grammar? ■ S → SaSbS|ε A. aabb B. abab C. aababb D. aabbb 1642020
  • 165. Question 12 ■ Which of the following is NOT the set of regular expression R = (ab + abb)* bbab A. ababbbbab B. abbbab C. ababbabbbab D. abababab 1652020
  • 166. Question 12 ■ Which of the following is NOT the set of regular expression R = (ab + abb)* bbab A. ababbbbab B. abbbab C. ababbabbbab D. abababab 1662020
  • 167. Question 13 ■ In a one pass compiler, the syntax analysis is performed: A. After the lexical analysis. B. After the semantic analysis. C. With the lexical analysis. 1672020
  • 168. Question 13 ■ In a one pass compiler, the syntax analysis is performed: A. After the lexical analysis. B. After the semantic analysis. C. With the lexical analysis. 1682020
  • 169. Question 14 ■ When a syntax error appears, the compiler: A. Stops Immediately. B. Stops after collecting few Errors. C. Depends on the organization of the syntax rules. 1692020
  • 170. Question 14 ■ When a syntax error appears, the compiler: A. Stops Immediately. B. Stops after collecting few Errors. C. Depends on the organization of the syntax rules. 1702020
  • 171. Question 15 ■ Each deterministic finite automata (DFA) has an equivalent regular expression A. True. B. False. 1712020
  • 172. Question 15 ■ Each deterministic finite automata (DFA) has an equivalent regular expression A. True. B. False. 1722020
  • 173. Question 16 ■ Each Non deterministic finite automata (NFA) has an equivalent regular expression A. True. B. False. 1732020
  • 174. Question 16 ■ Each Non deterministic finite automata (NFA) has an equivalent regular expression A. True. B. False. 1742020
  • 175. Question 17 ■‫أعط‬‫األوتومات‬‫زوجي‬ ‫طول‬ ‫لها‬ ‫سالسل‬ ‫تقبل‬ ‫التي‬ ‫الحتمي‬ ‫المنتهي‬(‫السلسلة‬ ‫عدا‬ ‫الفارغة‬)‫؟‬ 1752020
  • 176. Question 17 ■‫أعط‬‫األوتومات‬‫زوجي‬ ‫طول‬ ‫لها‬ ‫سالسل‬ ‫تقبل‬ ‫التي‬ ‫الحتمي‬ ‫المنتهي‬(‫السلسلة‬ ‫عدا‬ ‫الفارغة‬)‫؟‬ 1762020
  • 177. Question 18 ■‫عن‬ ‫المعبر‬ ‫المنتظم‬ ‫التعبير‬ ‫اعط‬‫األوتومات‬‫التالي‬ ‫الحتمي‬ ‫المنتهي‬: 1772020
  • 178. Question 18 ■‫عن‬ ‫المعبر‬ ‫المنتظم‬ ‫التعبير‬ ‫اعط‬‫األوتومات‬‫التالي‬ ‫الحتمي‬ ‫المنتهي‬: ■‫الجواب‬: –(aa+bb)b 1782020