لکس: تفاوت میان نسخهها
محتوای حذفشده محتوای افزودهشده
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 و ساختن ==
خط ۹۰:
{{پایان چپچین}}
قبل از تعریفات سازنده، <tab> مورد نیاز
{{چپچین}}
|