صفحه 1:
#inlcude<iostream.h> #inlcude<stdlib.h> #inlcude<stdio.h> int main(){ int state; char ch; state= switch(state){ case 1: ch= gete(stdin); if (ch=="a’) state= ose As (>) cout<<"Failed"; ‏ی‎ ©) exit(0); = break; case 2: ch=gete(stdin); if(ch=="\n') cout<<"Accepted"; else cout<<"Failed"; exit(0); return(0);

صفحه 2:
#inicude<iostream.h> #inicude<stdlib.h> #inicude<stdio.h> int main(){ int state; char ch; state=1; while(1){ switch(state){ a case 1: ch = getc(stdin); if (cl 79 state 'b') state: | else { cout<<"Failed"; exit(0); cout<<"Accepted"; ‏عواع‎ cout<<"Failed"; exit(0); 7 1 return(0);

صفحه 3:
[a-zA-Z0-9] Y 8B ‏ددرا"‎ DI} eb سا کم ‎ao:‏ ‏سک ‎‘oi‏ ‏اعحام) || درا هق '(اسهام) |إ( ‎she ((ch> = BB sob‏ سه )سد السلف عور ‎eal DY,‏ امم ا

صفحه 4:
‎i‏ ل | | ل ا 0 يلمر | 1 | ‏۵ موتو

صفحه 5:
int fail(int start) int nextstart; switch(start) { case l:nextstart=3; // ‏لعداد اعشاري‎ break; case 3:nextstart=6; // ‏لعداد صحیح‎ break; case 6:nextstart=8; // ‏فضاوخالي‎ ‎break; t return nextstart; 1

صفحه 6:
اس بر زارسی‌صو بر ‎vkar ok;‏ ‎PLE *Pp;‏ ‎"r");‏ )سر( :)سوه :)تسو ‎wwhte(()‏ ‎surich(state){‏ ‏:(و 0 (۳)سحه ‎B((ch>='c! && ch<="2/) || (ch>="@! &R vh<="L'))‏ ‎shie=O;‏ ‏اه ‎oka=Poll sk);‏ زک ۵۵۵0۵6 سس } ‎brook;‏

صفحه 7:
AP); 'd! && ch<="2') || (h>="O' BB ch<="L') || (ch>="O' BB vch<='9')) ==! ||| c=" ch== BOP) ‏کت‎ "5 ‏زرد‎ ‎1 ‏سس‎ ‏(سممف سود‎ ‏سورد‎ ‎| ‎1

صفحه 8:
اولویت ها ممكن است بخشى از يك دنباله از كاراكد ‎١‏ ۱ بخشی اب باله از کاراکترها با یک عبارت باقاعده و بخث دیگری منطبق شود. به عنوان متال دنباله 123۰65 ‎Ne‏ ‏بارت با قاعده ذيل را در نظر ‎cd ot‏ ‎[d-O][O-9] ۱ .‏ ‎[d-O][0-9]*. [0-9 ][d-9]‏ پذیرش طولاني ترین دنباله است

صفحه 9:
ممکن یک دنباله از کاراکترها (نه بخشی از یک دنباله ) با دو یا چند عبارت باقاعده منطبق شود به عنوان مثال رشته 4 می تواند توسط دو عبارت باقاعده ذیل تولید شود. 5 *[©-00 ,1ك ملسم عبارت با قاعده اي که اولویت بيشتري دارد؛ ابتدا مقايسه .مي شود

صفحه 10:
14 Polit or) مت نم ‎switch (stert){‏ اعداد صحیح || :متا مه لا rae O:aextstrt=O; bredk; اعداد اعشاري ‎I‏ :مه مه ‎breck;‏ } مس مسج }

صفحه 11:
استفاده از ابزارها داراي مزایا و معايبي است که عبارتند از؛ افزایش سرعت ایجاد تغییرات کاهش زمان ساخت تحلیلگر لغوي افزايش محدودیتها

صفحه 12:
پیاده سازی تحلیلگ لغوی به وسیله تولید کننده تحلیلگ لغوی ‎Flex‏ برنمه به بان ‎slay Lin Flex ‏با پاسکال > برنمه ‎Obj a‏ ‏© كامبابل بوسيله كامبايلر ‎ ‏تحلیلگر لغوي ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎

