لکس کیست؟ توضیح بده.
لکس در علوم کامپیوتر برنامه‌ای است که تحلیلگرهای لغوی را (اسکنرها یا لکسرها) تولید می‌کند. Lex معمولاً با یَک (نرم‌افزار تولید کنندهٔ پارسر) استفاده می‌شود.Lex در اصل، توسط Eric Schmidt و Mike Lesk طراحی و نوشته شد و این تحلیلگر لغوی، به‌طور استاندارد تحت سیستم‌های یونیکس است و یک ابزار برای نمایش رفتار (که برگرفته از استاندارد پازیکس است) دارد.Lex یک رشته را از ورودی می‌خواند و تحلیلگر لغوی را مشخص می‌کند و خروجی، سورس کد یک Lexer به زبان برنامه نویسی سی است.به‌هرحال، نسخه‌های اختصاصی سنتی Lex، همچون اوپن‌سولاریس و پلان ۹ برپایهٔ کد AT&amp;T به صورت متن باز و جزئی از این سیستم‌ها موجود می‌باشند. همچنین نسخهٔ دیگری از Lex نیز به صورت متن باز و با نام تحلیل‌گر واژگانی فلکس رایج است.ساختار یک فایل Lex.ساختار یک فایل Lex عمداً شبیه به یک فایل Yacc است. فایل‌ها به سه بخش تقسیم می‌شوند که هر بخش با %% از بخش دیگر جدا می‌شود: "بخش تعریف" "بخش قواعد" "بخش کد زبان C"مثالی از فایل Flex.در ادامه یک فایل Lex از ویرایش Flex می‌آید. که یک رشته‌ای از اعداد صحیح را از ورودی، تشخیص داده و در خروجی نمایشش می‌دهد:/*** Definition section ***//* C code to be copied verbatim *//* This tells flex to read only one input file */%option noyywrap /*** Rules section ***/ /* [0-9]+ matches a string of one or more digits */[0-9]+ { /* yytext is a string containing the matched text. */ printf("Saw an integer: %s\n", yytext);/*** C Code section ***/int main(void) /* Call the lexer, then quit. */ yylex(); return 0;اگر رشته ورودی به Flex ارسال شود، آن را به فایل C (lex.yy.c) تبدیل می‌کند. و به فایل قابل اجرا، کامپایل می‌شود که رشته‌ای از اعداد صحیح را تشخیص داده و در خروجی نمایش می‌دهد. به‌عنوان مثال اگر رشتهٔ زیر را به‌عنوان ورودی بدهیم: abc123z.!&amp;*2gj6برنامه، خروجی زیر را خواهد داشت: Saw an integer: 123 Saw an integer: 2 Saw an integer: 6استفاده از Lex به همراه Yacc.عموماً Lex و Yacc("تولید کنندهٔ Parser") در کنار یکدیگر مورد استفاده قرار می‌گیرند. چون Lex به ماشین‌های قطعی (DFA) محدود می‌شود بنابراین آن رشته‌های ورودی، که Lex با استفاده از عبارات منظم قادر به تجزیهٔ آن‌ها نیست، Yacc با استفاده از یک گرامر رسمی، آن‌ها را تجزیه می‌کند، با این حال، Yacc قادر به دریافت رشته از ورودی نیست و به مجموعه‌ای از توکن‌ها احتیاج دارد. غالباً Lex برای تأمین توکن‌های مورد نیاز Yacc مورد استفاده قرار می‌گیرد.Lex و ساختن.مزیت ساختن، برای حفظ و نگهداری برنامه‌هایی است که شامل Lex هستند. سازنده هر فایلی را که دارای پسوند.l باشد را فایل سورس Lex در نظر می‌گیرد. و چنین فایلی را به‌عنوان فایلی که باید به فایل مقصد تبدیل شود، می‌شناسد.به‌طور مثال اجازه دهید تا فایلی با نام ex.l و فایل قابل اجرای EXE را در خروجی داشته باشیم. روش معمول به صورت زیر است: $&gt;lex ex.l &lt;return&gt;شما فایلی با نام lex.yy.c را خواهید داشت. $&gt;gcc -o EXE lex.yy.c -ll (or -lfl) &lt;return&gt;با این روش ما فایل EXE را تهیه می‌کنیم. EXE: ex.o &lt;tab&gt;gcc -o EXE ex.o –llقبل از تعریفات سازنده، &lt;tab&gt; مورد نیاز است. یعنی در هر زمان فقط سازنده اجرا می‌شود: $&gt; make &lt;return&gt;این کار در اینجا بسیار سریع انجام شد اما اگر شما به ۱۰ فایل برای کامپایل، نیاز داشته باشید، آنگاه این روش واقعاً مفید خواهد بود.منابع.۱. ^ "make", The Open Group Base Specifications Issue ۶، IEEE Std ۱۰۰۳٫۱، ۲۰۰۴ Edition (The IEEE and TheOpen Group), ۲۰۰۴، http://www.opengroup.org/onlinepubs/009695399/utilities/make.html