56

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

Embed Size (px)

Citation preview

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

ایجاد تحلیلگر لغوی با نرم افزار FLEX

حمید صابری93دیماه

[email protected]

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

Flex مخففFast Lexical Analyzer

FLEX؟....چیست

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

Flex مخففFast Lexical Analyzer

داده یک تولیدکننده تحلیلگر لغوی است که مه ر ا بهر اسهاال ات هاشده د فایل مشخص تحلیل می کنند

FLEX؟....چیست

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

Flex مخففFast Lexical Analyzer

داده یک تولیدکننده تحلیلگر لغوی است که مه ر ا بهر اسهاال ات هاشده د فایل مشخص تحلیل می کنند

و ب زبان ۱9۸۷نوش شده توسط و ن پاکسون د سالC

برایDOSو ویندوز

FLEX؟....چیست

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

حل تولید تحلیلگر لغوی توسطمراFLEX

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

حل تولید تحلیلگر لغوی توسطمراFLEX

ایجاد فایل مشخص FLEX)برنام ب زبان (

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

حل تولید تحلیلگر لغوی توسطمراFLEX

ایجاد فایل مشخص FLEX)برنام ب زبان (

FLEXکامپایل توسط

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

حل تولید تحلیلگر لغوی توسطمراFLEX

ایجاد فایل مشخص FLEX)برنام ب زبان (

FLEXکامپایل توسط lex.yy.cایجاد فایل

C)برنام ب زبان (

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

حل تولید تحلیلگر لغوی توسطمراFLEX

ایجاد فایل مشخص FLEX)برنام ب زبان (

FLEXکامپایل توسط lex.yy.cایجاد فایل

C)برنام ب زبان (

Cکامپایل توسط

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

حل تولید تحلیلگر لغوی توسطمراFLEX

ایجاد فایل مشخص FLEX)برنام ب زبان (

FLEXکامپایل توسط lex.yy.cایجاد فایل

C)برنام ب زبان (

تحلیلگر لغویCکامپایل توسط

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

؟...فایل مشخص

یک فایل و ودی م نی برایFlex

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

؟...فایل مشخص

یک فایل و ودی م نی برایFlex

شامل الگوهای مو د نظر کا بر ب همراه تعدادی کدC الگوبرای هر

دا ای پسوند`.l`

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

ساخ ا فایل مشخص

بخش تعریف

%%

بخش قوا د

%%

Cبخش کد زبان

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

شامل دو حالت:

(اخ یا ی)بخش تعریف

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

شامل دو حالت:۱:

نام با باقا ده

(اخ یا ی)بخش تعریف

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

شامل دو حالت:۱:

نام با باقا ده

مثال:Digit [0-9]

(اخ یا ی)بخش تعریف

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

شامل دو حالت:۱:

نام با باقا ده

مثال:Digit [0-9]

2:

%} کد ب زبان%{ C

(اخ یا ی)بخش تعریف

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

(اخ یا ی)بخش تعریف

شامل دو حالت:۱:

نام با باقا ده

مثال:Digit [0-9]

2:

%} کد ب زبان%{ C

مثال :%{ int count; %}

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

(اجبا ی)بخش قوا د

ا ا بهیکهی از مطابق می کند هنگام کشف یک لغت مشخص ایر بخش ملی باید انجام شودبا قا ده چ

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

(اجبا ی)بخش قوا د

ساخ ا قوا د:

} ( با با قا ده)الگوی نشان } ملیا

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

(اجبا ی)بخش قوا د

ساخ ا قوا د:

} ( با با قا ده)الگوی نشان } ملیا الگوی نشان:

ف با با قا ده و یا یکی از اسامی تعریف شده د بخش تعا ی

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

(اجبا ی)بخش قوا د

ساخ ا قوا د:

} ( با با قا ده)الگوی نشان } ملیا الگوی نشان:

ف با با قا ده و یا یکی از اسامی تعریف شده د بخش تعا ی

ملیا :

دس و العمل هایی ب زبانc ا نشهان مهی دههد که هنگهام یهاف ر .دنبال ای از کا اک ر ها مطابق الگوی نشان باید اجرا شوند

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

(اجبا ی)بخش قوا د

مثال:

"if" { printf ( " I found `if` keyword..! \n" ) ; }

{Digit} { printf ( " I found Digit…1\n" ) ; }

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

Cبخش کد زبان

شامل دس و ا و توابع کد زبانC که کلمه به کلمه به فایهل اسهتمیشودشده، اضاف اصلی تولید

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

Cبخش کد زبان

شامل دس و ا و توابع کد زبانC که کلمه به کلمه به فایهل اسهتمیشودشده، اضاف اصلی تولید

هرچند ایر بخش از نظرFLEXاخ یا ی است، اما برای کامپایل ب زبهانcجهت تولید تحلیلگر لغوی، کدهای ایر بخش اجبا ی می باشد

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

Cبخش کد زبان

شامل دس و ا و توابع کد زبانC که کلمه به کلمه به فایهل اسهتمیشودشده، اضاف اصلی تولید

هرچند ایر بخش از نظرFLEXاخ یا ی است، اما برای کامپایل ب زبهانcجهت تولید تحلیلگر لغوی، کدهای ایر بخش اجبا ی می باشد جهت اجرای تحلیلگر لغوی تابعyylex()د ایر بخش باید فراخوانی شود

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

Cبخش کد زبان

شامل دس و ا و توابع کد زبانC که کلمه به کلمه به فایهل اسهتمیشودشده، اضاف اصلی تولید

هرچند ایر بخش از نظرFLEXاخ یا ی است، اما برای کامپایل ب زبهانcجهت تولید تحلیلگر لغوی، کدهای ایر بخش اجبا ی می باشد جهت اجرای تحلیلگر لغوی تابعyylex()د ایر بخش باید فراخوانی شود