صفحه 13:
c:\> flex 0۵569۱. scanner.c ‏بعد از کامپایل و تولید فایل اجرایی‎ c:\> scanner.exe< pl c:\> scanner.exe <p1> result رشته هایمورد نظر ‎c:\> scanner.exe‏

صفحه 14:
نحوه بیان عبارات پا قاعده lee ۲+ re X{2,5} r{m,n} ‏اس‎ ‎۳/ ۳1/۳۹2 ۳1۳2 21 ‏[مجموعه کاراکترها]‎ [“afk] ‏كاراكترهاي مورد نظر[+‎ بجز سر خط ] کاراکتر مقصد- کاراکترمبدا[ ‎[b-f]‏

صفحه 15:
ساختر برنامه بسه زبا166 تعاریف 0۹/6 ترجمه ها 0۹/6 توابع

صفحه 16:
مثال ]0-9[ [a-z] [A-Z] lower|upper {letter}|({letter}|{digit})* [\n\t]+ {} {printf(“l found ‘IF’ keyword”);} {printf(“l found ‘ELSE’ keyword”);} {printf(“l found variable “);} digit lower upper letter var ws %% ws “ign “else” var %%

صفحه 17:
» اگر متن ذیل به عنوان ورودي به اين تحلیلگر داده شود. ‎‘if temp else if id 34‏ * خروجي به صورت ذیل خواهد بود. * | found ‘if’ keyword * | found variable * | found ‘ELSE’ keyword * | found ‘if’ keyword * | found variable

صفحه 18:
%option noyywrap 5261 int nchar,nline; %y 9096 Qn] {nline++;} 5 {nchar++;} 1 %% int main(void){ yylex(); printf("%d = %d",nchar,nline+1); return (0); 1

صفحه 19:
روش اول ‎[a-zA-Z]([a-zA-Z0-9])* printf("ID ");‏ ‎"program" printf("PROGRAM‏ ۳ ‎"var" printf("VAR ");‏ ‎"begin" printf("BEGIN ");‏ "end" printf("END ");

صفحه 20:
void toupper(char k[]) ine é 5 “3 int is keyword(char id{]) { char keyword[40][20]= "ARRAY", "BEGIN", "CAS RN", "FILE", "FOR", "FORWARD", "FUNCTION", "GOTO", "IF*,"IN","LABEL","MOD","NIL","NOT*,"OF*,"OR","O THERWISE", "PROCEDURE", "PROGRAM","RECORD","REPEAT","THEN","TO","TYPE","UNTIL","VAR","WHILE","WITH"}; ‘AND", ‘ONST","DIV*,"DO","DOWNTO","ELSE", ND","EXTERNAL","EXTE O;i<40;i++) if(stremp(id, keyword{i]) return return -1; } 9 0)

صفحه 21:
[a-zA-Z]([a-zA-Z0-9])* {toupper(yytext); if (is_keyword(yytext)!=-1) printf("keword= %s",yytext); else printf("ID "); }

صفحه 22:
* A [aA] ۰ 8 ]08[ ۰ C [cC] * D[dD] * E [eE]

صفحه 23:
* {A} {N}{D} return(AND); * {A}{R}{R}{A}{Y} return(ARRAY); © {C}{A}{S}{E} return(CASE); * {C}{O}{N}{S}{T} return(CONST); * {D} {I} {V} return(DIV); * {D}{O} return(DO);

صفحه 24:
حساس به حالت روش دوم [a-zA-Z]([a-zA-Z0-9])* {toupper(yytext); if (is_keyword(yytext)!=- 1) return (KW); else return(IDENTIFIER );

صفحه 25:
فاکتور گیس‌ی چپ * براي يك غیر پایانه ممکن است انتخابهاي مختلفي وجود داشته باشد به طوريكه شروع یکسان داشته باشند. به عنوان مثال به گرامرهاي ذیل دقت کنید. داح | 5 و ب۸ ۰ ‎els‏ ‎A>cdB|cdgD‏ *

صفحه 26:
+ A> af, | of, | of; ... | a, ‏شروع مشترك‎ : ٠» ‏قسمت غير مشترك‎ 8: + ‏كرامر فوق را مىتوان به صورت ذيل نشان داد كه همان‎ ٠» ‏زبان را توليد مىكند:‎ ‏8ن عدم‎ *R>6, |B 1 83] --

صفحه 27:
متال م و609 | 5 00 حم ‎٠‏ ‏6 | 08ات8 ۰ ‎D-dDle‏ * ‎٠‏ باتوجه به ‎Gul Cd dibs Gad AcdB] cdgD‏ در نتیجه: ‎a=cd‏ * ‎B,=gD‏ * ‎B.=B‏ * . _گرامر را می‌توان به صورت ذیل نشان داد. 8 ب۸ ۰ 0 و | 8 ۲۲ ۰ 6 | 08ات8 ۰ ‎D-dDle‏ *

