لکس: تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
Adlerbot (بحث | مشارکت‌ها)
جز ربات: اصلاح فاصله مجازی: "ای" بعد از "ه"
Tanhabot (بحث | مشارکت‌ها)
جز ربات: ویرایش جزئی
خط ۱:
{{ویکی‌سازی}}
در علوم رایانه,'''Lex''' برنامه‌ای است که تحلیلگرهای لغوی را(اسکنرها یا لکسرها) تولید می‌کند. Lex معمولاً با Yacc )تولید کنندهٔ پارسر) استفاده می‌شود.
Lex در اصل، توسط Eric Schmidt و Mike Lesk طراحی و نوشته شد و این تحلیلگر لغوی، بطور استاندارد تحت سیستم‌های یونیکس است و یک ابزار برای نمایش رفتار(که برگرفته از استاندارد Posix) دارد.
Lex یک رشته را از ورودی می خواند و تحلیلگر لغوی را مشخص می‌کند و خروجی ، سورس کد یک Lexer به زبان برنامه نویسی C است.
بهرحال، نسخه‌های اختصاصی سنتی Lex ، همچون OpenSolaris وPlan 9 (از آزمایشگاههای Bell) برپایهٔ کد AT&T بصورت متن باز و جزئی از این سیستم‌ها موجود می‌باشند. همچنین نسخهٔ دیگری از Lex نیز به صورت متن باز و با نام Flex (fast lexical analyzer) رایج می‌باشد.
 
== ساختار یک فایل Lex ==
ساختار یک فایل Lex عمدا شبیه به یک فایل Yacc است. فایلها به سه بخش تقسیم می‌شوند که هر بخش با %% از بخش دیگر جدا می‌شود:
</br>
''بخش تعریف''</br>
خط ۲۲:
** ''قسمت کد زبان C (C code section)''، شامل دستورات و توابع کد زبان C است که کلمه به کلمه به فایل سورس تولید شده، اضافه می‌شود. احتمالاً این دستورات حاوی کدهایی هستند که در قسمت قواعد، توسط قواعد مختلف، فراخوانی می‌گردند. بهتر است که در برنامه‌های بزرگ، این بخش بطور جداگانه در یک فایل دیگر قرار بگیرد و در زمان کامپایل، به فایل اصلی اضافه شود.
 
== مثالی از فایل Flex ==
در ادامه یک فایل Lex از ویرایش Flex می‌آید. که یک رشته‌ای از اعداد صحیح را از ورودی، تشخیص داده و در خروجی نمایشش می‌دهد:
<code>
خط ۷۴:
Saw an integer: 6
 
== استفاده از Lex به همراه Yacc ==
عموماً Lex و Yacc(''تولید کنندهٔ Parser'') درکنار یکدیگر مورد استفاده قرار می‌گیرند. چون Lex به ماشینهای قطعی(DFA) محدود می‌شود بنابراین آن رشته‌های ورودی، که Lex با استفاده از عبارات منظم قادر به تجزیهٔ آنها نیست، Yacc با استفاده از یک گرامر رسمی، آنها را تجزیه می‌کند، با این حال، Yacc قادر به دریافت رشته از ورودی نمی‌باشد و به مجموعه‌ای از توکنها احتیاج دارد.غالبا Lex برای تامین توکنهای مورد نیاز Yacc مورد استفاده قرار می‌گیرد.
 
== Lex و ساختن ==
مزیت ساختن، برای حفظ و نگهداری برنامه‌هایی است که شامل Lex هستند. سازنده هر فایلی را که دارای پسوند .l باشد را فایل سورس Lex در نظر می‌گیرد. و چنین فایلی را به‌عنوان فایلی که باید به فایل مقصد تبدیل شود، می‌شناسد.
بطور مثال اجازه دهید تا فایلی با نام ex.l و فایل قابل اجرای EXE را در خروجی داشته باشیم . روش معمول بصورت زیر است:
$>lex ex.l <return>
خط ۹۵:
$> make <return>
</br>
این کار در اینجا بسیار سریع انجام شد اما اگر شما به 10 فایل برای کامپایل ، نیاز داشته باشید، آنگاه این روش واقعا مفید خواهد بود.
 
== منابع ==
1. ^ "make", The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition (The IEEE and The
Open Group), 2004, http://www.opengroup.org/onlinepubs/009695399/utilities/make.html
برگرفته از «https://fa.wikipedia.org/wiki/لکس»