تابعyywrap()هنگامیک کا تحلیل به پایهان فایهل سهید، توسهطFlex

بر می گرداند ا ۱مقدا ایر تابع همیش . فراخوانی می شود

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

:مثال ک تعداد کا اک رها و خطوط و ودی ا FLEXای ب زبان برنام

شما ش کرده و ن یج ا چاپ کند

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

%{

int nchar , nline ;

%}

%%

[\n] { nline++ ; }

. { nchar++ ; }

%%

int main ( void )

{ yylex();

printf( "%d %d" , nchar , nline+1);

return (0) ; }

int yywrap(void)

{ return 1; }

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

%{

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\`جز یعنی هر کا اک ر ب `.`

چاپ ن یج

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

:و ودی

Compiler design

Hamid saberi

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

:و ودی

Compiler design

Hamid saberi

:خروجی

27 2

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

:مثال جهت تشخیص با شرتی FLEXای ب زبان برنام

if….else

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

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; }

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

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 : ک با یکیاست ای شاز الگوها تطبیق پیدا کرده است

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

:و ودی

if temp_1 then result1 else if temp_2 then result2 else result3

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

:و ودی

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

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

اشد، د صو تیک م ر وا د شده با هیچ یک از الگوها همخوانی نداش ب.د خروجی آو ده میشودآن با یناً

:چند نک

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

اشد، د صو تیک م ر وا د شده با هیچ یک از الگوها همخوانی نداش ب.د خروجی آو ده میشودآن با یناً

مثال:

:چند نک

:و ودی

if temp_1 then 1result

:خروجی

I found `if` keyword

I found variable temp_1

I found `then` keyword

1result

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

اشد، د صو تیک م ر وا د شده با هیچ یک از الگوها همخوانی نداش ب.د خروجی آو ده میشودآن با یناً

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

قبهل از بایهد if)ماننهد (بنهابرایر کلمها کلیهدی بها ا بها قا هده. دههدمی ظهر د نکلمها کلیهدی شناسه تمهام غیهر اینصهو باشند د ها شناس

.گرف می شوند

:چند نک

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

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

باید د خط آخر الگوها آو ده ...!شود

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

بر وی سیس م امل ویندوزFLEXاجرای

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

FLEXدانلود نرم افزا

http://gnuwin32.sourceforge.net/packages/flex.htm

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

FLEXاجرای

فایلflex.exe زبان و فایل م نی ک بFLEX پسوند آن نوش ایم و`.l` ماننهد (یک مسهیر مشهخص ا د است(d:\ دههیم و د خهط قهرا مهی

:کنیممی زیر مل وش ب (command prompt)فرمان ویندوز

D:\flex نام فایل مبدا

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

FLEXاجرای

فایلflex.exe زبان و فایل م نی ک بFLEX پسوند آن نوش ایم و`.l` ماننهد (یک مسهیر مشهخص ا د است(d:\ دههیم و د خهط قهرا مهی

:کنیممی زیر مل وش ب (command prompt)فرمان ویندوز

D:\flex نام فایل مبدا مثال:

D:\flex input.l

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

تولید فایل اجرایی تحلیلگر لغوی

خروجی مرحل قبل، یک فایل با نامlex.yy.cمی باشد

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

تولید فایل اجرایی تحلیلگر لغوی

خروجی مرحل قبل، یک فایل با نامlex.yy.cمی باشد

برای تولید تحلیلگر لغوی، بایهد ایهر فایهل توسهط کامپهایلرC کامپایهل و ،تحلیلگر ایجاد شود(exe.)فایل اجرایی

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

تولید فایل اجرایی تحلیلگر لغوی

خروجی مرحل قبل، یک فایل با نامlex.yy.cمی باشد

برای تولید تحلیلگر لغوی، بایهد ایهر فایهل توسهط کامپهایلرC کامپایهل و ،تحلیلگر ایجاد شود(exe.)فایل اجرایی

دو اه:

توسط کامپایلرهایc مانندBorland c

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

تولید فایل اجرایی تحلیلگر لغوی

خروجی مرحل قبل، یک فایل با نامlex.yy.cمی باشد

برای تولید تحلیلگر لغوی، بایهد ایهر فایهل توسهط کامپهایلرC کامپایهل و ،تحلیلگر ایجاد شود(exe.)فایل اجرایی

دو اه:

توسط کامپایلرهایc مانندBorland c

توسطgcc و دس و زیر:

gcc lex.yy.c -o output.exe

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

اجرای تحلیلگر لغوی

فراخوانی فایل اجرایی د خط فرمان ویندوز(command prompt)

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

اجرای تحلیلگر لغوی

فراخوانی فایل اجرایی د خط فرمان ویندوز(command prompt)

وا د کردن و ودی تحلیلگر:

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

اجرای تحلیلگر لغوی

فراخوانی فایل اجرایی د خط فرمان ویندوز(command prompt)

وا د کردن و ودی تحلیلگر:دو وش:

و ودی مس قیم و از تریق خط فرمان ویندوز(command prompt)

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

اجرای تحلیلگر لغوی

فراخوانی فایل اجرایی د خط فرمان ویندوز(command prompt)

وا د کردن و ودی تحلیلگر:دو وش:

و ودی مس قیم و از تریق خط فرمان ویندوز(command prompt)

و ودی از تریق فایل

sample.exe <input.txt >output.txt

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

:منابع

Wikipedia

Stackoverflow.com

barnamenevis.org

با تشکر فراوان از:مصطفی شاکری، اتف ظیمی، ضا فهیمی

....!و موتو جس جوی گوگل

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

....با تشکر