صفحه 28:
تحلیلگر لغوي برنامه مبدا را به دنباله‌اي از نشانه‌ها تبدیل * کرده و به تحلیلگر نحوي ارسال می‌کند. اگر اين دنباله توسط گرامر زبان مبدا قابل تولید باشد» برنامه مبدا از نظر نحوي صحیح است در غير این صورت داراي خطاي ,نحوي است

صفحه 29:
تجزیه فرایند تجزیه نشان می‌دهد آیا دنباله‌اي از نشانه‌ها توسط ‎٠‏ گرامر قابل تولید است يا خیر. روالي که فرایند تجزیه را .انجام می‌دهد» تجزیه کننده نامیده می شود

صفحه 30:
انواع تجزیه کننده‌ها * - تجزیه كنندههاي بالا به پایین * - تجزیه كنندههاي يايين به بالا

صفحه 31:
ترتیب ساخته شدن درخت تجزیه :بالابه پایی)ع ۴۲60۲0 :پایین‌به با-۴۵5۸0۲۵06

صفحه 32:
ترتیب ساختن درخت تجزیه در روش بالا به پایین © 9 © 5 » 5 ک QOO®

صفحه 33:
ترتیب ساختن درخت تجزیه در روش پایین به بالا ۵ ک د © © 60 ©

صفحه 34:
مثال ۳۱۰۲+ بع ۴ ۲۱۲/۳۴ * ۲ م1 0 +۲ : نحوه ساختن درخت تجزیه برای رشته ‎Id+id+id‏

صفحه 35:
مثال بدا بسر ]سمي

صفحه 36:
id id id

صفحه 37:

صفحه 38:
id id id

صفحه 39:
id id id id

صفحه 40:

صفحه 41:
first(a) ۲51 ‏مجموعه‎ ath all pe 5 ball 5! lbs o ‏اگر‎ ‏مربوط به 0 پايانه‌هايي را مشخص مي‌کند که رشته‌هاي مشتق‎ ‏شده از + با آنها شروع مي‌شوند.‎ ‏اگر .ن بتواند ح را تولید کند» ع نیز به (,۲51)6[] اضافه‎ ‏مي‌شود.‎

صفحه 42:
مثال 860 حم > | 6 | 08 8 اعوج به رشتههايي كه از 80:0 مشتق شدهاند دقت كنيد. 860-0 800-0 ‎bBd‏ ‎bd‏ ‎BCdeCd Firsi((BCd)={d,b,2,}‏ ‎ed‏ ‏800-۵ ‎acd‏ ‎ad‏

صفحه 43:
» با توجه به گرامر ذیل (۳5۲)8۸ و (6۲5)۵8 را محاسبه کنید. A> aAlaB B> b Bi c » با توجه به گرامر» رشته‌هاي مشتق شده از 2۸ فقط با ج و رشته‌هاي مشتق شده از 38 فقط با ج شروع ميشوندء بنابراين: ‎first(aA) = {a }‏ ‎first(aB) = {a }‏

صفحه 44:
قونیرم حاسبه]1]5] 0اگر » پایانه باشد آنگاه()۳51] برابر مجموعه (0) است. ‎٠‏ مثال در گرامر فوق دارییم: ‎first(a)={a}‏ * ‎first(b)={b}‏ *

