Transcript Slide 1
مشخصه های Lex
یک برنامه Lexشامل سه قسمت زیر می باشد:
اعالنات
%%
قواعد ترجمه
%%
توابع کمکی
قراعد ترجمه شامل دستورات زیر می باشد:
}{action
}{action
…
}{action
1
P1
P2
…
Pn
برای نشانه هاLex برنامه
%{
/* definitions of manifest constants
LT,LE,EQ,NE,GT,GE,IF,THEN,ID,NUMBER,RELOP*/
%}
/* regular definitions*/
delim
[ \t\n]
ws
{delim}+
letter
[A-Za-z]
digit
[0-9]
id
{letter}({letter} │ {digit})*
number {digit}=(\.{digit}+)?(E[=\-]?{digit}+)?
%%
{ws}
{/*no action and no return*/}
if
{return (IF);}
then
{return(THEN);}
else
{return(ELSE);}
{id}
{yylval=instsll-id();return(ID);}
{number} {yylval=install-num();return(NUMBER)}
“<”
{yylval=LT;return(RELOP);}
“<=“
{yylval=LE;return(RELOP);}
“=“
{yylval=EQ;return(RELOP);}
“<>”
{yylval=NE;return(RELOP);}
“>”
{yylval=GT;return(RELOP);}
“>=”
{yylval=GE;return(RELOP);}
%%
2
.....ادامه
install-id (){
/*procedure to install the lexeme,whose first character is pointed to by
yytext and whose length is yyleng,into the symbol table and return a pointer
thereto*/
}
Install-num(){
/*similar procedure to install a lexeme that is a number*/
}
3
تحلیلگر نحوی
از گرامر های مستقل از متن یا BNFکه شکلی استاندارد برلی تعریف دستورات زبان می باشد
برای مشخص نمودن قواعد نحوی زبان استفاده شده است .
تعریف گرامر
چهار تایی مرتب > G=<V,T,S,Pرا یک گرامر می نامیم هرگاه
الف) Vمجموعه ای متناهی و نا تهی از متغیر ها (غیر پایانه ها)است .
ب) Tمجموعه ای متناهی و نا تهی از حروف الفبایی است که . V∩T=Ø
ج) SЄVغیر پایانه(متغیر)شروع می باشد .
د) Pمجموعه قواعد جایگزینی است که هر قاعده از Pبیه شکل α → βاست که در آن
*β Є (VυT) * , α Є(VυT)+OR
4
گرامر مستقل از متن
گرامر Gرا یک گرامر مستقل از متن می نامند هرگاه هر قاعده آن به شکل A→ βباشد که
در آن AЄVو* ) β Є (VυTمی باشد A.باید یک غیر پایانه باشد ولی βمی تواند هر
چیزی باشد .
زبان پذیرفته شده توسط یک گرامر
زبان پذیرفته شده توسط گرامر Gرا به شکل زیر نمایش می دهیم
}│S→W
5
*L(G)={WЄT
مثالهایی از گرامر مستقل از متن
S→aSb│SS│bSa│λ (1
S→AB)2
A→aAb│λ
B→bBb│λ
)3گرامر نحوی مربوط به ارقام ،عالمت جمع و عالمت منها)(9-5+2
درخت تجزیه مربوط به عبارت باال:
6
List→list+digit
List→list-digit
List→digit
digit→0│1 │2 │… │9
درخت های تجزیه
درخت تجزیه به صورت مصور نشان می دهد که چگونه رشته ای در زبان از نماد شروع گرامر
مشتق می گردد .
درخت تجزیه مر بوط به A→XYZ
درخت تجزیه مربوط به گرامر مستقل از متن
7
.1ریشه درخت متناظر با نماد شروع گرامر است.
.2هر برگ درخت با یک نشانه و یا λنام گذاری می شود .
.3هر گره داخلی درخت با یک غیر پایانه گرامر متناظر می باشد.
.4اگر Aغیر پایانه متناظر با گره داخلی درخت باشد و X1,X2,…,Xnبرچسب های فرزندان
آن گره از چپ به راست باشند آنگاه A→X1….Xnمولدی از گرامر است.در اینجا
X1,X2,…,Xnنماد هایی از گرامر می باشند که پایانه و یا غیر پایانه هستند .در یک مورد
خاص اگر A→λآنگاه گره داخلی درخت که Aنامیده می شود دارای یک فرزند λمی باشد.
یک گرامر ممکن است برای رشته ای از نشانه ها بیش از یک درخت تجزیه داشته باشد ،در این
صورت گویند این گرامر مبهم است .بنابراین برای نمایش مبهم بودن گرامر تنها کافی است رشته ای از
نشانه ها را بیابیم که بیش از یک درخت تجزیه دارد .
در کامپایلرها نیاز به طراحی گرامر های غیر مبهم می باشد .
مثالی از گرامر مبهم:
string→string+string│string-string │0 │1 │… │9
دو درخت تجزیه برای عبارت 9 - 5+2
8
شرکت پذیری عملگر ها(از راست و یا چپ)
چهار عملگر محاسباتی جمع،تفریق،ضرب و تقسیم از چپ شرکت پذیر می باشند .
عملگر هایی از قبیل توان و = از راست شرکت پذیر می باشند .
رشته هایی مانند a=b=cکه دارای عملگر شرکت پذیر از راست می باشد توسط گرامر زیر تولید
می شوند .
right→letter=right│letter
letter→a │b │c │… │z
تفاوت بین درخت تجزیه یک عملگر شرکت پذیر از چپ مانند – و یک عملگر شرکت پذیر از
راست مانند = :
9
تقدم عملگر ها
دو تفسیر برای عبارت 9+5*2وجود دارد )9+5(*2)1:
9+)5*2()2
در عبارات محاسباتی عملگر های ضرب و تقسیم دارای تقدم بیشتری از جمع و تفریق می باشند
نحو عبارات :یک گرامر برای عبارات محاسباتی با استفاده از جدولی که شرکت پذیری و تقدم
عملگر ها را نشان می دهد ساخته می شود .
دستورات مربوط به عبارات محاسباتی * و /و +و : -
expr→expr+term│expr-term │term
term→term*factor │term/factor │factor
)factor→digit │(expr
10
نحو احکام :از کلمات کلیدی در جهت تشخیص احکام در زبانهای برنامه سازی استفاده می
گردد .
بعض ی از احکام زبان پاسکال توسط گرامر(مبهم) زیر که در آن شناسه با idنشان داده شده
است تعریف می گردند .
stmt→id:=expr
│if expr then stmt
│if expr then stmt else stmt
│while expr do stmt
│begin opt-stmts end
جهت ترجمه ساختار زبان برنامه سازی ،یک کامپایلر الزم است که در جریان کار موارد دیگری
عالوه بر کد تولید شده برای آن ساختار باشد ،که همان صفات مربوط به ساختارها می باشد
،صفت می تواند نمایش دهنده هر کمیتی باشد مانند نوع،رشته یا هر چیز دیگری.
11
نشان گذاری ،تابعی که طرح ترجمه نامیده می شود ،جهت مشخص نمودن
کار ترجمه معرفی می گردد .از طرح ترجمه برای ترجمه عبارات میانوند به نشان
گذاری پسوندی استفاده می شود.
نشان گذاری پسوند(عبارتی مانند ) E
.1اگر Eمتغییر و یا ثابت باشد آنگاه نشان گذاری پسوند برای Eخود ٍ Eمی باشد.
.2اگر Eعبارتی به شکل E1 op E2که در آن opیک عملگر دودویی می باشد ،نشان گذاری
پسوند برای Eعبارت است از . E1 E2 op
.3اگر Eعبارتی به شکل E1باشد آنگاه نشان گذاری پسوند برای E1همان نشان گذاری
پسوند برای Eمی باشد .
در نشان گذاری پسوندی نیازی به پرانتزها نیست.
برای مثال نشان گذاری پسوندی برای عبارت (9-5)+2برابر است با95-2+
952+)9-(5+2
12
نحو گرا
تعریف نحو گرا از گرامر مستقل از متن جهت مشخص نمودن ساختار نحوی ورودی استفاده می
کند .
عمل ترجمه ،یک نگاشت ورودی به خروجی می باشد .خروجی برای هر ورودی مانند Xبدین
صورت است که ابتدا یک درخت تجزیه برای ورودی Xمی سازیم .فرض کنیم که گره nدر درخت
با نماد Xاز گرامر متناظر باشد X.a.مقدار صفت aاز نماد Xدر آن گره است .
درخت تجزیه ای که مقادیر صفات در هر گره همراه داشته باشد درخت تجزیه annotated
گویند .
صفات نحوی
صفتی را نحوی می گوییم که مقدارش در هر گره درخت تجزیه ،از مقادیر صفات فرزندان آن گره
بدست آید .
صفات نحوی ،خواص ی می باشند که در پیمایش پایین به باال درخت تجزیه ،ارزشیابی می گردند .
13
مثالی از یک تعریف نحوگرا برای ترجمه عبارات حاوی ارقام و عالمت های جمع و
تفریق به نشان گذاری پسوند :
14
مثال :
فرض کنید که یک روبات به نحوی ساخته شده که یک قدم به شرق حرکت نماید و سپس به ترتیب یک قدم
به شمال ،به مغرب و در پایان یک قدم به جنوب حرکت نماید.دنباله ای از چنین دستورالعمل هایی به وسیله
گرامر زیر تولید می شود :
seq→seg instr│begin
instr→east│north│west│south
تعییر موقعیت این روبات با توجه به ورودی
Begin west south east east east north north
پیگیری موقعیت یک روبات :
15
begin west south برایannotated درخت تجزیه
16
تعریف نحوگرای موقعیت روبات
17
پیمایش های عمقی
که. در این قسمت قوانین معنایی با استفاده از پیمایش عمقی تعریف می شوند
: شکل ارزشیابی آن بدین صورت است
procedure visit (n : node);
begin
for each child m of n, from left to right do
visit(m);
evaluate semantic rules at node n
end
18
الگو های ترجمه
الگو ی ترجمه گرامر مستقل از متن است که در آن ،قطعه برنامه هایی که عملیات معنایی نامیده
می شوند همراه سمت راست مولد می باشند .
الگوی ترجمه مانند یک تعریف نحوگرا است ،بجز اینکه ترتیب ارزشیابی قوانین معنایی صریحا
داده شده است .جایی که در آن عملیات باید اجرا شود ،با یک جفت کروشه نشان داده شده است
و در داخل سمت راست مولد نوشته می شود ،مانند :
rest→+term{print(‘+’)} rest1
درخت تجزیه :
19
تولید ترجمه
در این بخش ،عملیات معنایی در الگو های ترجمه ،خروجی ترجمه را که یک رشته یا یک کاراکتر می باشد در
پرونده می نویسد .
عملیاتی که عبارات را به نشان گذاری پسوندی ترجمه می نماید :
})’expr→expr+term{print(‘+
})’expr→expr-term {print(‘-
expr→term
term→0
})’{print(‘0
term→1
})’{print(‘1
…
term→9
})’{print(‘9
عملیات الزم برای ترجمه 9-5+2به 95-2+
20