سرشار از زندگی

طبقه بندی موضوعی

نرم افزار flex و نحوه ی استفاده از آن

يكشنبه, ۲۵ اسفند ۱۳۹۲، ۰۷:۴۳ ب.ظ

نرم افزار flex برای ایجاد تحلیلگر از فایل نوشته شده به زبان flex استفاده می شود. در این فرایند، شما ابتدا فایل نوشته شده با زبان flex را به این نرم افزار می دهید و در خروجی یک فایل به زبان c ) c.*) تولید می کند که با کامپایل آن، scanner شما آماده استفاده خواهد بود!

حال به نحوه ی انجام این فرایند  با یک مثال می پردازم:

ایجاد تحلیلگر با flex

  • ابتدا فایل اجرایی flex را از اینجا دریافت کنید (200KB) و از حالت فشرده خارج کنید.
  • فایل با پسوند l  را در محلی که flex را از حالت فشرده خارج کردید (مثلا درایو F)، داخل پوشه ی زیر  قرار دهید.  (برای نوشتن فایل l ، این پست را ببینید)
F:\flex-2.5.4a-1-bin\bin
  • command ویندوز را باز کرده و با استفاده از دستور زیر به دایرکتوری مورد نظر بروید:
cd /d F:\flex-2.5.4a-1-bin\bin
  • حال با استفاده از دستور زیر فایل majidr.l را به flex بدهید:
flex majidr.l
  •  حالا اگه مشکلی نباشد، فایلی با نام lex.yy.c در همان محل تولید می شود. 

کامپایل کردن فایل تولید شده

  • برای کامپایل این کد، هر نسخه ای از Visual Studio را که دارید، باز کنید و از منوی Tools، گزینه ی Visual Studio Command Prompt را بزنید تا پنجره ی command باز شود. حال دستور زیر را وارد کنید تا به دایرکتوری مورد نظر بروید:
cd /d F:\flex-2.5.4a-1-bin\bin 
  • برای کامپایل دستور زیر را وارد نمایید:
cl lex.yy.c
  • با این کار فایل اجرایی در کنار فایل c ایجاد می شود.

استفاده از تحلیلگر کامپایل شده

  • برای استفاده از تحلیلگر،  مانند دستور زیر عمل کنید:
lex.yy <majidCodes.txt> majidOut.txt

که در آن  majidCodes.txt، فایل حاوی کد برای تحلیلگر  و  majidOut.txt ، فایل خروجی تحلیلگر است.


اگر ایرادی توی این پست بود یا ... ، در نظرات اعلام کنید!

نظرات  (۲۱)

با درود فراوان خدمت شما
بسیار از شما سپاس گزارم بابت پست و کمکی که من از وبلاگ شما گرفتم
خیلی خیلی ممنونم
پاسخ:

لطف دارید.

خوشحالم مفید بوده.

:)

سلام.من میخواستم یک تحلیلگر لغوی برای زبان جاوا با استفاده از jflex بنویسم لطف میکنید راهنماییم کنید.
پاسخ:

سلام

متاسفانه بنده از این زمینه اطلاع کافی ندارم.

سلام
خوب بود ولی کاش این کار با ی مثال ارائه میشد.

پاسخ:
من که مثال زدم!
خیلی ممنونم
میشه قسمت آخرو بیشتر توضیح بدید. کد زیرو کجا وارد کنیم؟؟؟؟؟
lex.yy <majidCodes.txt> majidOut
پاسخ:

باید در Command line ای که به محل فایل کامپایل شده cd شده، وارد نمایید.

منظورم از مثال، با یه گرامر یا کد بود.
ولی خیلی خوب بود توضیحتون .ممنون.
پاسخ:
به نظرم در فایل آموزشی، نمونه ی گرامر موجود باشد.

ممنون خوب بود

پاسخ:
:)
واقعا ممنوووووووووووووووووووووووووونم ازتون ....
پاسخ:
:)
سلام چرا من توی tool اون گزینه رو ندارم ؟؟؟؟
پاسخ:

این را ببینید.

:)