صفحه 45:
ماگر بم بتواند > را تولید کنده آنگاه > به مجموعه ‎first(a)‏ اضافه می‌گردد. ‎a‏ غير يايانه و م ...۸۷۱۷۷ باشد و ‎Jas first(Y,),first(Y,),...first(Y,) gate sn0‏ > باشند يعني همه ,۷ بتوانند تهي را تولید کنند. در نتیجه ( نیز می‌تواند ع را تولید کند که در این صورت ع به مجموعه ()۲5۲ اضافه می‌گردد. مثال:(61۲5۲)26 5 ۰ > | 2 | 08 | 2۸ ۸۲ ۰ | ظ | 98 ب 8 ۰

صفحه 46:
cat ۷,۳۷... ‏اگر 6( غیر پایانه و‎ - ٠ 1۳5۲02( ‏مجموعه (,1۳5۲)۷] (به جز ع)به مجموعه‎ ‏اضافه می‌گردد. زیرا (,3۲5/)۷] مجموعه پايانه‌هايي‎ ‏هستند که در شروع رشته‌هايي که توسط, ۷ تولید می‌شوند‎ ‏قرار دارند از آنجايیکه 6( با ,۷ شروع می‌شود» پس با‎ ‏پايانه‌هاي (,۲51)۲[] شروع مي‌شوند در نتيجه‎ >» Se sthel first(X) 4 first(Y,)

صفحه 47:
‎oS!‏ لا غير يايانه و ,۷:۰..۷ ,2-۲۷۱۷ باشد و ع در مجموعه (,1۳5۲)۷] باشد (,۷ می‌تواند > را تولید کند) در این صورت علاوه بر (,1۲5)۷] (به جزع) مجموعه ‎(e554) first(Y,)‏ 38 به (۴[۲56)06 اضافه می‌گردد. ‎٠»‏ به كرامر ذيل دقت كنيد 860 دم ‎٠‏ ‎*Boc|dle‏

صفحه 48:
follow(A ‎Gadde |) pall follow(A) 4+ 5x0 ٠‏ می‌کند که در اشتقاق‌هاي مختلف بلافاصله در سمت راست ۸ قرار می‌گیرند اين مجموعه را با (0۱۱0۷۷)۸۵] نشان می دهیم.

