ݺߣ

ݺߣShare a Scribd company logo
FLEX تخصصی : ایجاد تحلیلگر لغوی در ویندوز با استفاده از
‫افزار‬ ‫نرم‬ ‫با‬ ‫لغوی‬ ‫تحلیلگر‬ ‫ایجاد‬
FLEX
‫صابری‬ ‫حمید‬
‫دیماه‬93
h.saberi@yahoo.com
Flex‫مخفف‬Fast Lexical Analyzer
FLEX‫چیست‬....‫؟‬
Flex‫مخفف‬Fast Lexical Analyzer
‫ها‬ ‫ات‬ ‫اسهاال‬ ‫بهر‬ ‫ا‬ ‫ر‬ ‫مه‬ ‫که‬ ‫است‬ ‫لغوی‬ ‫تحلیلگر‬ ‫تولیدکننده‬ ‫یک‬‫داده‬
‫کنند‬ ‫می‬ ‫تحلیل‬ ‫مشخص‬ ‫فایل‬ ‫د‬ ‫شده‬
FLEX‫چیست‬....‫؟‬
Flex‫مخفف‬Fast Lexical Analyzer
‫ها‬ ‫ات‬ ‫اسهاال‬ ‫بهر‬ ‫ا‬ ‫ر‬ ‫مه‬ ‫که‬ ‫است‬ ‫لغوی‬ ‫تحلیلگر‬ ‫تولیدکننده‬ ‫یک‬‫داده‬
‫کنند‬ ‫می‬ ‫تحلیل‬ ‫مشخص‬ ‫فایل‬ ‫د‬ ‫شده‬
‫سال‬ ‫د‬ ‫پاکسون‬ ‫ن‬ ‫و‬ ‫توسط‬ ‫شده‬ ‫نوش‬۱9۸۷‫زبان‬ ‫ب‬ ‫و‬C
‫برای‬DOS‫ویندوز‬ ‫و‬
FLEX‫چیست‬....‫؟‬
‫مرا‬‫توسط‬ ‫لغوی‬ ‫تحلیلگر‬ ‫تولید‬ ‫حل‬
FLEX
‫مرا‬‫توسط‬ ‫لغوی‬ ‫تحلیلگر‬ ‫تولید‬ ‫حل‬
FLEX
‫مشخص‬ ‫فایل‬ ‫ایجاد‬
)‫زبان‬ ‫ب‬ ‫برنام‬(FLEX
‫مرا‬‫توسط‬ ‫لغوی‬ ‫تحلیلگر‬ ‫تولید‬ ‫حل‬
FLEX
‫مشخص‬ ‫فایل‬ ‫ایجاد‬
)‫زبان‬ ‫ب‬ ‫برنام‬(FLEX
‫توسط‬ ‫کامپایل‬FLEX
‫مرا‬‫توسط‬ ‫لغوی‬ ‫تحلیلگر‬ ‫تولید‬ ‫حل‬
FLEX
‫مشخص‬ ‫فایل‬ ‫ایجاد‬
)‫زبان‬ ‫ب‬ ‫برنام‬(FLEX
‫توسط‬ ‫کامپایل‬FLEX
‫فایل‬ ‫ایجاد‬lex.yy.c
)‫زبان‬ ‫ب‬ ‫برنام‬(C
‫مرا‬‫توسط‬ ‫لغوی‬ ‫تحلیلگر‬ ‫تولید‬ ‫حل‬
FLEX
‫مشخص‬ ‫فایل‬ ‫ایجاد‬
)‫زبان‬ ‫ب‬ ‫برنام‬(FLEX
‫توسط‬ ‫کامپایل‬FLEX
‫فایل‬ ‫ایجاد‬lex.yy.c
)‫زبان‬ ‫ب‬ ‫برنام‬(C
‫توسط‬ ‫کامپایل‬C
‫مرا‬‫توسط‬ ‫لغوی‬ ‫تحلیلگر‬ ‫تولید‬ ‫حل‬
FLEX
‫مشخص‬ ‫فایل‬ ‫ایجاد‬
)‫زبان‬ ‫ب‬ ‫برنام‬(FLEX
‫توسط‬ ‫کامپایل‬FLEX
‫فایل‬ ‫ایجاد‬lex.yy.c
)‫زبان‬ ‫ب‬ ‫برنام‬(C
‫توسط‬ ‫کامپایل‬C‫لغوی‬ ‫تحلیلگر‬
‫مشخص‬ ‫فایل‬...‫؟‬
‫برای‬ ‫نی‬ ‫م‬ ‫ودی‬ ‫و‬ ‫فایل‬ ‫یک‬Flex
‫مشخص‬ ‫فایل‬...‫؟‬
‫برای‬ ‫نی‬ ‫م‬ ‫ودی‬ ‫و‬ ‫فایل‬ ‫یک‬Flex
‫کد‬ ‫تعدادی‬ ‫همراه‬ ‫ب‬ ‫بر‬ ‫کا‬ ‫نظر‬ ‫د‬ ‫مو‬ ‫الگوهای‬ ‫شامل‬C‫هر‬ ‫برای‬‫الگو‬
‫پسوند‬ ‫ای‬ ‫دا‬`.l`
‫مشخص‬ ‫فایل‬ ‫ا‬ ‫ساخ‬
‫تعریف‬ ‫بخش‬
%%
‫د‬ ‫قوا‬ ‫بخش‬
%%
‫زبان‬ ‫کد‬ ‫بخش‬C
‫حالت‬ ‫دو‬ ‫شامل‬:
‫تعریف‬ ‫بخش‬(‫ی‬ ‫یا‬ ‫اخ‬)
‫حالت‬ ‫دو‬ ‫شامل‬:
۱:
‫ده‬ ‫باقا‬ ‫با‬‫نام‬
‫تعریف‬ ‫بخش‬(‫ی‬ ‫یا‬ ‫اخ‬)
‫حالت‬ ‫دو‬ ‫شامل‬:
۱:
‫ده‬ ‫باقا‬ ‫با‬‫نام‬
‫مثال‬:Digit [0-9]
‫تعریف‬ ‫بخش‬(‫ی‬ ‫یا‬ ‫اخ‬)
‫حالت‬ ‫دو‬ ‫شامل‬:
۱:
‫ده‬ ‫باقا‬ ‫با‬‫نام‬
‫مثال‬:Digit [0-9]
2:
%}‫زبان‬ ‫ب‬ ‫کد‬%{ C
‫تعریف‬ ‫بخش‬(‫ی‬ ‫یا‬ ‫اخ‬)
‫تعریف‬ ‫بخش‬(‫ی‬ ‫یا‬ ‫اخ‬)
‫حالت‬ ‫دو‬ ‫شامل‬:
۱:
‫ده‬ ‫باقا‬ ‫با‬‫نام‬
‫مثال‬:Digit [0-9]
2:
%}‫زبان‬ ‫ب‬ ‫کد‬%{ C
‫مثال‬:%{ int count; %}
‫د‬ ‫قوا‬ ‫بخش‬(‫ی‬ ‫اجبا‬)
‫بخش‬ ‫ایر‬‫مشخص‬‫لغت‬ ‫یک‬ ‫کشف‬ ‫هنگام‬ ‫کند‬ ‫می‬‫مطابق‬‫از‬ ‫یکهی‬‫به‬‫ا‬ ‫ا‬
‫چ‬ ‫ده‬ ‫قا‬ ‫با‬‫شود‬ ‫انجام‬ ‫باید‬ ‫ملی‬
‫د‬ ‫قوا‬ ‫بخش‬(‫ی‬ ‫اجبا‬)
‫د‬ ‫قوا‬ ‫ا‬ ‫ساخ‬:
}‫ملیا‬{‫نشان‬ ‫الگوی‬(‫ده‬ ‫قا‬ ‫با‬ ‫با‬)
‫د‬ ‫قوا‬ ‫بخش‬(‫ی‬ ‫اجبا‬)
‫د‬ ‫قوا‬ ‫ا‬ ‫ساخ‬:
}‫ملیا‬{‫نشان‬ ‫الگوی‬(‫ده‬ ‫قا‬ ‫با‬ ‫با‬)
‫نشان‬ ‫الگوی‬:
‫ی‬ ‫تعا‬ ‫بخش‬ ‫د‬ ‫شده‬ ‫تعریف‬ ‫اسامی‬ ‫از‬ ‫یکی‬ ‫یا‬ ‫و‬ ‫ده‬ ‫قا‬ ‫با‬ ‫با‬‫ف‬
‫د‬ ‫قوا‬ ‫بخش‬(‫ی‬ ‫اجبا‬)
‫د‬ ‫قوا‬ ‫ا‬ ‫ساخ‬:
}‫ملیا‬{‫نشان‬ ‫الگوی‬(‫ده‬ ‫قا‬ ‫با‬ ‫با‬)
‫نشان‬ ‫الگوی‬:
‫ی‬ ‫تعا‬ ‫بخش‬ ‫د‬ ‫شده‬ ‫تعریف‬ ‫اسامی‬ ‫از‬ ‫یکی‬ ‫یا‬ ‫و‬ ‫ده‬ ‫قا‬ ‫با‬ ‫با‬‫ف‬
‫ملیا‬:
‫زبان‬ ‫ب‬ ‫هایی‬ ‫العمل‬ ‫و‬ ‫دس‬c‫ر‬ ‫یهاف‬ ‫هنگهام‬ ‫که‬ ‫دههد‬ ‫مهی‬ ‫نشهان‬ ‫ا‬
‫شوند‬ ‫اجرا‬ ‫باید‬ ‫نشان‬ ‫الگوی‬ ‫مطابق‬ ‫ها‬ ‫ر‬ ‫اک‬ ‫کا‬ ‫از‬ ‫ای‬ ‫دنبال‬.
‫د‬ ‫قوا‬ ‫بخش‬(‫ی‬ ‫اجبا‬)
‫مثال‬:
"if" { printf ( " I found `if` keyword..! n" ) ; }
{Digit} { printf ( " I found Digit…1n" ) ; }
‫زبان‬ ‫کد‬ ‫بخش‬C
‫زبان‬ ‫کد‬ ‫توابع‬ ‫و‬ ‫ا‬ ‫و‬ ‫دس‬ ‫شامل‬C‫اسهت‬‫فایهل‬ ‫به‬ ‫کلمه‬ ‫به‬ ‫کلمه‬ ‫که‬
‫تولید‬ ‫اصلی‬‫اضاف‬ ،‫شده‬‫میشود‬
‫زبان‬ ‫کد‬ ‫بخش‬C
‫زبان‬ ‫کد‬ ‫توابع‬ ‫و‬ ‫ا‬ ‫و‬ ‫دس‬ ‫شامل‬C‫اسهت‬‫فایهل‬ ‫به‬ ‫کلمه‬ ‫به‬ ‫کلمه‬ ‫که‬
‫تولید‬ ‫اصلی‬‫اضاف‬ ،‫شده‬‫میشود‬
‫نظر‬ ‫از‬ ‫بخش‬ ‫ایر‬ ‫هرچند‬FLEX‫زبهان‬ ‫ب‬ ‫کامپایل‬ ‫برای‬ ‫اما‬ ،‫است‬ ‫ی‬ ‫یا‬ ‫اخ‬
c‫باشد‬ ‫می‬ ‫ی‬ ‫اجبا‬ ‫بخش‬ ‫ایر‬ ‫کدهای‬ ،‫لغوی‬ ‫تحلیلگر‬ ‫تولید‬ ‫جهت‬
‫زبان‬ ‫کد‬ ‫بخش‬C
‫زبان‬ ‫کد‬ ‫توابع‬ ‫و‬ ‫ا‬ ‫و‬ ‫دس‬ ‫شامل‬C‫اسهت‬‫فایهل‬ ‫به‬ ‫کلمه‬ ‫به‬ ‫کلمه‬ ‫که‬
‫تولید‬ ‫اصلی‬‫اضاف‬ ،‫شده‬‫میشود‬
‫نظر‬ ‫از‬ ‫بخش‬ ‫ایر‬ ‫هرچند‬FLEX‫زبهان‬ ‫ب‬ ‫کامپایل‬ ‫برای‬ ‫اما‬ ،‫است‬ ‫ی‬ ‫یا‬ ‫اخ‬
c‫باشد‬ ‫می‬ ‫ی‬ ‫اجبا‬ ‫بخش‬ ‫ایر‬ ‫کدهای‬ ،‫لغوی‬ ‫تحلیلگر‬ ‫تولید‬ ‫جهت‬
‫تابع‬ ‫لغوی‬ ‫تحلیلگر‬ ‫اجرای‬ ‫جهت‬yylex()‫شود‬ ‫فراخوانی‬ ‫باید‬ ‫بخش‬ ‫ایر‬ ‫د‬
‫زبان‬ ‫کد‬ ‫بخش‬C
‫زبان‬ ‫کد‬ ‫توابع‬ ‫و‬ ‫ا‬ ‫و‬ ‫دس‬ ‫شامل‬C‫اسهت‬‫فایهل‬ ‫به‬ ‫کلمه‬ ‫به‬ ‫کلمه‬ ‫که‬
‫تولید‬ ‫اصلی‬‫اضاف‬ ،‫شده‬‫میشود‬
‫نظر‬ ‫از‬ ‫بخش‬ ‫ایر‬ ‫هرچند‬FLEX‫زبهان‬ ‫ب‬ ‫کامپایل‬ ‫برای‬ ‫اما‬ ،‫است‬ ‫ی‬ ‫یا‬ ‫اخ‬
c‫باشد‬ ‫می‬ ‫ی‬ ‫اجبا‬ ‫بخش‬ ‫ایر‬ ‫کدهای‬ ،‫لغوی‬ ‫تحلیلگر‬ ‫تولید‬ ‫جهت‬
‫تابع‬ ‫لغوی‬ ‫تحلیلگر‬ ‫اجرای‬ ‫جهت‬yylex()‫شود‬ ‫فراخوانی‬ ‫باید‬ ‫بخش‬ ‫ایر‬ ‫د‬
‫تابع‬yywrap()‫توسهط‬ ،‫سهید‬ ‫فایهل‬ ‫پایهان‬ ‫به‬ ‫تحلیل‬ ‫کا‬ ‫هنگامیک‬Flex
‫شود‬ ‫می‬ ‫فراخوانی‬.‫همیش‬ ‫تابع‬ ‫ایر‬‫مقدا‬۱‫ا‬‫گرداند‬ ‫می‬ ‫بر‬
‫مثال‬:
‫برنام‬‫زبان‬ ‫ب‬ ‫ای‬FLEX‫ا‬ ‫ودی‬ ‫و‬ ‫خطوط‬ ‫و‬ ‫رها‬ ‫اک‬ ‫کا‬ ‫تعداد‬ ‫ک‬
‫کند‬ ‫چاپ‬ ‫ا‬ ‫یج‬ ‫ن‬ ‫و‬ ‫کرده‬ ‫ش‬ ‫شما‬
%{
int nchar , nline ;
%}
%%
[n] { nline++ ; }
. { nchar++ ; }
%%
int main ( void )
{ yylex();
printf( "%d %d" , nchar , nline+1);
return (0) ; }
int yywrap(void)
{ return 1; }
%{
int nchar , nline ;
%}
%%
[n] { nline++ ; }
. { nchar++ ; }
%%
int main ( void )
{ yylex();
printf( "%d %d" , nchar , nline+1);
return (0) ; }
int yywrap(void)
{ return 1; }
‫تعریف‬ ‫بخش‬
‫د‬ ‫قوا‬ ‫بخش‬
‫زبان‬ ‫کد‬ ‫بخش‬
C
`.`‫ب‬ ‫ر‬ ‫اک‬ ‫کا‬ ‫هر‬ ‫یعنی‬‫جز‬`n`‫است‬
‫یج‬ ‫ن‬ ‫چاپ‬
‫ودی‬ ‫و‬:
Compiler design
Hamid saberi
‫ودی‬ ‫و‬:
Compiler design
Hamid saberi
‫خروجی‬:
27 2
‫مثال‬:
‫برنام‬‫زبان‬ ‫ب‬ ‫ای‬FLEX‫شرتی‬ ‫با‬ ‫تشخیص‬ ‫جهت‬
if….else
Digit [0-9]
Lower [a-z]
Upper [A-Z]
Letter {Lower}|{Upper}|[_]
Var {Letter}({Letter}|{Digit})*
%%
"if" { printf ( " I found `if` keyword n" ) ; }
"else" { printf ( " I found `else` keyword n") ; }
“then" { printf ( " I found `then` keyword n") ; }
{Var} { printf (" I found variable %s n" , yytext) ; }
%%
int main ( void )
{ yylex(); return (0) ; }
int yywrap(void)
{ return 1; }
Digit [0-9]
Lower [a-z]
Upper [A-Z]
Letter {Lower}|{Upper}|[_]
Var {Letter}({Letter}|{Digit})*
%%
"if" { printf ( " I found `if` keyword n" ) ; }
"else" { printf ( " I found `else` keyword n") ; }
“then" { printf ( " I found `then` keyword n") ; }
{Var} { printf (" I found variable %s n" , yytext) ; }
%%
int main ( void )
{ yylex(); return (0) ; }
int yywrap(void)
{ return 1; }
‫تعریف‬ ‫بخش‬
‫د‬ ‫قوا‬ ‫بخش‬
‫زبان‬ ‫کد‬ ‫بخش‬
C
‫زبان‬ ‫د‬ ‫غییرها‬ ‫م‬ ‫تعریف‬ ‫قوانیر‬C
yytext:‫ش‬‫ای‬‫است‬‫یکی‬ ‫با‬ ‫ک‬
‫است‬ ‫کرده‬ ‫پیدا‬ ‫تطبیق‬ ‫الگوها‬ ‫از‬
‫ودی‬ ‫و‬:
if temp_1 then result1 else if temp_2 then result2 else result3
‫ودی‬ ‫و‬:
if temp_1 then result1 else if temp_2 then result2 else result3
‫خروجی‬:
I found `if` keyword
I found variable temp_1
I found `then` keyword
I found variable result1
I found `else` keyword
I found `if` keyword
I found variable temp_2
I found `then` keyword
I found variable result2
I found `else` keyword
I found variable result3
‫ب‬ ‫نداش‬ ‫همخوانی‬ ‫الگوها‬ ‫از‬ ‫یک‬ ‫هیچ‬ ‫با‬ ‫شده‬ ‫د‬ ‫وا‬ ‫ر‬ ‫م‬ ‫تیک‬ ‫صو‬ ‫د‬،‫اشد‬
ً‫ا‬‫ین‬ ‫با‬ ‫آن‬‫میشود‬ ‫ده‬ ‫آو‬ ‫خروجی‬ ‫د‬.
‫نک‬ ‫چند‬:
‫ب‬ ‫نداش‬ ‫همخوانی‬ ‫الگوها‬ ‫از‬ ‫یک‬ ‫هیچ‬ ‫با‬ ‫شده‬ ‫د‬ ‫وا‬ ‫ر‬ ‫م‬ ‫تیک‬ ‫صو‬ ‫د‬،‫اشد‬
ً‫ا‬‫ین‬ ‫با‬ ‫آن‬‫میشود‬ ‫ده‬ ‫آو‬ ‫خروجی‬ ‫د‬.
‫مثال‬:
‫نک‬ ‫چند‬:
‫ودی‬ ‫و‬:
if temp_1 then 1result
‫خروجی‬:
I found `if` keyword
I found variable temp_1
I found `then` keyword
1result
‫ب‬ ‫نداش‬ ‫همخوانی‬ ‫الگوها‬ ‫از‬ ‫یک‬ ‫هیچ‬ ‫با‬ ‫شده‬ ‫د‬ ‫وا‬ ‫ر‬ ‫م‬ ‫تیک‬ ‫صو‬ ‫د‬،‫اشد‬
ً‫ا‬‫ین‬ ‫با‬ ‫آن‬‫میشود‬ ‫ده‬ ‫آو‬ ‫خروجی‬ ‫د‬.
‫تعریف‬ ‫مکان‬‫مهم‬ ‫برنام‬ ‫د‬ ‫ده‬ ‫قا‬ ‫با‬ ‫ا‬ ‫با‬‫است‬.‫م‬ ‫لغهوی‬ ‫تحلیلگر‬‫قایسه‬
‫دنبال‬‫ی‬‫ودی‬ ‫و‬‫به‬ ‫هده‬ ‫قا‬ ‫بها‬ ‫ا‬ ‫با‬ ‫با‬ ‫ا‬‫ترتیه‬‫از‬‫به‬ ‫بها‬‫پهاییر‬‫ا‬‫نجهام‬
‫می‬‫دههد‬.‫هده‬ ‫قا‬ ‫بها‬ ‫ا‬ ‫بها‬ ‫کلیهدی‬ ‫کلمها‬ ‫بنهابرایر‬)‫ماننهد‬(if‫بایهد‬‫از‬ ‫قبهل‬
‫شناس‬‫ها‬‫د‬ ‫باشند‬‫اینصهو‬ ‫غیهر‬‫تمهام‬‫شناسه‬ ‫کلیهدی‬ ‫کلمها‬‫ن‬ ‫د‬‫ظهر‬
‫شوند‬ ‫می‬ ‫گرف‬.
‫نک‬ ‫چند‬:
Digit [0-9]
Lower [a-z]
Upper [A-Z]
Letter {Lower}|{Upper}|[_]
Var {Letter}({Letter}|{Digit})*
%%
"if" { printf ( " I found `if` keyword n" ) ; }
"else" { printf ( " I found `else` keyword n") ; }
“then" { printf ( " I found `then` keyword n") ; }
{Var} { printf (" I found variable %s n" , yytext) ; }
%%
int main ( void )
{ yylex(); return (0) ; }
int yywrap(void)
{ return 1; }
‫تعریف‬ ‫بخش‬
‫د‬ ‫قوا‬ ‫بخش‬
‫زبان‬ ‫کد‬ ‫بخش‬
C
‫ده‬ ‫آو‬ ‫الگوها‬ ‫آخر‬ ‫خط‬ ‫د‬ ‫باید‬
‫شود‬!...
‫اجرای‬FLEX‫ویندوز‬ ‫امل‬ ‫م‬ ‫سیس‬ ‫وی‬ ‫بر‬
‫افزا‬ ‫نرم‬ ‫دانلود‬FLEX
http://gnuwin32.sourceforge.net/packages/flex.htm
‫اجرای‬FLEX
‫فایل‬flex.exe‫ب‬ ‫ک‬ ‫نی‬ ‫م‬ ‫فایل‬ ‫و‬‫زبان‬FLEX‫و‬ ‫ایم‬ ‫نوش‬‫آن‬ ‫پسوند‬
`.l`‫است‬‫د‬ ‫ا‬‫مشهخص‬ ‫مسهیر‬ ‫یک‬)‫ماننهد‬(d:‫مهی‬ ‫قهرا‬‫خهط‬ ‫د‬ ‫و‬ ‫دههیم‬
‫ویندوز‬ ‫فرمان‬(command prompt)‫ب‬‫وش‬‫مل‬ ‫زیر‬‫می‬‫کنیم‬:
D:flex ‫مبدا‬ ‫فایل‬ ‫نام‬
‫اجرای‬FLEX
‫فایل‬flex.exe‫ب‬ ‫ک‬ ‫نی‬ ‫م‬ ‫فایل‬ ‫و‬‫زبان‬FLEX‫و‬ ‫ایم‬ ‫نوش‬‫آن‬ ‫پسوند‬
`.l`‫است‬‫د‬ ‫ا‬‫مشهخص‬ ‫مسهیر‬ ‫یک‬)‫ماننهد‬(d:‫مهی‬ ‫قهرا‬‫خهط‬ ‫د‬ ‫و‬ ‫دههیم‬
‫ویندوز‬ ‫فرمان‬(command prompt)‫ب‬‫وش‬‫مل‬ ‫زیر‬‫می‬‫کنیم‬:
D:flex ‫مبدا‬ ‫فایل‬ ‫نام‬
‫مثال‬:
D:flex input.l
‫لغوی‬ ‫تحلیلگر‬ ‫اجرایی‬ ‫فایل‬ ‫تولید‬
‫نام‬ ‫با‬ ‫فایل‬ ‫یک‬ ،‫قبل‬ ‫مرحل‬ ‫خروجی‬lex.yy.c‫باشد‬ ‫می‬
‫لغوی‬ ‫تحلیلگر‬ ‫اجرایی‬ ‫فایل‬ ‫تولید‬
‫نام‬ ‫با‬ ‫فایل‬ ‫یک‬ ،‫قبل‬ ‫مرحل‬ ‫خروجی‬lex.yy.c‫باشد‬ ‫می‬
‫کامپهایلر‬ ‫توسهط‬ ‫فایهل‬ ‫ایهر‬ ‫بایهد‬ ،‫لغوی‬ ‫تحلیلگر‬ ‫تولید‬ ‫برای‬C‫و‬ ‫کامپایهل‬ ،
‫اجرایی‬ ‫فایل‬(.exe)‫شود‬ ‫ایجاد‬ ‫تحلیلگر‬
‫لغوی‬ ‫تحلیلگر‬ ‫اجرایی‬ ‫فایل‬ ‫تولید‬
‫نام‬ ‫با‬ ‫فایل‬ ‫یک‬ ،‫قبل‬ ‫مرحل‬ ‫خروجی‬lex.yy.c‫باشد‬ ‫می‬
‫کامپهایلر‬ ‫توسهط‬ ‫فایهل‬ ‫ایهر‬ ‫بایهد‬ ،‫لغوی‬ ‫تحلیلگر‬ ‫تولید‬ ‫برای‬C‫و‬ ‫کامپایهل‬ ،
‫اجرایی‬ ‫فایل‬(.exe)‫شود‬ ‫ایجاد‬ ‫تحلیلگر‬
‫اه‬ ‫دو‬:
‫کامپایلرهای‬ ‫توسط‬c‫مانند‬Borland c
‫لغوی‬ ‫تحلیلگر‬ ‫اجرایی‬ ‫فایل‬ ‫تولید‬
‫نام‬ ‫با‬ ‫فایل‬ ‫یک‬ ،‫قبل‬ ‫مرحل‬ ‫خروجی‬lex.yy.c‫باشد‬ ‫می‬
‫کامپهایلر‬ ‫توسهط‬ ‫فایهل‬ ‫ایهر‬ ‫بایهد‬ ،‫لغوی‬ ‫تحلیلگر‬ ‫تولید‬ ‫برای‬C‫و‬ ‫کامپایهل‬ ،
‫اجرایی‬ ‫فایل‬(.exe)‫شود‬ ‫ایجاد‬ ‫تحلیلگر‬
‫اه‬ ‫دو‬:
‫کامپایلرهای‬ ‫توسط‬c‫مانند‬Borland c
‫توسط‬gcc‫زیر‬ ‫و‬ ‫دس‬ ‫و‬:
gcc lex.yy.c -o output.exe
‫لغوی‬ ‫تحلیلگر‬ ‫اجرای‬
‫ویندوز‬ ‫فرمان‬ ‫خط‬ ‫د‬ ‫اجرایی‬ ‫فایل‬ ‫فراخوانی‬(command prompt)
‫لغوی‬ ‫تحلیلگر‬ ‫اجرای‬
‫ویندوز‬ ‫فرمان‬ ‫خط‬ ‫د‬ ‫اجرایی‬ ‫فایل‬ ‫فراخوانی‬(command prompt)
‫تحلیلگر‬ ‫ودی‬ ‫و‬ ‫کردن‬ ‫د‬ ‫وا‬:
‫لغوی‬ ‫تحلیلگر‬ ‫اجرای‬
‫ویندوز‬ ‫فرمان‬ ‫خط‬ ‫د‬ ‫اجرایی‬ ‫فایل‬ ‫فراخوانی‬(command prompt)
‫تحلیلگر‬ ‫ودی‬ ‫و‬ ‫کردن‬ ‫د‬ ‫وا‬:
‫وش‬ ‫دو‬:
‫ویندوز‬ ‫فرمان‬ ‫خط‬ ‫تریق‬ ‫از‬ ‫و‬ ‫قیم‬ ‫مس‬ ‫ودی‬ ‫و‬(command prompt)
‫لغوی‬ ‫تحلیلگر‬ ‫اجرای‬
‫ویندوز‬ ‫فرمان‬ ‫خط‬ ‫د‬ ‫اجرایی‬ ‫فایل‬ ‫فراخوانی‬(command prompt)
‫تحلیلگر‬ ‫ودی‬ ‫و‬ ‫کردن‬ ‫د‬ ‫وا‬:
‫وش‬ ‫دو‬:
‫ویندوز‬ ‫فرمان‬ ‫خط‬ ‫تریق‬ ‫از‬ ‫و‬ ‫قیم‬ ‫مس‬ ‫ودی‬ ‫و‬(command prompt)
‫فایل‬ ‫تریق‬ ‫از‬ ‫ودی‬ ‫و‬
sample.exe <input.txt >output.txt
‫منابع‬:
 Wikipedia
 Stackoverflow.com
 barnamenevis.org
‫از‬ ‫فراوان‬ ‫تشکر‬ ‫با‬:
‫فهیمی‬ ‫ضا‬ ،‫ظیمی‬ ‫اتف‬ ،‫شاکری‬ ‫مصطفی‬
‫گوگل‬ ‫جوی‬ ‫جس‬ ‫موتو‬ ‫و‬!....
‫تشکر‬ ‫با‬....

More Related Content

FLEX تخصصی : ایجاد تحلیلگر لغوی در ویندوز با استفاده از

  • 2. ‫افزار‬ ‫نرم‬ ‫با‬ ‫لغوی‬ ‫تحلیلگر‬ ‫ایجاد‬ FLEX ‫صابری‬ ‫حمید‬ ‫دیماه‬93 h.saberi@yahoo.com
  • 4. Flex‫مخفف‬Fast Lexical Analyzer ‫ها‬ ‫ات‬ ‫اسهاال‬ ‫بهر‬ ‫ا‬ ‫ر‬ ‫مه‬ ‫که‬ ‫است‬ ‫لغوی‬ ‫تحلیلگر‬ ‫تولیدکننده‬ ‫یک‬‫داده‬ ‫کنند‬ ‫می‬ ‫تحلیل‬ ‫مشخص‬ ‫فایل‬ ‫د‬ ‫شده‬ FLEX‫چیست‬....‫؟‬
  • 5. Flex‫مخفف‬Fast Lexical Analyzer ‫ها‬ ‫ات‬ ‫اسهاال‬ ‫بهر‬ ‫ا‬ ‫ر‬ ‫مه‬ ‫که‬ ‫است‬ ‫لغوی‬ ‫تحلیلگر‬ ‫تولیدکننده‬ ‫یک‬‫داده‬ ‫کنند‬ ‫می‬ ‫تحلیل‬ ‫مشخص‬ ‫فایل‬ ‫د‬ ‫شده‬ ‫سال‬ ‫د‬ ‫پاکسون‬ ‫ن‬ ‫و‬ ‫توسط‬ ‫شده‬ ‫نوش‬۱9۸۷‫زبان‬ ‫ب‬ ‫و‬C ‫برای‬DOS‫ویندوز‬ ‫و‬ FLEX‫چیست‬....‫؟‬
  • 7. ‫مرا‬‫توسط‬ ‫لغوی‬ ‫تحلیلگر‬ ‫تولید‬ ‫حل‬ FLEX ‫مشخص‬ ‫فایل‬ ‫ایجاد‬ )‫زبان‬ ‫ب‬ ‫برنام‬(FLEX
  • 8. ‫مرا‬‫توسط‬ ‫لغوی‬ ‫تحلیلگر‬ ‫تولید‬ ‫حل‬ FLEX ‫مشخص‬ ‫فایل‬ ‫ایجاد‬ )‫زبان‬ ‫ب‬ ‫برنام‬(FLEX ‫توسط‬ ‫کامپایل‬FLEX
  • 9. ‫مرا‬‫توسط‬ ‫لغوی‬ ‫تحلیلگر‬ ‫تولید‬ ‫حل‬ FLEX ‫مشخص‬ ‫فایل‬ ‫ایجاد‬ )‫زبان‬ ‫ب‬ ‫برنام‬(FLEX ‫توسط‬ ‫کامپایل‬FLEX ‫فایل‬ ‫ایجاد‬lex.yy.c )‫زبان‬ ‫ب‬ ‫برنام‬(C
  • 10. ‫مرا‬‫توسط‬ ‫لغوی‬ ‫تحلیلگر‬ ‫تولید‬ ‫حل‬ FLEX ‫مشخص‬ ‫فایل‬ ‫ایجاد‬ )‫زبان‬ ‫ب‬ ‫برنام‬(FLEX ‫توسط‬ ‫کامپایل‬FLEX ‫فایل‬ ‫ایجاد‬lex.yy.c )‫زبان‬ ‫ب‬ ‫برنام‬(C ‫توسط‬ ‫کامپایل‬C
  • 11. ‫مرا‬‫توسط‬ ‫لغوی‬ ‫تحلیلگر‬ ‫تولید‬ ‫حل‬ FLEX ‫مشخص‬ ‫فایل‬ ‫ایجاد‬ )‫زبان‬ ‫ب‬ ‫برنام‬(FLEX ‫توسط‬ ‫کامپایل‬FLEX ‫فایل‬ ‫ایجاد‬lex.yy.c )‫زبان‬ ‫ب‬ ‫برنام‬(C ‫توسط‬ ‫کامپایل‬C‫لغوی‬ ‫تحلیلگر‬
  • 12. ‫مشخص‬ ‫فایل‬...‫؟‬ ‫برای‬ ‫نی‬ ‫م‬ ‫ودی‬ ‫و‬ ‫فایل‬ ‫یک‬Flex
  • 13. ‫مشخص‬ ‫فایل‬...‫؟‬ ‫برای‬ ‫نی‬ ‫م‬ ‫ودی‬ ‫و‬ ‫فایل‬ ‫یک‬Flex ‫کد‬ ‫تعدادی‬ ‫همراه‬ ‫ب‬ ‫بر‬ ‫کا‬ ‫نظر‬ ‫د‬ ‫مو‬ ‫الگوهای‬ ‫شامل‬C‫هر‬ ‫برای‬‫الگو‬ ‫پسوند‬ ‫ای‬ ‫دا‬`.l`
  • 14. ‫مشخص‬ ‫فایل‬ ‫ا‬ ‫ساخ‬ ‫تعریف‬ ‫بخش‬ %% ‫د‬ ‫قوا‬ ‫بخش‬ %% ‫زبان‬ ‫کد‬ ‫بخش‬C
  • 15. ‫حالت‬ ‫دو‬ ‫شامل‬: ‫تعریف‬ ‫بخش‬(‫ی‬ ‫یا‬ ‫اخ‬)
  • 16. ‫حالت‬ ‫دو‬ ‫شامل‬: ۱: ‫ده‬ ‫باقا‬ ‫با‬‫نام‬ ‫تعریف‬ ‫بخش‬(‫ی‬ ‫یا‬ ‫اخ‬)
  • 17. ‫حالت‬ ‫دو‬ ‫شامل‬: ۱: ‫ده‬ ‫باقا‬ ‫با‬‫نام‬ ‫مثال‬:Digit [0-9] ‫تعریف‬ ‫بخش‬(‫ی‬ ‫یا‬ ‫اخ‬)
  • 18. ‫حالت‬ ‫دو‬ ‫شامل‬: ۱: ‫ده‬ ‫باقا‬ ‫با‬‫نام‬ ‫مثال‬:Digit [0-9] 2: %}‫زبان‬ ‫ب‬ ‫کد‬%{ C ‫تعریف‬ ‫بخش‬(‫ی‬ ‫یا‬ ‫اخ‬)
  • 19. ‫تعریف‬ ‫بخش‬(‫ی‬ ‫یا‬ ‫اخ‬) ‫حالت‬ ‫دو‬ ‫شامل‬: ۱: ‫ده‬ ‫باقا‬ ‫با‬‫نام‬ ‫مثال‬:Digit [0-9] 2: %}‫زبان‬ ‫ب‬ ‫کد‬%{ C ‫مثال‬:%{ int count; %}
  • 20. ‫د‬ ‫قوا‬ ‫بخش‬(‫ی‬ ‫اجبا‬) ‫بخش‬ ‫ایر‬‫مشخص‬‫لغت‬ ‫یک‬ ‫کشف‬ ‫هنگام‬ ‫کند‬ ‫می‬‫مطابق‬‫از‬ ‫یکهی‬‫به‬‫ا‬ ‫ا‬ ‫چ‬ ‫ده‬ ‫قا‬ ‫با‬‫شود‬ ‫انجام‬ ‫باید‬ ‫ملی‬
  • 21. ‫د‬ ‫قوا‬ ‫بخش‬(‫ی‬ ‫اجبا‬) ‫د‬ ‫قوا‬ ‫ا‬ ‫ساخ‬: }‫ملیا‬{‫نشان‬ ‫الگوی‬(‫ده‬ ‫قا‬ ‫با‬ ‫با‬)
  • 22. ‫د‬ ‫قوا‬ ‫بخش‬(‫ی‬ ‫اجبا‬) ‫د‬ ‫قوا‬ ‫ا‬ ‫ساخ‬: }‫ملیا‬{‫نشان‬ ‫الگوی‬(‫ده‬ ‫قا‬ ‫با‬ ‫با‬) ‫نشان‬ ‫الگوی‬: ‫ی‬ ‫تعا‬ ‫بخش‬ ‫د‬ ‫شده‬ ‫تعریف‬ ‫اسامی‬ ‫از‬ ‫یکی‬ ‫یا‬ ‫و‬ ‫ده‬ ‫قا‬ ‫با‬ ‫با‬‫ف‬
  • 23. ‫د‬ ‫قوا‬ ‫بخش‬(‫ی‬ ‫اجبا‬) ‫د‬ ‫قوا‬ ‫ا‬ ‫ساخ‬: }‫ملیا‬{‫نشان‬ ‫الگوی‬(‫ده‬ ‫قا‬ ‫با‬ ‫با‬) ‫نشان‬ ‫الگوی‬: ‫ی‬ ‫تعا‬ ‫بخش‬ ‫د‬ ‫شده‬ ‫تعریف‬ ‫اسامی‬ ‫از‬ ‫یکی‬ ‫یا‬ ‫و‬ ‫ده‬ ‫قا‬ ‫با‬ ‫با‬‫ف‬ ‫ملیا‬: ‫زبان‬ ‫ب‬ ‫هایی‬ ‫العمل‬ ‫و‬ ‫دس‬c‫ر‬ ‫یهاف‬ ‫هنگهام‬ ‫که‬ ‫دههد‬ ‫مهی‬ ‫نشهان‬ ‫ا‬ ‫شوند‬ ‫اجرا‬ ‫باید‬ ‫نشان‬ ‫الگوی‬ ‫مطابق‬ ‫ها‬ ‫ر‬ ‫اک‬ ‫کا‬ ‫از‬ ‫ای‬ ‫دنبال‬.
  • 24. ‫د‬ ‫قوا‬ ‫بخش‬(‫ی‬ ‫اجبا‬) ‫مثال‬: "if" { printf ( " I found `if` keyword..! n" ) ; } {Digit} { printf ( " I found Digit…1n" ) ; }
  • 25. ‫زبان‬ ‫کد‬ ‫بخش‬C ‫زبان‬ ‫کد‬ ‫توابع‬ ‫و‬ ‫ا‬ ‫و‬ ‫دس‬ ‫شامل‬C‫اسهت‬‫فایهل‬ ‫به‬ ‫کلمه‬ ‫به‬ ‫کلمه‬ ‫که‬ ‫تولید‬ ‫اصلی‬‫اضاف‬ ،‫شده‬‫میشود‬
  • 26. ‫زبان‬ ‫کد‬ ‫بخش‬C ‫زبان‬ ‫کد‬ ‫توابع‬ ‫و‬ ‫ا‬ ‫و‬ ‫دس‬ ‫شامل‬C‫اسهت‬‫فایهل‬ ‫به‬ ‫کلمه‬ ‫به‬ ‫کلمه‬ ‫که‬ ‫تولید‬ ‫اصلی‬‫اضاف‬ ،‫شده‬‫میشود‬ ‫نظر‬ ‫از‬ ‫بخش‬ ‫ایر‬ ‫هرچند‬FLEX‫زبهان‬ ‫ب‬ ‫کامپایل‬ ‫برای‬ ‫اما‬ ،‫است‬ ‫ی‬ ‫یا‬ ‫اخ‬ c‫باشد‬ ‫می‬ ‫ی‬ ‫اجبا‬ ‫بخش‬ ‫ایر‬ ‫کدهای‬ ،‫لغوی‬ ‫تحلیلگر‬ ‫تولید‬ ‫جهت‬
  • 27. ‫زبان‬ ‫کد‬ ‫بخش‬C ‫زبان‬ ‫کد‬ ‫توابع‬ ‫و‬ ‫ا‬ ‫و‬ ‫دس‬ ‫شامل‬C‫اسهت‬‫فایهل‬ ‫به‬ ‫کلمه‬ ‫به‬ ‫کلمه‬ ‫که‬ ‫تولید‬ ‫اصلی‬‫اضاف‬ ،‫شده‬‫میشود‬ ‫نظر‬ ‫از‬ ‫بخش‬ ‫ایر‬ ‫هرچند‬FLEX‫زبهان‬ ‫ب‬ ‫کامپایل‬ ‫برای‬ ‫اما‬ ،‫است‬ ‫ی‬ ‫یا‬ ‫اخ‬ c‫باشد‬ ‫می‬ ‫ی‬ ‫اجبا‬ ‫بخش‬ ‫ایر‬ ‫کدهای‬ ،‫لغوی‬ ‫تحلیلگر‬ ‫تولید‬ ‫جهت‬ ‫تابع‬ ‫لغوی‬ ‫تحلیلگر‬ ‫اجرای‬ ‫جهت‬yylex()‫شود‬ ‫فراخوانی‬ ‫باید‬ ‫بخش‬ ‫ایر‬ ‫د‬
  • 28. ‫زبان‬ ‫کد‬ ‫بخش‬C ‫زبان‬ ‫کد‬ ‫توابع‬ ‫و‬ ‫ا‬ ‫و‬ ‫دس‬ ‫شامل‬C‫اسهت‬‫فایهل‬ ‫به‬ ‫کلمه‬ ‫به‬ ‫کلمه‬ ‫که‬ ‫تولید‬ ‫اصلی‬‫اضاف‬ ،‫شده‬‫میشود‬ ‫نظر‬ ‫از‬ ‫بخش‬ ‫ایر‬ ‫هرچند‬FLEX‫زبهان‬ ‫ب‬ ‫کامپایل‬ ‫برای‬ ‫اما‬ ،‫است‬ ‫ی‬ ‫یا‬ ‫اخ‬ c‫باشد‬ ‫می‬ ‫ی‬ ‫اجبا‬ ‫بخش‬ ‫ایر‬ ‫کدهای‬ ،‫لغوی‬ ‫تحلیلگر‬ ‫تولید‬ ‫جهت‬ ‫تابع‬ ‫لغوی‬ ‫تحلیلگر‬ ‫اجرای‬ ‫جهت‬yylex()‫شود‬ ‫فراخوانی‬ ‫باید‬ ‫بخش‬ ‫ایر‬ ‫د‬ ‫تابع‬yywrap()‫توسهط‬ ،‫سهید‬ ‫فایهل‬ ‫پایهان‬ ‫به‬ ‫تحلیل‬ ‫کا‬ ‫هنگامیک‬Flex ‫شود‬ ‫می‬ ‫فراخوانی‬.‫همیش‬ ‫تابع‬ ‫ایر‬‫مقدا‬۱‫ا‬‫گرداند‬ ‫می‬ ‫بر‬
  • 29. ‫مثال‬: ‫برنام‬‫زبان‬ ‫ب‬ ‫ای‬FLEX‫ا‬ ‫ودی‬ ‫و‬ ‫خطوط‬ ‫و‬ ‫رها‬ ‫اک‬ ‫کا‬ ‫تعداد‬ ‫ک‬ ‫کند‬ ‫چاپ‬ ‫ا‬ ‫یج‬ ‫ن‬ ‫و‬ ‫کرده‬ ‫ش‬ ‫شما‬
  • 30. %{ int nchar , nline ; %} %% [n] { nline++ ; } . { nchar++ ; } %% int main ( void ) { yylex(); printf( "%d %d" , nchar , nline+1); return (0) ; } int yywrap(void) { return 1; }
  • 31. %{ int nchar , nline ; %} %% [n] { nline++ ; } . { nchar++ ; } %% int main ( void ) { yylex(); printf( "%d %d" , nchar , nline+1); return (0) ; } int yywrap(void) { return 1; } ‫تعریف‬ ‫بخش‬ ‫د‬ ‫قوا‬ ‫بخش‬ ‫زبان‬ ‫کد‬ ‫بخش‬ C `.`‫ب‬ ‫ر‬ ‫اک‬ ‫کا‬ ‫هر‬ ‫یعنی‬‫جز‬`n`‫است‬ ‫یج‬ ‫ن‬ ‫چاپ‬
  • 33. ‫ودی‬ ‫و‬: Compiler design Hamid saberi ‫خروجی‬: 27 2
  • 35. Digit [0-9] Lower [a-z] Upper [A-Z] Letter {Lower}|{Upper}|[_] Var {Letter}({Letter}|{Digit})* %% "if" { printf ( " I found `if` keyword n" ) ; } "else" { printf ( " I found `else` keyword n") ; } “then" { printf ( " I found `then` keyword n") ; } {Var} { printf (" I found variable %s n" , yytext) ; } %% int main ( void ) { yylex(); return (0) ; } int yywrap(void) { return 1; }
  • 36. Digit [0-9] Lower [a-z] Upper [A-Z] Letter {Lower}|{Upper}|[_] Var {Letter}({Letter}|{Digit})* %% "if" { printf ( " I found `if` keyword n" ) ; } "else" { printf ( " I found `else` keyword n") ; } “then" { printf ( " I found `then` keyword n") ; } {Var} { printf (" I found variable %s n" , yytext) ; } %% int main ( void ) { yylex(); return (0) ; } int yywrap(void) { return 1; } ‫تعریف‬ ‫بخش‬ ‫د‬ ‫قوا‬ ‫بخش‬ ‫زبان‬ ‫کد‬ ‫بخش‬ C ‫زبان‬ ‫د‬ ‫غییرها‬ ‫م‬ ‫تعریف‬ ‫قوانیر‬C yytext:‫ش‬‫ای‬‫است‬‫یکی‬ ‫با‬ ‫ک‬ ‫است‬ ‫کرده‬ ‫پیدا‬ ‫تطبیق‬ ‫الگوها‬ ‫از‬
  • 37. ‫ودی‬ ‫و‬: if temp_1 then result1 else if temp_2 then result2 else result3
  • 38. ‫ودی‬ ‫و‬: if temp_1 then result1 else if temp_2 then result2 else result3 ‫خروجی‬: I found `if` keyword I found variable temp_1 I found `then` keyword I found variable result1 I found `else` keyword I found `if` keyword I found variable temp_2 I found `then` keyword I found variable result2 I found `else` keyword I found variable result3
  • 39. ‫ب‬ ‫نداش‬ ‫همخوانی‬ ‫الگوها‬ ‫از‬ ‫یک‬ ‫هیچ‬ ‫با‬ ‫شده‬ ‫د‬ ‫وا‬ ‫ر‬ ‫م‬ ‫تیک‬ ‫صو‬ ‫د‬،‫اشد‬ ً‫ا‬‫ین‬ ‫با‬ ‫آن‬‫میشود‬ ‫ده‬ ‫آو‬ ‫خروجی‬ ‫د‬. ‫نک‬ ‫چند‬:
  • 40. ‫ب‬ ‫نداش‬ ‫همخوانی‬ ‫الگوها‬ ‫از‬ ‫یک‬ ‫هیچ‬ ‫با‬ ‫شده‬ ‫د‬ ‫وا‬ ‫ر‬ ‫م‬ ‫تیک‬ ‫صو‬ ‫د‬،‫اشد‬ ً‫ا‬‫ین‬ ‫با‬ ‫آن‬‫میشود‬ ‫ده‬ ‫آو‬ ‫خروجی‬ ‫د‬. ‫مثال‬: ‫نک‬ ‫چند‬: ‫ودی‬ ‫و‬: if temp_1 then 1result ‫خروجی‬: I found `if` keyword I found variable temp_1 I found `then` keyword 1result
  • 41. ‫ب‬ ‫نداش‬ ‫همخوانی‬ ‫الگوها‬ ‫از‬ ‫یک‬ ‫هیچ‬ ‫با‬ ‫شده‬ ‫د‬ ‫وا‬ ‫ر‬ ‫م‬ ‫تیک‬ ‫صو‬ ‫د‬،‫اشد‬ ً‫ا‬‫ین‬ ‫با‬ ‫آن‬‫میشود‬ ‫ده‬ ‫آو‬ ‫خروجی‬ ‫د‬. ‫تعریف‬ ‫مکان‬‫مهم‬ ‫برنام‬ ‫د‬ ‫ده‬ ‫قا‬ ‫با‬ ‫ا‬ ‫با‬‫است‬.‫م‬ ‫لغهوی‬ ‫تحلیلگر‬‫قایسه‬ ‫دنبال‬‫ی‬‫ودی‬ ‫و‬‫به‬ ‫هده‬ ‫قا‬ ‫بها‬ ‫ا‬ ‫با‬ ‫با‬ ‫ا‬‫ترتیه‬‫از‬‫به‬ ‫بها‬‫پهاییر‬‫ا‬‫نجهام‬ ‫می‬‫دههد‬.‫هده‬ ‫قا‬ ‫بها‬ ‫ا‬ ‫بها‬ ‫کلیهدی‬ ‫کلمها‬ ‫بنهابرایر‬)‫ماننهد‬(if‫بایهد‬‫از‬ ‫قبهل‬ ‫شناس‬‫ها‬‫د‬ ‫باشند‬‫اینصهو‬ ‫غیهر‬‫تمهام‬‫شناسه‬ ‫کلیهدی‬ ‫کلمها‬‫ن‬ ‫د‬‫ظهر‬ ‫شوند‬ ‫می‬ ‫گرف‬. ‫نک‬ ‫چند‬:
  • 42. Digit [0-9] Lower [a-z] Upper [A-Z] Letter {Lower}|{Upper}|[_] Var {Letter}({Letter}|{Digit})* %% "if" { printf ( " I found `if` keyword n" ) ; } "else" { printf ( " I found `else` keyword n") ; } “then" { printf ( " I found `then` keyword n") ; } {Var} { printf (" I found variable %s n" , yytext) ; } %% int main ( void ) { yylex(); return (0) ; } int yywrap(void) { return 1; } ‫تعریف‬ ‫بخش‬ ‫د‬ ‫قوا‬ ‫بخش‬ ‫زبان‬ ‫کد‬ ‫بخش‬ C ‫ده‬ ‫آو‬ ‫الگوها‬ ‫آخر‬ ‫خط‬ ‫د‬ ‫باید‬ ‫شود‬!...
  • 45. ‫اجرای‬FLEX ‫فایل‬flex.exe‫ب‬ ‫ک‬ ‫نی‬ ‫م‬ ‫فایل‬ ‫و‬‫زبان‬FLEX‫و‬ ‫ایم‬ ‫نوش‬‫آن‬ ‫پسوند‬ `.l`‫است‬‫د‬ ‫ا‬‫مشهخص‬ ‫مسهیر‬ ‫یک‬)‫ماننهد‬(d:‫مهی‬ ‫قهرا‬‫خهط‬ ‫د‬ ‫و‬ ‫دههیم‬ ‫ویندوز‬ ‫فرمان‬(command prompt)‫ب‬‫وش‬‫مل‬ ‫زیر‬‫می‬‫کنیم‬: D:flex ‫مبدا‬ ‫فایل‬ ‫نام‬
  • 46. ‫اجرای‬FLEX ‫فایل‬flex.exe‫ب‬ ‫ک‬ ‫نی‬ ‫م‬ ‫فایل‬ ‫و‬‫زبان‬FLEX‫و‬ ‫ایم‬ ‫نوش‬‫آن‬ ‫پسوند‬ `.l`‫است‬‫د‬ ‫ا‬‫مشهخص‬ ‫مسهیر‬ ‫یک‬)‫ماننهد‬(d:‫مهی‬ ‫قهرا‬‫خهط‬ ‫د‬ ‫و‬ ‫دههیم‬ ‫ویندوز‬ ‫فرمان‬(command prompt)‫ب‬‫وش‬‫مل‬ ‫زیر‬‫می‬‫کنیم‬: D:flex ‫مبدا‬ ‫فایل‬ ‫نام‬ ‫مثال‬: D:flex input.l
  • 47. ‫لغوی‬ ‫تحلیلگر‬ ‫اجرایی‬ ‫فایل‬ ‫تولید‬ ‫نام‬ ‫با‬ ‫فایل‬ ‫یک‬ ،‫قبل‬ ‫مرحل‬ ‫خروجی‬lex.yy.c‫باشد‬ ‫می‬
  • 48. ‫لغوی‬ ‫تحلیلگر‬ ‫اجرایی‬ ‫فایل‬ ‫تولید‬ ‫نام‬ ‫با‬ ‫فایل‬ ‫یک‬ ،‫قبل‬ ‫مرحل‬ ‫خروجی‬lex.yy.c‫باشد‬ ‫می‬ ‫کامپهایلر‬ ‫توسهط‬ ‫فایهل‬ ‫ایهر‬ ‫بایهد‬ ،‫لغوی‬ ‫تحلیلگر‬ ‫تولید‬ ‫برای‬C‫و‬ ‫کامپایهل‬ ، ‫اجرایی‬ ‫فایل‬(.exe)‫شود‬ ‫ایجاد‬ ‫تحلیلگر‬
  • 49. ‫لغوی‬ ‫تحلیلگر‬ ‫اجرایی‬ ‫فایل‬ ‫تولید‬ ‫نام‬ ‫با‬ ‫فایل‬ ‫یک‬ ،‫قبل‬ ‫مرحل‬ ‫خروجی‬lex.yy.c‫باشد‬ ‫می‬ ‫کامپهایلر‬ ‫توسهط‬ ‫فایهل‬ ‫ایهر‬ ‫بایهد‬ ،‫لغوی‬ ‫تحلیلگر‬ ‫تولید‬ ‫برای‬C‫و‬ ‫کامپایهل‬ ، ‫اجرایی‬ ‫فایل‬(.exe)‫شود‬ ‫ایجاد‬ ‫تحلیلگر‬ ‫اه‬ ‫دو‬: ‫کامپایلرهای‬ ‫توسط‬c‫مانند‬Borland c
  • 50. ‫لغوی‬ ‫تحلیلگر‬ ‫اجرایی‬ ‫فایل‬ ‫تولید‬ ‫نام‬ ‫با‬ ‫فایل‬ ‫یک‬ ،‫قبل‬ ‫مرحل‬ ‫خروجی‬lex.yy.c‫باشد‬ ‫می‬ ‫کامپهایلر‬ ‫توسهط‬ ‫فایهل‬ ‫ایهر‬ ‫بایهد‬ ،‫لغوی‬ ‫تحلیلگر‬ ‫تولید‬ ‫برای‬C‫و‬ ‫کامپایهل‬ ، ‫اجرایی‬ ‫فایل‬(.exe)‫شود‬ ‫ایجاد‬ ‫تحلیلگر‬ ‫اه‬ ‫دو‬: ‫کامپایلرهای‬ ‫توسط‬c‫مانند‬Borland c ‫توسط‬gcc‫زیر‬ ‫و‬ ‫دس‬ ‫و‬: gcc lex.yy.c -o output.exe
  • 51. ‫لغوی‬ ‫تحلیلگر‬ ‫اجرای‬ ‫ویندوز‬ ‫فرمان‬ ‫خط‬ ‫د‬ ‫اجرایی‬ ‫فایل‬ ‫فراخوانی‬(command prompt)
  • 52. ‫لغوی‬ ‫تحلیلگر‬ ‫اجرای‬ ‫ویندوز‬ ‫فرمان‬ ‫خط‬ ‫د‬ ‫اجرایی‬ ‫فایل‬ ‫فراخوانی‬(command prompt) ‫تحلیلگر‬ ‫ودی‬ ‫و‬ ‫کردن‬ ‫د‬ ‫وا‬:
  • 53. ‫لغوی‬ ‫تحلیلگر‬ ‫اجرای‬ ‫ویندوز‬ ‫فرمان‬ ‫خط‬ ‫د‬ ‫اجرایی‬ ‫فایل‬ ‫فراخوانی‬(command prompt) ‫تحلیلگر‬ ‫ودی‬ ‫و‬ ‫کردن‬ ‫د‬ ‫وا‬: ‫وش‬ ‫دو‬: ‫ویندوز‬ ‫فرمان‬ ‫خط‬ ‫تریق‬ ‫از‬ ‫و‬ ‫قیم‬ ‫مس‬ ‫ودی‬ ‫و‬(command prompt)
  • 54. ‫لغوی‬ ‫تحلیلگر‬ ‫اجرای‬ ‫ویندوز‬ ‫فرمان‬ ‫خط‬ ‫د‬ ‫اجرایی‬ ‫فایل‬ ‫فراخوانی‬(command prompt) ‫تحلیلگر‬ ‫ودی‬ ‫و‬ ‫کردن‬ ‫د‬ ‫وا‬: ‫وش‬ ‫دو‬: ‫ویندوز‬ ‫فرمان‬ ‫خط‬ ‫تریق‬ ‫از‬ ‫و‬ ‫قیم‬ ‫مس‬ ‫ودی‬ ‫و‬(command prompt) ‫فایل‬ ‫تریق‬ ‫از‬ ‫ودی‬ ‫و‬ sample.exe <input.txt >output.txt
  • 55. ‫منابع‬:  Wikipedia  Stackoverflow.com  barnamenevis.org ‫از‬ ‫فراوان‬ ‫تشکر‬ ‫با‬: ‫فهیمی‬ ‫ضا‬ ،‫ظیمی‬ ‫اتف‬ ،‫شاکری‬ ‫مصطفی‬ ‫گوگل‬ ‫جوی‬ ‫جس‬ ‫موتو‬ ‫و‬!....