1 تمرین اول درس 1. در زبان مربوط به عبارت منظم زیر چند رشته یکتا وجود دارد (0+1+ϵ)(0+1+ϵ)(0+1+ϵ)(0+1+ϵ) جواب 11 رشته کنند abbbaacc را در نظر بگیرید. کدامیک از عبارتهای منظم زیر توکنهای ab bb a acc را ایجاد می-.2 a(b + c*) b+ b+ ab* ac* ab b+ ac* c* b+ ab ac* کدامیک از عبارتهای منظم زیر زبان مشابه NFA زیر را تولید میکند 0(00)*(10)* (000)*(01)+ 0(000)*(01)* (000)*(10)+ 0(000)*1(01)* به کمک عبارتهای منظم زیر دسته توکنها رشته dictatorial چگونه خواهد بود (R 1) dict (R 2)dictator.4
2 (R 3) [a-z]* (R 4)dictatorial R 1 R 3 R 3 R 4 DFA DFA برای عبارت منظم a(bc) d یک R 2 R 3 ایجاد کنید. مینیمم تعداد حاالت این چند.5 خواهد بود جواب 4 6. گرامر یک زبانی )دسته توکنها( را به صورت زیر در نظر بگیرید. a(ba)* b*(ab)* abd d+ کدامیک از توکنها برای رشتههای زیر ایجاد میشود ababddababa ab abd d ababa dddabbabab ddd a bbabab babad bab a d ababdddd abab dddd تمرین دوم درس 1. گرامر زیر چند رشته یکتا را تولید میکند A BB B CC C 1 2 E جواب 11 2. کدامیک از گرامرهای زیر عبارت منظم تولید میکند. A aaab E A aa b A (A( E
1 A Aa b A AAaab E A AAaab aab A (B) (BB) B (CC) (CCC) C (DDD) D () در گرامر E E * E E + E (E) int برای رشته + 4 7) * (2 + 3 * 5 چه تعداد درخت تجزیه یکتا بدست میآید جواب 5 1. {{5 * 3} + (2 * 7) } + 4 2. {5 * 3} + {(2 * 7) + 4} 3. 5 * { 3 + {(2 * 7) + 4}} 4. {5 *{3 + (2 * 7)}} + 4 5. 5 * {{3 + (2 * 7)} + 4} 4. گرامر زیر چه تعداد رشته یکتا و درخت تجزیه را میتواند تولید کند: S A1 1B A 10 C E B C1 E C 1 0 6 رشته 7 درخت تجزیه 5 رشته 7 درخت تجزیه 4 رشته 6 درخت تجزیه 5 رشته 6 درخت تجزیه 5. کدامیک از گرامرهای زیر غیر مبهم بوده و زبان مشابه گرامر زیر را قبول میکند E E + E E E E E E/E int E int+e int E int+e int E E int E int/e int E int + E E int int E E/int int E E +E E E E E int E int/e int E int + E int E int E int/e int E E + int E int E int E/int int
4 تمرین سوم درس 4 گرامر زیر را در نظر بگیرید: G1. S asb Sb b G2. S Sa Sb c G3. S SaS E G4. S bt T at E اگر n تعداد گرامرهایی که در آنها یک رشته وجود دارد که حداقل دارای 2 اشتقاق چپ متفاوت باشد. تعداد گرامرهایی که برای هر رشته فقط یک درخت تجزیه وجود دارد. m تعداد گرامرهایی که میتوان با تجزیه کننده نزولی بازگشتی استفاده کرد. m n k مقدارهای و k چه خواهد بود n =1; m = 1; k = 0 n = 1; m = 1; k = 1 n =1; m = 2; k = 1 n = 2; m = 2; k = 1 n = 2; m = 2; k = 2 2. گرامر زیر را در نظر بگیرید. S A ( S ) B ε A S S B x ε B S B y موعههای اولیه و پیرو برای S چه خواهد بود First: {x, y, '(', ε} Follow: {$, '(', y} First: {x, '('} Follow: {$, y, x} First: {x, y, '('} Follow: {$, y, x, '(', ')'} First: {x, y, '(', ε} Follow: {$, y, x, '(', ')'} First: {x, ε} Follow: {$, y, x, '(', ')'} First: {x, y, '(', ε} Follow: {y, x, '(', ')'}
5 1. گرامرهای زیر را درنظر بگیرید. G1. E id T (E)T T + id * id G2. S bsb A ε A aa ε G3. R ar' (R)R' R' ε XR' X.R +R * تعداد اعضای موعه اولیه برای غیر ترمینالها به چه صورت خواهد بود G1: E = 4; T = 2 G2: S = 2; A = 2 G3: R = 2; R' = 3; X = 3 G1: E = 2; T = 2 G2: S = 3; A = 2 G3: R = 2; R' = 4; X = 3 G1: E = 2; T = 2 G2: S = 3; A = 1 G3: R = 2; R' = 3; X = 3 G1: E = 2; T = 2 G2: S = 3; A = 2 G3: R = 2; R' = 3; X = 3 G1: E = 4; T = 2 G2: S = 2; A = 2 G3: R = 2; R' = 4; X = 3 4. گرامر زیر را در نظر بگیرید: S A A B C B (C) C B + C D D 1 0 اضافه کردن کدام مولد زیر باعث میشود که گرامر باال یک گرامر بازگشتی چپ شود C C + D B C C 1C A D D B D A
6 5. کدامیک از گرامرهای زیر به درستی بازگشتی چپ گرامر زیر را بر طرف میکند S Aa s A Sb S saa s A A A E A ab S Aa s A sb Aab S ss S AS E A ba S Aa s A sba A aba E 6. کدامیک از گزینهها برای گرامر زیر صحیح است S atub ε T cuc bub aua U Sb cc Follow(T) = {a, b, c} Follow(S) = {$, b} First(U) = {a, b, c} First(S) = {ε, a, b} سواالت اضافی برای هر کدامیک از موارد زیر یک گرامر مستقل از متن روی الفبای {b Σ =,a} بنویسید. همه رشتههای زبان 0}, { :.a S asaa B B bb ε b. همه رشتههای غیر تهی که با یک کارکتر شروع و خاتمه پیدا مکند. S axa bxb a b X ax bx ε b بیشتر از همه رشتهها با aهای c.
7 S Aa MS SMA A Aa ε M ε MM bma amb E int E E (E) E ε + E E فاکتورگیری چپ گرامرهای زیر چیست E int int + E int E E (E).2 A BA A +BA ε B int (A) A A+B B B int (A) گرامر LL(1) زیر را با ترمینالهای )} (, *, +, ep, T = {a, b, در نظر بگیرید. E TE E +E ε T FT T T ε F PF F *F ε P (E) a b ep الف( موعههای اولیه و پیرو برای غیر ترمینالها را بدست آورید. First(E) = {(, a, b, ep} Follow(E) = {), $} First(E ) = {+, ε} Follow(E ) = {), $} First(T ) = {(, a, b, ep} Follow(T ) = {+, ), $} First(T ) = {(, a, b, ep, ε} Follow(T ) = {+, ), $} First(F) = {(,a,b,ep} First(F ) = {,ε} First(P) = {(,a,b,ep} Follow(F) = {(,a,b,ep,+,),$} Follow(F ) = {(,a,b,ep,+,),$} Follow(P) = {(,a,b,ep,+,),,$} E E T T F F P ب( برای گرامر فاکتورگیری چپ شده جدول تجزیه LL(1) را بدست آوردید. ( ) a b ep + $ TE TE TE TE ε +E ε FT FT FT FT T ε T T T ε ε PF PF PF PF ε ε ε ε ε ε F ε (E) a b ep
8 ج( برای رشته ab* نحوه تجزیه LL(1) چگونه خواهد شد. Stack Input Action E$ ab $ TE T E $ ab $ FT FT E $ ab $ PF PF T E $ ab $ a af T E $ ab $ terminal F T E $ b $ ε T E $ b $ T TE $ b $ FT FT E $ b $ PF PF T E $ b $ b bf T E $ b $ terminal F T E $ $ F F T E $ $ terminal F T E $ $ ε T E $ $ ε E $ $ ε $ $ ACCEPT د( ثابت کنید که این گرام LL(1) است. با نگاه کردن به جدول تجزیه و مشاهده درایههای این جدول LL(1) G با استفاده از قانون: به طور کلی و رسمی گرامر برای هر قاعده تولید یک گرامر است اگر: A α 1 و A α 2 موعههای First (α 1 Follow(A)) و First (α 2 Follow(A)) غیر مشترک باشند.