صفحه 49:
X >aXAad | a A>Ac|Afleé ‏محاسبه‎ 20 (۲۵2۵۵0 0 (۲۵2۵۵0 20۸63 7 0 با توجه به مراحل بالا می‌توان نتیجه گرفت که: ‎follow(A)={a,c,f}‏ *

صفحه 50:
قوانین - اگر. 5 نماد شروع باشد 6 (5 نشان دهنده آخر رشته ورودي است) به (۴0۱۱0۷۷/)5 اضافه می‌شود.

صفحه 51:
۰ (.- براي هر قاعده توليدي به صورت !0+ » تمام پايانه‌هاي موجود در (1۲516] ( به جز ع) به (۲0۵۱۱0۷۷۲۱۷ اضافه می‌شود. A> AXZ|€ Z->aZ|bZ|cle Xa follow(X)= {a,b,c}

صفحه 52:
۰ براي هر قاعده اي به صورت !۳+0۱ و یا ۱-۲۵۷۵ در صورتيكه © عضو (1۲5)0] باشد يعني 6 بتواند رشته تهي با ع را تولید کند» تمام پايانه‌هاي مجموعه ‎follow(M)‏ 4 (۲0۵۱۱0۷۷)۱۷ اضافه مي‌شود.

صفحه 53:
مثال + باتوجه به كرامر ‎follow(B) Ja‏ 15 محاسبه كنيد. ۸۵ ۰ ٠ ۲۴ * Eoale * Bob :جواب follow(B)={a,b}

صفحه 54:
تجزیه کننده بالا به پایین :انواع تجزیه كننده هاى بالا به يايين تجزيه كنندم هاويازكشتى- ۳۹ جزيه > نندم غير بازكشت -

صفحه 55:
تجزیه کننده های باز گشتم - در این تجزیه کننده یک متغیر پیشنگ. (۱0011620) همواره به نماد جاری رشته ورودی اشاره می کند - تجزیه کننده سعی می کند نمادی که پیشنگر به آن اشاره می کند را تولید کند. - هرگاه نماد مورد نظر پیشنگر تولید شد» پیشنگر به نماد بعدی اشاره می کند. برلىهر غير يايانه يكتابع ليجاد می‌شود -

صفحه 56:
مثال aR 5 ‏85م‎ ‎+ 68|

صفحه 57:
تابع کمکی ۳26: هرگاه نماد مورد انتظار گرامر ‎(lookahead) 2555 4445 Gls sti b (Symbol)‏ یکسان شد. یعنی یکی از نمادهای رشته جاری تولید شده است و پیشنگر باید به جلو حرکت کند. وگرنه خطا است. ‎void match(char symbol){‏ ‎if ( lookahead== symbol)‏ ‎lookahead=getche();‏ ‎else{‏ ‎cout<<" error";‏ ‎exit(0);‏ ‏}

صفحه 58:
6 حم void A(){ match('a'); R(); }

صفحه 59:
R= A|B ‏«-8ظ8‎ 68| first(A)={a} first(B)={b,c} void R(){ if(lookahead=='a') A(); else if (lookahead=='b' || lookahead=='c') BQ); else{ cout<"error";exit(0);} 1

صفحه 60:
8« 6 void B(){ if(lookahead=='b'){ match('b'); BO); 0 else if(lookahead=='c'){ match('c'); cout<<"Accepted"; exit(0); } }

صفحه 61:
int main(){ lookahead= getche(); AQ); return 0;

صفحه 62:
مشکلات روش پیشگوی غیر بازگشتی ‎٠‏ برخورد ۲5۱/۲۱۲5۲ فرض کنید قانون زیر بخشی از گرامر. است. 6 مق 8+ 2 First(a1) nfirst(a2) #@ ‏:ٍراه حل: فاکتور گیری چپ‎ B= bB|bc B> bR +

صفحه 63:
first/follow ‏برخورد‎ A> Bed 8 + ۱۵| ‏ع‎

صفحه 64:
char lookahead; void A(){ BQ); ‏گرامر‎ ‎match(‘e'); ‏لح مه‎ match(‘d"); ® eh] € 2 void B(){ if (lookahead =='e'){ match(‘e'); else if (lookahead =="'a') match(‘a'); else ; ‏عملکرد تجزیه کننده برای دو رشته لس و لس‎ return ; ‏جيست.‎ ‎} ‎int main(){ lookahead=getche(); AQ); return 0;

صفحه 65:
* برخورد /۲۱۲5۱/۲0۱۱0۷ در قاعده توليدي به صورت ۸-۲06 شرایط ذیل برقرار باشد. 0- 6 بتواند ع را تولید کند. 2- حداقل يك نماد وجود دارد که هم می‌تواند در شروعن و هم بعد از باشد. یا به عبارت دیگر رابطه ذیل برقرار باشد. first(a) M follow(A)#o

صفحه 66:
A> Bed |6۵ -ظ ‎a=e SI‏ 5 < باشد» ‎first(e)={e}‏ ‎follow(B)={e}‏ ‏در نتیجه: ‎۲۱۲5۲)6( 6 ۲۵۱۱۵۷۷ )5(< )6( 0

صفحه 67:
تجزیه کننده پیشگوی غیر ‎SES Sb‏ Adc Cre c AvC لعجن جدول *“-1 _جدول تجزيه 1 A>B Bof ۸ B— bB | f ) ‏ب‎ 0۱ 6 AB B> bB Oa) >

صفحه 68:
expr — term rest rest > + expr |-expr|¢€ term — id ابتدا۳5۸[] تمام سمت راستهاي قواعد تولید و 0۱۱0۷۷ تمام غیر پایانه‌ها را محاسبه مىكنيم. first(term rest)=first(term)={id} first(+expr)=first(+)={+} first(-expr)=first(-)={-} first(e)={e} ar + ۳ 3 first(id)={id} [expr | exproiern rest follow(expr) = = sue resttexpr test-y-expr | teste follow(term)={+,-,5} follow(rest)={$}

صفحه 69:
ساختار تجزیه کننده پیشگوی غیر باز گشتم 58 | acs =

صفحه 70:
Teste ماحل تجزيه ‎id+id-id‏ Test - expr rest >+expr id ‏ساره‎ test term id expr rest

صفحه 71:
گرامرهای (1)-1] اگر در ساخت درخت تجزیه فقط با رویت يك نشانه بعدي از رشته ورودي در پیمایش چپ به راست. بتوان غیر پایانه بعدي را براي گسترش تشخیص داد در این صورت گرامر مستقل از متن را (1)1] مي‌ناميم. مثال: 0 | 8 حم ‎٠‏ ‎B> bB Ic‏ * ‎cui LL(1) 2 So!‏

صفحه 72:
-گرامرهاي داراي بازگشتي چپ (1)1| نیستند. - گرامرهاي مبهم (1)1| نیستند. - اگر جدول تجزیه غيربازگشتي پیشگو داراي خانه‌اي با بیش از يك وارده باشد. گرامر (1)1| نیست و به عکس اگر جدول تجزیه پیشگوی غیر؛ داراي خانه‌اي با بیش از يك وارده نباشد» كرامر (1)1 | است. در نتيجه توليد جدول تجزیه يكي از مهمترین روشهاي تست (1.)1] بودن گرامر است. - گرامرهای دارای برخورد ۴۳56/۴1۳5 از نوع (1)1| نيستند. گرامرهای دارای برخورد ۶۱۳5۲/۶۵۱۱0۷۷ از نوع (1)1] نيستند. اگر در گرامر» قاعده توليدي به صورت ۸۲6/6 وجود داشته باشد به طوریکه ‏ و هر دو رشته تهي را تولید کننده گرامر (1)1] نیست.

