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

محتوای حذف‌شده محتوای افزوده‌شده
FreshmanBot (بحث | مشارکت‌ها)
جز اصلاح فاصله مجازی + اصلاح نویسه با ویرایشگر خودکار فارسی
FreshmanBot (بحث | مشارکت‌ها)
جز اصلاح فاصله مجازی + اصلاح نویسه با ویرایشگر خودکار فارسی
خط ۱:
'''لکس''' {{انگلیسی|Lex}} در علوم کامپیوتر برنامه‌ای است که تحلیلگرهای لغوی را (اسکنرها یا لکسرها) تولید می‌کند. Lex معمولاً با [[یک (نرم‌افزار)|یک]])تولید کنندهٔ پارسر) استفاده می‌شود.
Lex در اصل، توسط Eric Schmidt و Mike Lesk طراحی و نوشته شد و این تحلیلگر لغوی، بطوربه‌طور استاندارد تحت سیستم‌های یونیکس است و یک ابزار برای نمایش رفتار (که برگرفته از استاندارد [[پازیکس]] است) دارد.
Lex یک رشته را از ورودی می‌خواند و تحلیلگر لغوی را مشخص می‌کند و خروجی، سورس کد یک Lexer به [[زبان برنامه نویسی سی]] است.
بهرحال، نسخه‌های اختصاصی سنتی Lex، همچون [[اوپن‌سولاریس]] و [[پلان ۹]] برپایهٔ کد AT&T به صورت متن باز و جزئی از این سیستم‌ها موجود می‌باشند. همچنین نسخهٔ دیگری از Lex نیز به صورت متن باز و با نام [[تحلیل‌گر واژگانی فلکس]] رایج می‌باشداست.
 
== ساختار یک فایل Lex ==
خط ۱۳:
''بخش کد زبان C''
* ''قسمت تعریف (definition section)''، جایی برای تعریف ماکروها و وارد کردن فایل‌های سرآمدی (header) است که به زبان C نوشته شده‌اند. همچنین امکان اینکه هر کدی از زبان C را در اینجا بنویسید، وجود دارد، و این کد به صورت کلمه به کلمه، در کد اصلی تولید شده خواهد آمد.
* ''قسمت قواعد (rules section)''، مهم‌ترین بخش است که الگوها (عبارات منظم ساده) را با استفاده از دستورهای زبان C با هم مرتبط می‌سازد. زمانی که لکسر، متون را از ورودی می‌گیرد، الگوی معینی را برایشان مشخص می‌کند و کد (به زبان C) مرتبط با آن الگو را نیز اجرا می‌کند. و این چرخهٔ اصلی فعالیت Lex می‌باشداست.
* ''قسمت کد زبان C (C code section)''{{چر}}، شامل دستورهای و توابع کد زبان C است که کلمه به کلمه به فایل سورس تولید شده، اضافه می‌شود. احتمالاً این دستورهای حاوی کدهایی هستند که در قسمت قواعد، توسط قواعد مختلف، فراخوانی می‌گردند. بهتر است که در برنامه‌های بزرگ، این بخش بطوربه‌طور جداگانه در یک فایل دیگر قرار بگیرد و در زمان کامپایل، به فایل اصلی اضافه شود.
 
== مثالی از فایل Flex ==
خط ۶۷:
 
== استفاده از Lex به همراه Yacc ==
عموماً Lex و Yacc(''تولید کنندهٔ Parser'') در کنار یکدیگر مورد استفاده قرار می‌گیرند. چون Lex به ماشین‌های قطعی (DFA) محدود می‌شود بنابراین آن رشته‌های ورودی، که Lex با استفاده از عبارات منظم قادر به تجزیهٔ آن‌ها نیست، Yacc با استفاده از یک گرامر رسمی، آن‌ها را تجزیه می‌کند، با این حال، Yacc قادر به دریافت رشته از ورودی نمی‌باشدناست و به مجموعه‌ای از توکن‌ها احتیاج دارد. غالباً Lex برای تأمین توکن‌های مورد نیاز Yacc مورد استفاده قرار می‌گیرد.
 
== Lex و ساختن ==
خط ۹۰:
{{پایان چپ‌چین}}
 
قبل از تعریفات سازنده، <tab> مورد نیاز می‌باشداست. یعنی در هر زمان فقط سازنده اجرا می‌شود:
 
{{چپ‌چین}}
برگرفته از «https://fa.wikipedia.org/wiki/لکس»