سلام ...
چرا بعد از وارد کردن cl lex.yy.c ، پیغام زیر رو میده ؟ باید چیکارش کنم؟
cl is not recognized as an internal or external command operable program or batch file.
ممنون .
    پاسخ:

    همون طور که گفتم؛ باید اول به دایرکتوری ای که flex وجود داره cd کنید:

    cd /d F:\flex-2.5.4a-1-bin\bin 


    بعد از وارد کردن cl lex.yy.cاین پیغام رو میده:
    compiling desktop applications for the ARM for the platform is not supported
    چیکار باید بکنم؟
    پاسخ:

    طبق این عمل کنید:

    http://stackoverflow.com/a/12347035/2040375

    واسه من میگه:
    flex:cant open pp.l
    پاسخ:

    اگر مطمئنید که مسیر فایل درسته، یک بار هم با / امتحان کنید.

    مثلا:

    x/y.l

    مسیر فایل من درسته ولی  تو cmd میگه که cl رو نمیشناسه.
    پاسخ:
    اول باید مطمئن بشید که دایرکتوری فعلیتون روی F:\flex-2.5.4a-1-bin\bin قرار داره.(دستور قبلی درست اجرا نشده)
    سلام آقا من فایل lex.yy.c رو با هرچی کامپایل میکنم خطا میگیره از چیه ؟

    پاسخ:
    خطاشو نگی، من از کجا بفهمم مشکل از چیه؟
    :D
    واسه jflex  چه دستوری باید تو command prompt  بنویسیم؟؟؟
    پاسخ:
    این را ببینید.
    سلام 
    موقع کامپایل این ارور رو میده
    error LNK1120: 2 unresolved externals 
    پاسخ:
    احتمالا یکی از include ها جا افتاده، اطلاعات بیشتر در اینجا و اینجا.
    سلام
    ببخشید میشه توضیح در مورد bison هم بدین؟
    ممنون 
    پاسخ:
    فایلی خوب درباره ی bison در اینجا موجود است.
    bison مناسب این نوع flex رو از کجا میشه پیدا کرد؟
    من هر چی میگردم نیست
    پاسخ:
    bison و flex عملکرد متفاوتی دارند.
    .Lex and Flex are tools for generating scanners: programs which recognize lexical patterns in text. Flex is a faster version of Lex

    .Yacc and Bison are tools for generating parsers: programs which recognize the structure grammatical structure of programs. Bison is a faster version of Yacc

    سلام من وقتی دستور cl lex.yy.c رو میزنم خطا میگیره از cl نمیشناسه این دستورو با اینکه من اول به دایرکتوری که flex بوده رفتم بازم همین خطارو میده 😣😣😢😢
    پاسخ:
    اول باید مطمئن بشید که دایرکتوری فعلیتون روی F:\flex-2.5.4a-1-bin\bin قرار داره.(دستور قبلی درست اجرا نشده)
    سلام تشکر بابت توضیحتون
    ولی من موقع کامپایل کردن به مشکل میخورم
    این خطا رو میده
    cl is not recognized as an internal or external command, operable program or batch file
    دستور قبلم چک کردم صحیح وارد کردم مسیر رو
    پاسخ:
    سلام
    این رو ببینید:
    https://stackoverflow.com/a/8800422/2040375
    سلام
    ببخشید من میخاستم یه تحلیلگرنحوی برای زبان حاوابنویسم.ولی اصن نمیدونم باید چیکارکنم. و ازکجاشرو کنم....خواهش میکنم کمکم کنید
    پاسخ:
    سلام
    فکر کنم اینا سر نخ های خوبی باشن:

    https://www.cs.princeton.edu/~appel/modern/java/JLex
    https://www.javaworld.com/article/2076874/learn-java
    ۲۹ خرداد ۹۸ ، ۱۹:۵۲ محمود مطلبی
    سلام
    من هرچی رو لینک دریافت فایل آموزش ساخت flex میزنم دانلود نمیشه
    فک کنم لینکش خرابه
    یدونه با ویدئوها ساخته بودم
    تو cmd دستورتونو میزنم میگه:
    "lexer.l", line 19: EOF encountered inside an action
    پاسخ:
    سلام
    همه ی پیوندها رو بررسی کردم. مشکلی نبود. دوباره امتحان کنید.
    برای این خطا هم آخر فایلتون یه خط خالی اضافی کنید، احتمالا درست بشه.

    ارسال نظر

    ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
    شما میتوانید از این تگهای html استفاده کنید:
    <b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
    تجدید کد امنیتی