صفحه 73:
* گرامر ذیل را در نظر بگیرید. ع | ۸8 ۰ ع | 08اب ۰ | 60 ب ۰

صفحه 74:
نماد ورودي a A> aCbAB e Boe BoeA ٠ A> aCbAB | d Coc * Bo 6۸| ۰ ‏ب)‎ » جم be ۱۱

صفحه 75:
- استفاده از قوانین تولید خطا: اگر خطاهايي که در برنامه رخ می‌دهد را بتوان بيش بيني کرد می‌توان قواعد توليدي به گرامر اضافه کرد تا اين خطا را نیز شامل گردد. در این صورت تجزیه کننده با کاهش چنین گرامري خطا را کشف می‌کند و می‌تواند به تجزیه نیز ادامه دهد. گرامر ذیل نشان می‌دهد که بعد از هر دستور سمي کالن قرار دارد. ‎stmt—stmt ; stmt_list | stmt ;‏ با توجه به آمار» يكي از خطاهايي که معمولا در برنامه رخ می‌دهد عدم درج سمي کالن است در نتیجه قاعده توليدي به صورت ذیل نیز به گرامر اضافه می‌گردد. ‎stmt_error-stmt stmt_list | stmt‏ در نتیجه اگر برنامه نویس سمي کالن را درج نکند دستورات به جاي ‎U stmt‏ ۲ 5۱ کاهش می‌یابد بنابراین تجزیه کننده متوقف نمی‌گردد بلکه پیغام مناسب را صادر و تجزیه ادامه می‌یابد.

صفحه 76:
"مهمترین روشهای تصحیح خطا عبارتند از 0- تصحیح حالت اضطراري: در اين روش تجزیه کننده هنگام کشف يك خطاء نمادهاي ورودي را تا رسیدن به يك علامت هماهنگ کننده که به وسیله طراح کامپایلر معین شده است نادیده می‌گیرد. به عنوان مثال علامت سمي كالن در زبان ) يك علامت هماهنگ کننده است.

صفحه 77:
مدیریت خطا ۰ اگر پايانه‌اي مانند ‏ بالاي یه باشد که با نماد جاري یکسان نباشد» خطا رخ مي‌دهد. به منظور پوشش خطاء نماد 3 را به ورودي اضافه می‌کنيم. ۸و AvaA * SobcA ۰ ۸۲۵۸ 5 4

