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

Post on 20-Jul-2015

443 Views

Category:

Education

34 Downloads

Preview:

Click to see full reader

TRANSCRIPT

ایجاد تحلیلگر لغوی با نرم افزار 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…1\n" ) ; }

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

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

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

....با تشکر

top related