فصل پنجم زبان های فارغ از متن
خانواده زبان های فارغ از متن: ( free )context تعریف: گرامر G=(V,T,,P) کلیه قوانین آن به فرم زیر باشد : یک گرامر فارغ از متن گفته می شود در صورتی که A x A Є V, x Є (V U T)* یک زبان L شود. فارغ از متن است در صورتی که توسط یک گرامر فارغ از متن تولید
مثال: یک گرامر فارغ از متن برای زبان زیر بنویسید. R L( G) { ww : w { a, }*} aa مثال: یک گرامر فارغ از متن برای زبان زیر با گرامر G بنویسید. n n aa a a : n 0} L( G) { a aa A aaaa A a
مثال: یک گرامر فارغ از متن برای زبان زیر بنویسید. L n m {a : n m} ' '' ' 1 n> m n<m A 1 a 1 A aa a ' ' 1 1 B a 1 B B
گرامر خطی: در سمت راست قوانین فقط یک ترم نهایی وجود دارد. یک گرامر خطی برای مثال قبل بنویسید. 1 2 1 aa A aa A ac C ac 2 B B B B ac C ac
L {w {a,}* :n مثال:برای زبان زیر یک گرامر فارغ از متن بنویسید. a w n w and n (v) (v), where v is any prefix of w} a n 1) 2) 3) 4) a a a aaaa
اضتقاق چپ و راست( derivation (right/left در یک گرامر فارغ از متن غیر خطی در فرم های جمله ای ممکن است بیش از یک متغیر غیر نهایی ظاهر شود. AB A aaa λ B B λ L(G)={a 2n m : n 0, m 0} => AB => aaab => aaaaab=>aaaab => aaaa
اشتقاق چپ: در هر مرحله چپ ترین متغیرجایگزین می شود. اشتقاق راست: در هر مرحله راست ترین متغیرجایگزین می شود. aab A B B A λ اشتقاق چپ: =>aab=>abb=>aab=>abb=>ab=>a =>aab=>aa=>ab=>aa=>ab=>a اشتقاق راست:
درخت اضتقاق( tree ) derivation روش دیگری برای نمایص یک اضتقاق وجود دارد به نام درخت اضتقاق که مستقل از ترتیب جایگسینی چپی یا راستی است. فعل جمله مفعول فاعل جمله فعل مفعول فاعل فاعل دانشجو مفعول درس نظریه زبان فعل دوست دارد { دانشجو درس نظریه زبان دوست دارد }= L دوست دارد نظریه زبان دانشجو
aab A B B A λ a گره میانی: متغیرها برگ: ترمینال ها ریشه: متغیرآغازین درخت اشتقاق برای جمله a A B a A B B A B λ λ B λ A B λ
ابهام )amiguity( یک گرامر فارق از متن مبهم خوانده می شود در صورتی که جمله ای وجود داشته باشد که بتوان برای آن دو درخت اشتقاق متفاوت یافت. مثال قبل a A B B A B λ λ a A B B λ A B λ :
مثال : <statement> if <cond> <statement> if <cond><statement> else <statement> if است ساختارif : else مربوط به کدام if(cond1) if(cond2) print( cond2 ); else Print( cond1 )
tatement if <cond> statement cond1 if <cond> tatement else tatement cond2 Print ( cond2 ) Print ( cond1 )
tatment if <cond> tatement else tatement cond1 if <cond> tatement Print ( cond1 ) cond2 Print ( cond2 )
گرامر مبهم برای عبارات a *+c مثال : 1)E E+E 2)E E*E 3)E (E) 4)E a c E E * E E E + E a E + E c E a * E c
محاسبات در درخت ها از باال به پایین : گرامرهای غیر مبهم برای عبارات 1)E E+T 2)E T 3)T F*T 4)T F 5)F (E) 6)F a c (),*,+ <---------- افزایش اولویت چون جمع اولویت باالتری دارد پس باید در باالترین سطح درخت اشتقاق ایجاد شود. F E T * T E + T F c a *+c مثال : a
مثال : L={a n m c m } U {a n n c m } برای زبان های زیر یک گرامر بنویسید. 1 2 1 a1 1 B λ B Bc 2 2c 2 A λ A aa A λ
برای اینکه ثابت کنیم یک گرامرمبهم است یک رشته از آن را در نظر می گیریم و ثابت می کنیم که می توان برای آن دو درخت اشتقاق رسم کرد : L={a n m c m } U {a n n c m } رشته ی a 2 2 c 2 را از گرامر صفحه ی قبل در نظر می گیریم: a a 2 1 2 2 A A A c a c a 1 1 B B B B c c λ λ
یک زبان مانند زبان ذاتا مبهم : L ذاتا مبهم است در صورتی که هیج گرامر غیر مبهمی نتوان یافت. برای آن گرامر های ذاتا مبهم : گرامر Gذاتا مبهم است در صورتی که برای زبان L(G) نتوان یافت. هیج گرامر غیرمبهمی
وW پارسینگ (parsing) w می توان تشخیص داد که یک جمله ی چگونه توسط گرامرG تولید می شود الگوریتم پارس فراگیر: exhaustive search parsing در G در صورت وجود ورودی : G خروجی : اشتقاق W مراحل الگوریتم پارس فراگیر: کلیه ی قوانین چک شود. از قوانینی که امکان پذیر است شروع به اشتقاق می کنیم..1.2
G : 1. 2. a 3. a 4. λ مثال: آیا w=aa پاسخ: توسط گرامر فوق تولید می شود 1 => => a => a x => λ x 2 => => => => a => => a x => => => a => a => a => aa => a => aa x => a => a x 3 => => => => => => a => => => a x => => => => => a => a => => a => aa => => a => aa x => => a => a x => a => aa => aa
مشکالت الگوریتم پارس فراگیر : الگوریتم از نظر پیچیدگی زمانی از مرتبه ی نمایی است. اگر P قانون گرامر داشته باشیم پیچید گی زمانی به صورت زیر می شود: P + P 2 + P 3 +... = O ( P w ) P i در مرحله ی i ام الگوریتم اشتقاق تست می شود. W Є L ( G ) این الگوریتم ممکن است هیچ گاه به پایان نرسد.
: الگوریتم پارس فراگیر را می توان حد اکثر تا W 2 مرحله انجام داد به شرطی که باشد. باشد. ) ) فاقد قوانین الندا (λ A فاقد قوانین یکه ) B A (imple Grammars) گرامر های ساده : گرامر G=(V,T,,P) در صورتی یک گرامر ساده است که به فرم زیر باشد: A a B A Є V, a Є T, B Є V* a فقط یک بار وجود داشته باشد. و زوج (A,a) به ازای هر متغیر Aو نماد الفبای
مثال : کدام یک از گرامر های زیر ساده است G 1 : a c G 2 : a a c G 3 : a a c (,a) پاسخ: گرامر اول یک گرامر ساده است. گرامر دوم و سوم ساده نیست چون دو زوج دارد.
استفاده از گرامر های ساده سبب کم هزینه شدن پارس یک رشته خواهد شد. در هر مرحله از پارس فراگیر فقط یک قانون قابل استفاده است: w=a 1 a 2 a n ==>a 1 ABCD ==>a 1 a 2 BCD بنابراین پس از w ایجاد می شود. مرحله عمل پارس انجام می شود و در هر مرحله فقط یک اشتقاق ->aa A->aA A-> aa ==>aa 2 مرحله 3 aa aa ==>aa==>aaa ==>aa==>aaa==>aa مرحله 1 مرحله
تمرین های آخر فصل
تمرین اول : برای زبان های تمرین های اول تا ششم گرامر فارغ از متن بنویسید. L= { a n m : n 2m } n>2m 1 AM A aa a M aam λ n<2m 2 aa 2 2 ab B B ab B λ
تمرین دوم : L= { w є { a, }* : n a (w) n (w) 1 2 n a > n 1 a 1 a a a λ n > n a 2 2
تمرین سوم : L= { w є { a, }* : n a (w) = 2 n (w)+ 1 aa aa aa aa aa aa a
تمرین چهارم : L={ a n m c k : k=n+m} ac A A Ac λ
تمرین پنجم : L={a n ww R n : n 1, wє * } a aa A aaa A A A λ
تمرین ششم : L = { w 1 c w 2 : w 1,w 2 Є {a + } +, w 1 w 2 R } aa am Ma M M am cn N an N λ
تمرین هفتم : یک گرامر غیر مبهم ارائه دهید که کلیه عبارات منظم بر روی {a,} = را تولید کند. a λ a, q1 چون می توان برای این گرامر یک dfa کشید پس منظم است.