صفحه 78:
۸ ‏ربا به عنوان مجموعه هماهنگ کننده‎ first(A) slats ‏در نظر می‌گیریم . بنابراین اگر يكي از نمادهاي‎ ‏ظاهر شود تجزیه بر اساس ۸ ادامه‎ 5255 9 first(A) ‏می‌یابد.‎ نمادهاي () ۲01۱0۷۷ را به عنوان نمادهاي هماهنگ کننده ۸ در نظر می‌گیریم.

صفحه 79:
تجزیه کننده پایین به بالا - تجزیه کننده های عملگر اولویت - تجزیه کننده های 1

صفحه 80:
:مثالی از نحوه عملکرد تجزیه کننده پایین به بالا ‎expr— expr + term | expr - term |‏ ۵ «16۲۳۱] 441-2 term +1-2 expr + 1-2 expr + term -2 expr - 2 expr - term expr

صفحه 81:
1+2-+3 term+ 2-+3 expr + 2-+3 expr + term -+3 expr -+ 3 expr -+ term expr-+ expr

صفحه 82:
جدول ۱-۲ انوا روش اول روشها 12 4+ term 2 4+ term term term + term -term expr + term -term expr- term expr روش سوم 4+12 دمع - 1 ج4 4+ term ‏تمع‎ term + expr -ferm term + expr (عدم موفتیت در تجزیه ) كاهش رشته 4+12 به_نماد شرو روش دوم 4132 term +1-2 expr +1-2 expr + term -2 expr-2 expr- term expr ‏روش چهارم‎ 4+12 4+ 1-term 4+ term -term term + term -term expr + term -term expr term. expr

صفحه 83:
دستگیره دستگیره» دنباله‌اي است که منطبق بر سمت راست يك ‎٠‏ ‏قاعده تولید بوده و کاهش آن به سمت چپ قاعده تولید يك .مرحله از مراحل معکوس سمت راست‌ترین اشتقاق است

صفحه 84:
تجزیه بایین به بالا 13 term +1-2 expr+ 1-2 expr + term -2 expr - expr expr term جدول ۱۷-۳ مقایمه تجزیه پایین به بالا با سمتر است ترين اشتقاق اقتقاق ‎expr‏ expr - term expr - 2 expr + term - expr+1- 2 term+1- 2 4+1-2

صفحه 85:
جدول_ ۱۸-۳ دسنگیره ما es 4 term 1 expr_+ term 2 ‎term‏ عوك ‎ ‎ ‎Gaal ‎1-1-2 ‎1 11-2 expr 12 expr + term -2 expr=2 ‎expr - term expr ‎ ‏در تجزيه يابين به بالا رشته ‏قاعده تولید مورد استفاده ‎term>4‏ ‎expr>term,‏ ‎term 1‏ ‎expr expriterm‏ ‎term—>2‏ ‎expr >expriterm‏ ‎ ‎441-2 ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎

صفحه 86:
+ دستگیره‌ها را در کاهش رشته 06606 با توجه به گرامر ذیل ۴و 86 ‎Ge‏ ابتدا رشته 6606۴ را بوسیله سمت راست ترین اشتقاق تولید می‌کنیم. جدول ۱۹-۳ دستگیره 6 Bed 8 bBCE دسنگیره هاي کاهش رشته ‎becdef‏ 5 bBCf bBef bBcdef bccdef

صفحه 87:
عملکرد تجزیه کننده های ۳ - یافتن دستگیره - کاهش دستگیره

صفحه 88:
ساختار تجزیه کننده های ۳ 2 29 5 Ba bn Coes DLR + ‎action goto‏ حالات ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎

صفحه 89:
مثال گرامر ذیل را در نظر می‌گيریم. ,گرامر به شکل زیر تغییرمی کند جدول۲۲-۲ جدول نجزبه 18 action goto id + I 9 1 1 sh 3 error 2 3 rh rt 1 3 3 3 error 0 accept 51 7 error 5 7 7 7 ae wa} a} ea} ‏احات أن‎ E>E+T |T Tid 1-5 ‏غ ه‎ 2- E>E+T 3- ExT 4- Tid

