نمایش نتایج 1 تا 24 از 24

نام تاپیک: برنامه های lex و yacc چیستند و چگونه می توان با آن کار کرد

  1. #1

    برنامه های lex و yacc چیستند و چگونه می توان با آن کار کرد

    بسمه تعالی
    با سلام
    من باید اسکنر پاسکال رو با lexبنویسم
    می شه یک توضیح در باره lexبدهید و آیا تحت ویندوز وهم هست
    در سایت هر چه گشتم موردی که کمکم کنه نبود
    لطفا دوستانی که اطلاع دارند توضیح بدهند
    با تشکر

  2. #2

    Wink

    برنامه lex یک مولد خودکار lexical analyser هستش که تحت خانواده یونیکس کار میکنه ولی واریانت های مختلفی تحت ویندوز هم داره!
    به این لینک ها یک نگاهی بندازید:
    http://www.bumblebeesoftware.com/
    http://www.scl.com/products/mks/datasheets/ly.html

  3. #3
    بسمه تعالی
    با سلام
    خیلی ممنون
    می شه درباره نحوه کار این برنامه توضیح بدید
    با تشکر

  4. #4

    Arrow

    این برنامه در حقیقت یک ابزار کمکی برای برنامه نویسی به شمار میرود و به شما امکان میدهد تا کدهای C لازم برای ایجاد یک تحلیلگر لغوی را بطور اتوماتیک ایجاد کنید. نحوه عمل هم بصورت کلی بدین حالت است که شما الگوهای مورد نیاز برای شناسایی توکن ها را مشخص میکنید و پس از تبدیل شدن این کد به کد زبان C میتوانید آن را در برنامه تان بکار گیرید. البته دانستن lex در کنار دانستن یک مولد پارسر مثل Yacc مفید خواهد بود. جزئیات مفصلتر از این حرفهاست و شما را ارجاع میدهم به:
    http://epaperpress.com/lexandyacc/

  5. #5

    Smile فایل هایLEXوYACCبه همراه راهنما ی فارسی و مثال

    همانطوریکه دوستان گفتند lex , yacc دو تا ابزار برای طراحی کامپایلر ها هستند . من با نسخه های flexوbisonآن ها که از lex,yacc اولیه مشتق شده اند کار کرده ام . این نرم افزار ها برای پروژه ی درس طراحی کامپایلر کاربرد دارند . امیدوارم که مورد استفاده دوستان قرار بگیرد.
    سه فایل آپلود کردم که به ترتیب عبارتند از :
    1.یک راهنمای انگلیسی به همراه ترجمه فارسی آن
    FlexBison_Guide.zip
    2.فایل های Flexو Bison(یک نسخه از lex و yacc)
    FlexBiosn_File.zip
    3.یک نمونه ساده برنامه های Flex و Bison(اسکنر و پارسر) برای پاسکال
    pascal_parser.zip
    4.همان راهنمای فارسی به فرمت pdf

    امیدوارم بکار دوستان بیاد.
    (در مورد راهنمای فارسی نظر بدید! )
    seyyedkarim@gmail.com
    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله SeyyedKarim : پنج شنبه 07 فروردین 1393 در 01:04 صبح

  6. #6
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    مهر 1384
    پست
    163
    سلام دوستان
    من میخواستم یه برنامه نوشته شده با C یا پاسکال رو به lex&yacc بدم و اونو کامپایل کنم
    میشه لطف کنین یه توضیح بدین باید چیکار کنم ؟ ممنون میشم .

  7. #7
    سلام
    این برنامه lex هستش. توی ویندوز هم کار می کنه
    شما نمی تونید یک برنامه رو به lex بدید و اون برای شما کامپایل کنه.شما می تونید از lex کمک بگیرید تا کد مربوط به قسمت scanner یا همون تحلیل گر لغوی رو برای شما تولید کنه. یعنی شما عبارات منظم رو میدین و اون کد scanner رو برای شما تولید می کنه و باید از این کد در برنامه ای که دارین برای کامپایلر می نویسید استفاده کنید. مثلا کد زیر رو در یک note pad می نویسید:

    %{


    #define ERROR 400
    #define PROGRAM 259
    #define LT 260
    #define LE 261
    #define EQ 262
    #define NE 263
    #define GT 264
    #define GE 265
    #define IF 266
    #define THEN 267
    #define ELSE 268
    #define ID 269
    #define NUMBER 270
    #define RELOP 271
    #define function 272
    #define procedure 273
    #define begin 274
    #define end 275
    #define INT 276
    #define REAL 277
    #define WHILE 278
    #define PROPEN 279
    #define PRCLOSE 280
    #define BROPEN 281
    #define BRCLOSE 282
    #define ADDOP 283
    #define ASSIGNOP 284
    #define SEMICOLON 285
    #define JODA 286
    #define DOTDOT 287
    #define OF 288
    #define TWODOT 289
    #define INTEGER 290
    #define ARRAY 291
    #define MULOP 292
    #define OPMUL 293
    #define OPDIVCAST 294
    #define OPDIV 295
    #define OPMOD 296
    #define OPAND 297
    #define OPSUM 298
    #define OPDIF 299
    #define OPOR 300
    #define ASSOP 301
    #define VAR 302
    #define DO 303
    #define NOT 304
    int line=0;
    int yyval;
    FILE *in;
    FILE *out;
    %}
    delim [\t\n ]
    ws {delim}+
    digit [0-9]
    letter [a-zA-Z]
    digits [0-9]+
    id {letter}({letter}|{digit})*
    sign [+-]
    opt_fraction (\.{digits})?
    opt_exponent (E({sign})?{digits})?
    num {digits}{opt_fraction}{opt_exponent}

    %%
    {delim} {if (yytext[0]=='\n') line++;}
    program {return PROGRAM;}
    begin {return begin;}
    end {return end;}
    function {return function;}
    procedure {return procedure;}
    \{(.)*\} { /* ignore whitespace */}
    ";" {return SEMICOLON;}
    "," {return JODA;}
    \.\. {return DOTDOT;}
    [0-9]+ {return INT;}
    [0-9]*\.[0-9]+ {return REAL;}
    {num} {return NUMBER;}
    while {return WHILE;}
    if {return IF;}
    then {return THEN;}
    else {return ELSE;}
    of {return OF;}
    do {return DO;}
    real {return REAL;}
    array {return ARRAY;}
    integer {return INTEGER;}
    var {return VAR;}
    not {return NOT;}

    "*" {yyval=OPMUL;return MULOP;}
    "/" {yyval=OPDIVCAST;return MULOP;}
    "mod" {yyval=OPMOD;return MULOP;}
    "div" {yyval=OPDIV;return MULOP;}
    "and" {yyval=OPAND;return MULOP;}
    "+" {yyval=OPSUM;return ADDOP;}
    "-" {yyval=OPDIF;return ADDOP;}
    "or" {yyval=OPOR;return ADDOP;}
    ":=" {yyval=ASSOP;return ASSIGNOP;}
    "<" {yyval=LT;return RELOP;}
    ">" {yyval=GT;return RELOP;}

    ">=" {yyval=GE;return RELOP;}
    "<=" {yyval=LE;return RELOP;}

    "=" {yyval=EQ;return RELOP;}
    "<>" {yyval=NE;return RELOP;}
    "(" {yyval=PROPEN;return PROPEN;}
    ")" {yyval=PRCLOSE;return PRCLOSE;}
    "*" {yyval=OPMUL;return MULOP;}
    "[" {yyval=PROPEN;return BROPEN;}
    "]" {yyval=PRCLOSE;return BRCLOSE;}
    ":" {return TWODOT;}

    {id} {return ID;}
    . {return ERROR;}
    %%

    int yywrap(void){
    return 1;
    }
    int yt_getc(void){
    return (getc(in));
    }
    void main (){
    int token;
    in=fopen("c:\\test.txt","r");
    out=fopen("c:\\ret_test.txt","w");
    while( (token=yylex() ) !=0)
    switch(token){
    case RELOP: fprintf(out,"RELOP\n");break;
    case PROGRAM: fprintf(out,"Program\n");break;
    case begin: fprintf(out,"begin\n ");break;
    case end: fprintf(out,"end\n");break;
    case function: fprintf(out,"function\n");break;
    case procedure: fprintf(out,"procedure\n");break;
    case INT: fprintf(out,"int\n");break;
    case REAL: fprintf(out,"real\n");break;
    case ID: fprintf(out,"id\n");break;
    case NUMBER: fprintf(out,"number\n");break;
    case IF: fprintf(out,"if\n");break;
    case THEN: fprintf(out,"then\n");break;
    case ELSE: fprintf(out,"else\n");break;
    case WHILE: fprintf(out,"while\n");break;
    case ADDOP: fprintf(out,"addop\n",yyval);break;
    case ASSIGNOP: fprintf(out,"assignop\n");break;
    case PROPEN: fprintf(out,"(\n");break;
    case PRCLOSE: fprintf(out,")\n");break;
    case BROPEN: fprintf(out,"[\n");break;
    case BRCLOSE: fprintf(out,"]\n");break;
    case SEMICOLON: fprintf(out,";\n");break;
    case JODA: fprintf(out,",\n");break;
    case DOTDOT: fprintf(out,"..\n");break;
    case TWODOT: fprintf(out,":\n");break;
    case INTEGER: fprintf(out,"integer\n");break;
    case OF: fprintf(out,"of\n");break;
    case DO: fprintf(out,"do\n");break;
    case ARRAY:fprintf(out,"array\n");break;
    case VAR:fprintf(out,"var\n");break;
    case MULOP:fprintf(out,"MULOP\n");break;
    case ERROR:fprintf(out,"\n %s%d","lexical ERROR at line: ",line);break;
    }
    }

    این فایل رو با پسوند l. ذخیره می کنی و در فولدر برنامه lex که گفتم قرار میدی. فرض می کنیم که شما فولدر lex رو در درایو c قرار دادی. حالا command prompt رو باز کن و دستورات زیر رو بنویس
    c:\lex> set rootdir=. c:\lex> lex -l -o a.l a.c
    اسم فایل a گذاشتم.فایل کد بالا رو attach کردم
    حالا lex یک فایل با پسوند c تولید می کنه که همون scanner هست. اون کد رو با c اجرا کنی. توی main برنامه یک فایل test رو باز می کنه که اگه توش مثلا 12 نوشته باشی برات توی فایل ret_test که تولید می کنه INT بر می گردونه. یعنی توکن هایی که بالای کد تعریف کردم رو می تونه بر گردونه.مثلا if رو IF بر می گردونه. تازه این شد فاز اول
    فاز بعدی هم از لحاظ نحو که می تونی از yacc کمک بگیری یا اینکه جدول پارزپارز درست کنی و خودت کد بنویسی. ولی هیچ کدوم از این برنامه ها کد ماشین تولید نمی کنه
    فایل های ضمیمه فایل های ضمیمه
    • نوع فایل: rar Lex.rar‏ (52.2 کیلوبایت, 1864 دیدار)
    آخرین ویرایش به وسیله whitehat : پنج شنبه 29 فروردین 1387 در 02:47 صبح دلیل: استفاده از تگ کد برای خوانایی بیشتر

  8. #8
    اینم فایل برنامه l.

    فایل v هم کدی که lex تولید کرده. البته برای اینکه کار کنه باید این کد رو خط اول کد c اضافه کنی
    define YYTRACE#
    فایل های ضمیمه فایل های ضمیمه
    • نوع فایل: rar a.rar‏ (1.5 کیلوبایت, 874 دیدار)
    • نوع فایل: rar v.rar‏ (6.1 کیلوبایت, 836 دیدار)

  9. #9

    نقل قول: برنامه های lex و yacc چیستند و چگونه می توان با آن کار کرد

    سلام
    من یک flex میخوام که با #C کار کنه
    اگه سراغ داریئ لینکش رو بگذارید.

  10. #10

    نقل قول: فایل هایLEXوYACCبه همراه راهنما ی فارسی و مثال

    نقل قول نوشته شده توسط SeyyedKarim مشاهده تاپیک
    همانطوریکه دوستان گفتند lex , yacc دو تا ابزار برای طراحی کامپایلر ها هستند . من با نسخه های flexوbisonآن ها که از lex,yacc اولیه مشتق شده اند کار کرده ام . این نرم افزار ها برای پروژه ی درس طراحی کامپایلر کاربرد دارند . امیدوارم که مورد استفاده دوستان قرار بگیرد.
    سه فایل آپلود کردم که به ترتیب عبارتند از :
    1.یک راهنمای انگلیسی به همراه ترجمه فارسی آن
    FlexBison_Guide.zip
    2.فایل های Flexو Bison(یک نسخه از lex و yacc)
    FlexBiosn_File.zip
    3.یک نمونه ساده برنامه های Flex و Bison(اسکنر و پارسر) برای پاسکال
    pascal_parser.zip
    4.همان راهنمای فارسی به فرمت pdf

    امیدوارم بکار دوستان بیاد.
    (در مورد راهنمای فارسی نظر بدید! )
    seyyedkarim@gmail.com
    my weblog:(قابل توجه علاقمندان سی شارپ)
    http://www.csharp-fun.persianblog.ir
    سایت فروش بلیط اتوبوس استان مازندران
    http://www.fbt.ir

    سلام
    این لینک ها کمک خوبی برای پروژه کامپایلرم بودن
    متشکرم

  11. #11

    نقل قول: برنامه های lex و yacc چیستند و چگونه می توان با آن کار کرد

    نقل قول نوشته شده توسط KavehAlvand مشاهده تاپیک
    اینم فایل برنامه l.

    فایل v هم کدی که lex تولید کرده. البته برای اینکه کار کنه باید این کد رو خط اول کد c اضافه کنی

    define YYTRACE#



    کسی کامپایلر lex داره ؟؟؟؟؟؟؟؟؟؟؟؟؟؟

  12. #12

    نقل قول: فایل هایLEXوYACCبه همراه راهنما ی فارسی و مثال

    نقل قول نوشته شده توسط SeyyedKarim مشاهده تاپیک
    همانطوریکه دوستان گفتند lex , yacc دو تا ابزار برای طراحی کامپایلر ها هستند . من با نسخه های flexوbisonآن ها که از lex,yacc اولیه مشتق شده اند کار کرده ام . این نرم افزار ها برای پروژه ی درس طراحی کامپایلر کاربرد دارند . امیدوارم که مورد استفاده دوستان قرار بگیرد.
    سه فایل آپلود کردم که به ترتیب عبارتند از :
    1.یک راهنمای انگلیسی به همراه ترجمه فارسی آن
    FlexBison_Guide.zip
    2.فایل های Flexو Bison(یک نسخه از lex و yacc)
    FlexBiosn_File.zip
    3.یک نمونه ساده برنامه های Flex و Bison(اسکنر و پارسر) برای پاسکال
    pascal_parser.zip
    4.همان راهنمای فارسی به فرمت pdf

    امیدوارم بکار دوستان بیاد.
    (در مورد راهنمای فارسی نظر بدید! )
    seyyedkarim@gmail.com
    my weblog:(قابل توجه علاقمندان سی شارپ)
    http://www.csharp-fun.persianblog.ir
    سایت فروش بلیط اتوبوس استان مازندران
    http://www.fbt.ir



    می شه بگید چه جوری می تونم خروج مثالی که گذاشتید در Parser Generator ببینم ؟

  13. #13
    کاربر دائمی آواتار BOB
    تاریخ عضویت
    خرداد 1383
    محل زندگی
    http://www.mshams.ir
    پست
    450

    نقل قول: برنامه های lex و yacc چیستند و چگونه می توان با آن کار کرد

    سلام

    بنده قبلا کد کامل آن را برای گرامر c تهیه کرده ام. میتوانید از آن استفاده بفرمایید:
    گرامر c با lex و yacc

  14. #14

    نقل قول: فایل هایLEXوYACCبه همراه راهنما ی فارسی و مثال

    سلام
    من از نرم افزار parser generator برای پروژه طراحی کامپایلر استفاده میکنم ولی تو کار باهاش مشکل دارم
    فعلا قسمت تحلیلگر لغویشو دارم کار میکنم.
    تو نرم افزار بعد کامپایل فایل c تولید میشه این فایلو تو boorland C++‎ که اجرا میکنم این خطارو میده:
    Error: Error: Unresolved external '_yyreturnflg' referenced from C:\LEX\A.OBJ
    Error: Error: Unresolved external '_yylex' referenced from C:\LEX\A.OBJ
    اگه ممکنه منو راهنمایی کنید
    باتشکر

  15. #15

    نقل قول: برنامه های lex و yacc چیستند و چگونه می توان با آن کار کرد

    سلام،خسته نباشید
    شما چهارشنبه 28 فروردین 1387, 22:53 عصر یه توضیحاتی راجع به پرو ژه کامپایلر و نحوه ایجاد اسکنر دادید میخواستم بدونم نرم افزارش چی بوده؟ما باparser generatorاون کد رو اجرا کردیم و فایل ایجاد شده رو توی borlandC++‎ اجرا کردیم ولی error داد
    ممنون میشم اگه جوابتونو به این آدرس sm.moradkhani@gmail.com بفرستید

  16. #16

    نقل قول: برنامه های lex و yacc چیستند و چگونه می توان با آن کار کرد

    سلام
    من از نرم افزار parser generator برای پروژه طراحی کامپایلر استفاده میکنم ولی تو کار باهاش مشکل دارم
    فعلا قسمت تحلیلگر لغویشو دارم کار میکنم.
    تو نرم افزار بعد کامپایل فایل c تولید میشه این فایلو تو boorland C++‎‎ که اجرا میکنم این خطارو میده:
    Error: Error: Unresolved external '_yyreturnflg' referenced from C:\LEX\A.OBJ
    Error: Error: Unresolved external '_yylex' referenced from C:\LEX\A.OBJ
    اگه ممکنه منو راهنمایی کنید
    باتشکر

  17. #17
    کاربر دائمی آواتار asefy2008
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    تهران
    سن
    36
    پست
    729

    نقل قول: برنامه های lex و yacc چیستند و چگونه می توان با آن کار کرد

    آیا نسخه ای از Lex و Yacc برای تولید کد سی شارپ یا پایتون یا جاوا وجود داره ؟

  18. #18

    نقل قول: برنامه های lex و yacc چیستند و چگونه می توان با آن کار کرد

    سلام خسته نباشید
    من کد تگهای html با bison رو میخام میتونید کمکم کنید

  19. #19

    نقل قول: فایل هایLEXوYACCبه همراه راهنما ی فارسی و مثال

    حالا command prompt رو باز کن و دستورات زیر رو بنویس
    c:\lex> set rootdir=. c:\lex> lex -l -o a.l a.c

    سلام من این دستور رو نوشتم ولی درست نشد اشکالم کجاست؟

  20. #20

    نقل قول: برنامه های lex و yacc چیستند و چگونه می توان با آن کار کرد

    میشه یه کم بیشتر در مورد flexتوضیح بدید درواقع وقتی توی commond همون خطی را که نوشتیم باید چی کار کنیم اخه من هیچی بلد نیستم وواقعا بهش نیاز دارم ممنون میشم اگه راهنماییم کنید

  21. #21

    نقل قول: برنامه های lex و yacc چیستند و چگونه می توان با آن کار کرد

    سلام من هم تحلیلگر نحوی درست کردم هم لغوی
    حالا باید این دو تارو با یک تابع به هم ربط بدم و کامپایلر رو درست کنم اما نمیشه!!!
    par_tab.cوlex.yy.c
    چطور بهم لینکشون کنم!!

  22. #22

    نقل قول: فایل هایLEXوYACCبه همراه راهنما ی فارسی و مثال

    رهنمای فارسی خوبه تقریبا مرسی،
    مثلا یه جا گفته با یک تابع main به هم لینک کنید،گفته اگر main , yywrapرو دارید include رو بردارید،من همه این کار ها رو کردم ارور میده!!!
    چطوری به هم لینکشون کنم،در واقع مرحله 3 رو نمیفهمم!!

  23. #23
    کاربر تازه وارد آواتار png_92
    تاریخ عضویت
    دی 1391
    محل زندگی
    تهران
    پست
    98

    نقل قول: برنامه های lex و yacc چیستند و چگونه می توان با آن کار کرد

    نقل قول نوشته شده توسط مهسا ستایش مشاهده تاپیک
    میشه یه کم بیشتر در مورد flexتوضیح بدید درواقع وقتی توی commond همون خطی را که نوشتیم باید چی کار کنیم اخه من هیچی بلد نیستم وواقعا بهش نیاز دارم ممنون میشم اگه راهنماییم کنید
    میتونین از این وبلاگ کمک بگیرین:
    http://majidr.blog.ir/1392/12/25/%D9...2-%D8%A7%D9%86

  24. #24
    کاربر تازه وارد آواتار png_92
    تاریخ عضویت
    دی 1391
    محل زندگی
    تهران
    پست
    98

    نقل قول: فایل هایLEXوYACCبه همراه راهنما ی فارسی و مثال

    باید تو command اینطوری عمل کرد:
    اول برین به محلی که flex رو نصب کردین تو پوشه bin ینی اینطوری : C:\user\png\flex\bin یا هرجاکه خودتون نصب کردین
    بعد که فایل با پسوند .l (فایل a.l)رو ساختین و گرامرو توش گذاشتین باید lex.yy.c رو اینطوری تو همون محل بسازین : flex a.l
    حالا باید lex.yy.c رو کامپایل کرد. بادستور cl lex.yy.c که فایل اجرایی درکنار فایل c ساخته میشود.

تاپیک های مشابه

  1. نرم افزار yacc
    نوشته شده توسط bhn_parse در بخش الگوریتم، کامپایلر، هوش مصنوعی و ساختمان داده ها
    پاسخ: 13
    آخرین پست: یک شنبه 27 تیر 1389, 17:11 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •