Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
‫افزار‬ ‫نرم‬ ‫با‬ ‫لغوی‬ ‫تحلیلگر‬ ‫ایجاد‬
FLEX
‫صابری‬ ‫حمید‬
‫دیماه‬93
h.saberi@yahoo.com
Flex‫مخفف‬Fast Lexical Analyzer
FLEX‫چیست‬....‫؟‬
Flex‫مخفف‬Fast Lexical Analyzer
‫ها‬ ‫ات‬ ‫اسهاال‬ ‫بهر‬ ‫ا‬ ‫ر‬ ‫مه‬ ‫که‬ ‫است‬ ‫لغوی‬ ‫تحلیلگر‬ ‫تولیدکننده‬ ‫یک‬‫داده...
Flex‫مخفف‬Fast Lexical Analyzer
‫ها‬ ‫ات‬ ‫اسهاال‬ ‫بهر‬ ‫ا‬ ‫ر‬ ‫مه‬ ‫که‬ ‫است‬ ‫لغوی‬ ‫تحلیلگر‬ ‫تولیدکننده‬ ‫یک‬‫داده...
‫مرا‬‫توسط‬ ‫لغوی‬ ‫تحلیلگر‬ ‫تولید‬ ‫حل‬
FLEX
‫مرا‬‫توسط‬ ‫لغوی‬ ‫تحلیلگر‬ ‫تولید‬ ‫حل‬
FLEX
‫مشخص‬ ‫فایل‬ ‫ایجاد‬
)‫زبان‬ ‫ب‬ ‫برنام‬(FLEX
‫مرا‬‫توسط‬ ‫لغوی‬ ‫تحلیلگر‬ ‫تولید‬ ‫حل‬
FLEX
‫مشخص‬ ‫فایل‬ ‫ایجاد‬
)‫زبان‬ ‫ب‬ ‫برنام‬(FLEX
‫توسط‬ ‫کامپایل‬FLEX
‫مرا‬‫توسط‬ ‫لغوی‬ ‫تحلیلگر‬ ‫تولید‬ ‫حل‬
FLEX
‫مشخص‬ ‫فایل‬ ‫ایجاد‬
)‫زبان‬ ‫ب‬ ‫برنام‬(FLEX
‫توسط‬ ‫کامپایل‬FLEX
‫فایل‬ ...
‫مرا‬‫توسط‬ ‫لغوی‬ ‫تحلیلگر‬ ‫تولید‬ ‫حل‬
FLEX
‫مشخص‬ ‫فایل‬ ‫ایجاد‬
)‫زبان‬ ‫ب‬ ‫برنام‬(FLEX
‫توسط‬ ‫کامپایل‬FLEX
‫فایل‬ ...
‫مرا‬‫توسط‬ ‫لغوی‬ ‫تحلیلگر‬ ‫تولید‬ ‫حل‬
FLEX
‫مشخص‬ ‫فایل‬ ‫ایجاد‬
)‫زبان‬ ‫ب‬ ‫برنام‬(FLEX
‫توسط‬ ‫کامپایل‬FLEX
‫فایل‬ ...
‫مشخص‬ ‫فایل‬...‫؟‬
‫برای‬ ‫نی‬ ‫م‬ ‫ودی‬ ‫و‬ ‫فایل‬ ‫یک‬Flex
‫مشخص‬ ‫فایل‬...‫؟‬
‫برای‬ ‫نی‬ ‫م‬ ‫ودی‬ ‫و‬ ‫فایل‬ ‫یک‬Flex
‫کد‬ ‫تعدادی‬ ‫همراه‬ ‫ب‬ ‫بر‬ ‫کا‬ ‫نظر‬ ‫د‬ ‫مو‬ ‫الگوها...
‫مشخص‬ ‫فایل‬ ‫ا‬ ‫ساخ‬
‫تعریف‬ ‫بخش‬
%%
‫د‬ ‫قوا‬ ‫بخش‬
%%
‫زبان‬ ‫کد‬ ‫بخش‬C
‫حالت‬ ‫دو‬ ‫شامل‬:
‫تعریف‬ ‫بخش‬(‫ی‬ ‫یا‬ ‫اخ‬)
‫حالت‬ ‫دو‬ ‫شامل‬:
۱:
‫ده‬ ‫باقا‬ ‫با‬‫نام‬
‫تعریف‬ ‫بخش‬(‫ی‬ ‫یا‬ ‫اخ‬)
‫حالت‬ ‫دو‬ ‫شامل‬:
۱:
‫ده‬ ‫باقا‬ ‫با‬‫نام‬
‫مثال‬:Digit [0-9]
‫تعریف‬ ‫بخش‬(‫ی‬ ‫یا‬ ‫اخ‬)
‫حالت‬ ‫دو‬ ‫شامل‬:
۱:
‫ده‬ ‫باقا‬ ‫با‬‫نام‬
‫مثال‬:Digit [0-9]
2:
%}‫زبان‬ ‫ب‬ ‫کد‬%{ C
‫تعریف‬ ‫بخش‬(‫ی‬ ‫یا‬ ‫اخ‬)
‫تعریف‬ ‫بخش‬(‫ی‬ ‫یا‬ ‫اخ‬)
‫حالت‬ ‫دو‬ ‫شامل‬:
۱:
‫ده‬ ‫باقا‬ ‫با‬‫نام‬
‫مثال‬:Digit [0-9]
2:
%}‫زبان‬ ‫ب‬ ‫کد‬%{ ...
‫د‬ ‫قوا‬ ‫بخش‬(‫ی‬ ‫اجبا‬)
‫بخش‬ ‫ایر‬‫مشخص‬‫لغت‬ ‫یک‬ ‫کشف‬ ‫هنگام‬ ‫کند‬ ‫می‬‫مطابق‬‫از‬ ‫یکهی‬‫به‬‫ا‬ ‫ا‬
‫چ‬ ‫ده‬ ‫ق...
‫د‬ ‫قوا‬ ‫بخش‬(‫ی‬ ‫اجبا‬)
‫د‬ ‫قوا‬ ‫ا‬ ‫ساخ‬:
}‫ملیا‬{‫نشان‬ ‫الگوی‬(‫ده‬ ‫قا‬ ‫با‬ ‫با‬)
‫د‬ ‫قوا‬ ‫بخش‬(‫ی‬ ‫اجبا‬)
‫د‬ ‫قوا‬ ‫ا‬ ‫ساخ‬:
}‫ملیا‬{‫نشان‬ ‫الگوی‬(‫ده‬ ‫قا‬ ‫با‬ ‫با‬)
‫نشان‬ ‫الگوی‬:
‫ی‬ ‫تعا‬...
‫د‬ ‫قوا‬ ‫بخش‬(‫ی‬ ‫اجبا‬)
‫د‬ ‫قوا‬ ‫ا‬ ‫ساخ‬:
}‫ملیا‬{‫نشان‬ ‫الگوی‬(‫ده‬ ‫قا‬ ‫با‬ ‫با‬)
‫نشان‬ ‫الگوی‬:
‫ی‬ ‫تعا‬...
‫د‬ ‫قوا‬ ‫بخش‬(‫ی‬ ‫اجبا‬)
‫مثال‬:
"if" { printf ( " I found `if` keyword..! n" ) ; }
{Digit} { printf ( " I found Dig...
‫زبان‬ ‫کد‬ ‫بخش‬C
‫زبان‬ ‫کد‬ ‫توابع‬ ‫و‬ ‫ا‬ ‫و‬ ‫دس‬ ‫شامل‬C‫اسهت‬‫فایهل‬ ‫به‬ ‫کلمه‬ ‫به‬ ‫کلمه‬ ‫که‬
‫تولید‬ ‫اصلی‬‫...
‫زبان‬ ‫کد‬ ‫بخش‬C
‫زبان‬ ‫کد‬ ‫توابع‬ ‫و‬ ‫ا‬ ‫و‬ ‫دس‬ ‫شامل‬C‫اسهت‬‫فایهل‬ ‫به‬ ‫کلمه‬ ‫به‬ ‫کلمه‬ ‫که‬
‫تولید‬ ‫اصلی‬‫...
‫زبان‬ ‫کد‬ ‫بخش‬C
‫زبان‬ ‫کد‬ ‫توابع‬ ‫و‬ ‫ا‬ ‫و‬ ‫دس‬ ‫شامل‬C‫اسهت‬‫فایهل‬ ‫به‬ ‫کلمه‬ ‫به‬ ‫کلمه‬ ‫که‬
‫تولید‬ ‫اصلی‬‫...
‫زبان‬ ‫کد‬ ‫بخش‬C
‫زبان‬ ‫کد‬ ‫توابع‬ ‫و‬ ‫ا‬ ‫و‬ ‫دس‬ ‫شامل‬C‫اسهت‬‫فایهل‬ ‫به‬ ‫کلمه‬ ‫به‬ ‫کلمه‬ ‫که‬
‫تولید‬ ‫اصلی‬‫...
‫مثال‬:
‫برنام‬‫زبان‬ ‫ب‬ ‫ای‬FLEX‫ا‬ ‫ودی‬ ‫و‬ ‫خطوط‬ ‫و‬ ‫رها‬ ‫اک‬ ‫کا‬ ‫تعداد‬ ‫ک‬
‫کند‬ ‫چاپ‬ ‫ا‬ ‫یج‬ ‫ن‬ ‫و‬ ‫کرده‬...
%{
int nchar , nline ;
%}
%%
[n] { nline++ ; }
. { nchar++ ; }
%%
int main ( void )
{ yylex();
printf( "%d %d" , nchar , n...
%{
int nchar , nline ;
%}
%%
[n] { nline++ ; }
. { nchar++ ; }
%%
int main ( void )
{ yylex();
printf( "%d %d" , nchar , 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 foun...
Digit [0-9]
Lower [a-z]
Upper [A-Z]
Letter {Lower}|{Upper}|[_]
Var {Letter}({Letter}|{Digit})*
%%
"if" { printf ( " I foun...
‫ودی‬ ‫و‬:
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 ...
‫ب‬ ‫نداش‬ ‫همخوانی‬ ‫الگوها‬ ‫از‬ ‫یک‬ ‫هیچ‬ ‫با‬ ‫شده‬ ‫د‬ ‫وا‬ ‫ر‬ ‫م‬ ‫تیک‬ ‫صو‬ ‫د‬،‫اشد‬
ً‫ا‬‫ین‬ ‫با‬ ‫آن‬‫میشود‬ ...
‫ب‬ ‫نداش‬ ‫همخوانی‬ ‫الگوها‬ ‫از‬ ‫یک‬ ‫هیچ‬ ‫با‬ ‫شده‬ ‫د‬ ‫وا‬ ‫ر‬ ‫م‬ ‫تیک‬ ‫صو‬ ‫د‬،‫اشد‬
ً‫ا‬‫ین‬ ‫با‬ ‫آن‬‫میشود‬ ...
‫ب‬ ‫نداش‬ ‫همخوانی‬ ‫الگوها‬ ‫از‬ ‫یک‬ ‫هیچ‬ ‫با‬ ‫شده‬ ‫د‬ ‫وا‬ ‫ر‬ ‫م‬ ‫تیک‬ ‫صو‬ ‫د‬،‫اشد‬
ً‫ا‬‫ین‬ ‫با‬ ‫آن‬‫میشود‬ ...
Digit [0-9]
Lower [a-z]
Upper [A-Z]
Letter {Lower}|{Upper}|[_]
Var {Letter}({Letter}|{Digit})*
%%
"if" { printf ( " I foun...
‫اجرای‬FLEX‫ویندوز‬ ‫امل‬ ‫م‬ ‫سیس‬ ‫وی‬ ‫بر‬
‫افزا‬ ‫نرم‬ ‫دانلود‬FLEX
http://gnuwin32.sourceforge.net/packages/flex.htm
‫اجرای‬FLEX
‫فایل‬flex.exe‫ب‬ ‫ک‬ ‫نی‬ ‫م‬ ‫فایل‬ ‫و‬‫زبان‬FLEX‫و‬ ‫ایم‬ ‫نوش‬‫آن‬ ‫پسوند‬
`.l`‫است‬‫د‬ ‫ا‬‫مشهخص‬ ‫مسهیر...
‫اجرای‬FLEX
‫فایل‬flex.exe‫ب‬ ‫ک‬ ‫نی‬ ‫م‬ ‫فایل‬ ‫و‬‫زبان‬FLEX‫و‬ ‫ایم‬ ‫نوش‬‫آن‬ ‫پسوند‬
`.l`‫است‬‫د‬ ‫ا‬‫مشهخص‬ ‫مسهیر...
‫لغوی‬ ‫تحلیلگر‬ ‫اجرایی‬ ‫فایل‬ ‫تولید‬
‫نام‬ ‫با‬ ‫فایل‬ ‫یک‬ ،‫قبل‬ ‫مرحل‬ ‫خروجی‬lex.yy.c‫باشد‬ ‫می‬
‫لغوی‬ ‫تحلیلگر‬ ‫اجرایی‬ ‫فایل‬ ‫تولید‬
‫نام‬ ‫با‬ ‫فایل‬ ‫یک‬ ،‫قبل‬ ‫مرحل‬ ‫خروجی‬lex.yy.c‫باشد‬ ‫می‬
‫کامپهایلر‬ ‫تو...
‫لغوی‬ ‫تحلیلگر‬ ‫اجرایی‬ ‫فایل‬ ‫تولید‬
‫نام‬ ‫با‬ ‫فایل‬ ‫یک‬ ،‫قبل‬ ‫مرحل‬ ‫خروجی‬lex.yy.c‫باشد‬ ‫می‬
‫کامپهایلر‬ ‫تو...
‫لغوی‬ ‫تحلیلگر‬ ‫اجرایی‬ ‫فایل‬ ‫تولید‬
‫نام‬ ‫با‬ ‫فایل‬ ‫یک‬ ،‫قبل‬ ‫مرحل‬ ‫خروجی‬lex.yy.c‫باشد‬ ‫می‬
‫کامپهایلر‬ ‫تو...
‫لغوی‬ ‫تحلیلگر‬ ‫اجرای‬
‫ویندوز‬ ‫فرمان‬ ‫خط‬ ‫د‬ ‫اجرایی‬ ‫فایل‬ ‫فراخوانی‬(command prompt)
‫لغوی‬ ‫تحلیلگر‬ ‫اجرای‬
‫ویندوز‬ ‫فرمان‬ ‫خط‬ ‫د‬ ‫اجرایی‬ ‫فایل‬ ‫فراخوانی‬(command prompt)
‫تحلیلگر‬ ‫ودی‬ ‫و‬ ‫کردن‬...
‫لغوی‬ ‫تحلیلگر‬ ‫اجرای‬
‫ویندوز‬ ‫فرمان‬ ‫خط‬ ‫د‬ ‫اجرایی‬ ‫فایل‬ ‫فراخوانی‬(command prompt)
‫تحلیلگر‬ ‫ودی‬ ‫و‬ ‫کردن‬...
‫لغوی‬ ‫تحلیلگر‬ ‫اجرای‬
‫ویندوز‬ ‫فرمان‬ ‫خط‬ ‫د‬ ‫اجرایی‬ ‫فایل‬ ‫فراخوانی‬(command prompt)
‫تحلیلگر‬ ‫ودی‬ ‫و‬ ‫کردن‬...
‫منابع‬:
 Wikipedia
 Stackoverflow.com
 barnamenevis.org
‫از‬ ‫فراوان‬ ‫تشکر‬ ‫با‬:
‫فهیمی‬ ‫ضا‬ ،‫ظیمی‬ ‫اتف‬ ،‫شاکری...
‫تشکر‬ ‫با‬....
FLEX تخصصی : ایجاد تحلیلگر لغوی در ویندوز با استفاده از
Upcoming SlideShare
Loading in …5
×

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

2,270 views

Published on

FLEX مروری کوتاه و سریع بر مقدمات چگونگی ایجاد تحلیلگر لغوی در سیستم عامل ویندوز با استفاده از ابزار

Published in: Education

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

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

×