صفحه 90:
مر‌احل تحنریه رشته 10+ 0] جدول ۷۲۲-۳ مراحل تجزیه_ رشته 1010 توفیحات با توجه به کننده ‎id‏ و سپس 1 « action[0,id]=s1 ‏را به‎ منتقر می‌کند. لتیجه تجزیه پشته اين تغيير در مرحله بعد نشان داده_شده_ است. با توجه به همه و با توجه به اینکه قاعده تولید شماره 4 قاعده تونید ۲:۵ است» تجزیه کننده 1 و ۱ را از بالاي پشته حذف می‌کند. در نتیچه حالت بالاي پشته 0 است. با خروج 4 11 as 1

صفحه 91:
id id E+T جدول ۲۶-۳۲ _دستگیره ها قواعد تولیه خروجي تجزیه کننده ‎LR‏ ‎Tid‏ ‎B>T‏ ‎Tid‏ ‎ESE+T‏ رشته idtid THid Et+id Eer

صفحه 92:
مهمترین روشهاي موجود عبارتند از: 0- : (1)0 | ساده ترين و ضعيفترين روش است. ©2- اا (5115)1) ساده): اين روش از (1)0 | قويتر است 9- (8)1ا يا 8 متعارف: قویترین روش ساخت جدول تجزیه | است. CLR(1) 5! 5 susi SLR(1) Vas 3) :LALR(1) -# ‏ضعیفتر است.‎

صفحه 93:
روش (1)0! عنص ر(8)0 ا : يك قاعده توليد است كه نقطه اى در سمت راست آن قرار دارد( مانند: 590.۵ ). مکان نقطه در عنصر 2 میزان پیشرفت. در كاهش غير پایانه سمت چپ(مانند ) را نشان می‌دهد. 5.2 52 52 5۰

صفحه 94:
* عنصر کاهشی: عنصری که نقطه در آحر سمت راست قاعده توليد قرار دارد. اين نوع عنصر نشان دهنده یافتن یک دستگیره است. به عنوان مثال عنصر 5-0 نشان می‌دهد که ۶ یک دستگیره است که می‌توان آن را به ‎٩‏ کاهش داد. عنصر انتقالی: عنصری که کاهشی نباشد. به عنوان مثال ‎٩-2‏ یک عنصر انتقالی است. هر عنصر انتقالی نشان دهنده فرضیه‌ای در مورد دستگیره بعدی است به عنوان مثال 9-2 نشان می‌دهد که دستگیره ممکن است از ۷ به دست آید.

صفحه 95:
ساخت ماشين متناهى ESE+T|T T>id E>E+T ‏امع‎ ‎10 ‏بو‎ ‎ESE+T ‏آبع‎ ‎10

صفحه 96:
.بو ‎S>.E‏ ‎E>.E+T‏ ‎E>.T‏ ‏.بو ‎E>.E+T‏ ‏جع ‎T-.id‏

صفحه 97:
شکل ۳۲-۳ ماشین خودکار (1800

صفحه 98:

صفحه 99:

صفحه 100:

صفحه 101:

صفحه 102:
جدول_ ۲۵-۳ _ساختار_جدول_تجزیه

صفحه 103:
E>E+T \T Tid جدود_ ۷۶-۳ ساختار_جدود_تجزیه ‎action goto‏ id + 5 1 1 حالات ها ده ام اح نت

صفحه 104:
اس goto اد جدود_ ۳۲-۳ جدول_تجزیه 5 error 1 3 ‘accept 2 action = error 11 13 sf 2 LRO) id ۳1 3 error 2 ae أت إن اناس أحد ام

صفحه 105:
برخورد انقال /کاهش بو ‎ese‏ ‎eo?‏ ‎Dordt‏ ‏[6] ۲۷ 51

صفحه 106:
برخورد کاهش /کاهش SE E>E+T ET ‏لامع‎ ‏0ه‎ X> id

جهت مطالعه ادامه متن، فایل را دریافت نمایید.
29,000 تومان