معرفی دو ابزار تولید تحلیلگر لغوی و تحلیلگر نحوی
از هنگامی که تحلیگر های لغوی و تجزیه کننده ها با دست نوشته می شدند ، ]کم کم و ناخودآگاه[ تحلیلگرهای لغوی و تجزیه-کننده ها به طراحی یکسانی رسیدند و طراحان فهمیدند که آنها را می توان با دادن شرحی از رفتار مورد نظرشان ، به طور خودکار تولید کرد . نمونه ای از این ابزارهای خودکار که برنامه نویسان را از کار خسته کننده ی نوشتن]دستی[ تحلیلگر لغوی یا تجزیه کننده ، آسوده می کنند در زیر معرفی شده اند .
ابزار تولید کننده تحلیلگر لغوی:
Lex :
Lex یک تولیدکننده ی تحلیلگر لغویست که متن را براساس اطلاعات داده شده در فایل مشخصه تحلیل می کند. این مشخصه ها که در یک فایل ورودی متنی برای Lexلیست می شوند ، عبارات باقاعده ای را که باید تشخیص داده شوند ، تشریح می کنند . اعمالی که باید روی موجودیتهای تشخیص داده شده اجرا شوند ، می توانند به فرم برنامه های C ، به فایل-مشخصه اضافه شوند . این اعمال عیناً در برنامه C تولید شده توسط lex ، ثبت خواهدشد و ]بعد از[ یکبار کامپایل یک تحلیلگر لغوی را برای فایل مشخصه ی داده شده ، تشکیل خواهدداد . همه ی کاراکترهای تشخیص داده نشده توسط تحلیلگر لغوی ، عیناً در فایلِ خروجی کپی می شود .
Lex تولیدکننده آنالیزهای لغوی است. خلاصه نحوه فراخوانی دستورات آن به شکل زیر است:
Lex [-tvnq] [file]
Lex برنامه هایی را تولید می کند که با استفاده از آن ها می توان تحلیل لغوی یک متن داده شده را انجام داد. برای این کار باید قوانین مربوط به یافتن اجزاء لغوی و انجام تحلیل را در قالب فایل هایی با قالب استاندارد به عنوان ورودی به Lex داد. این فایل ها در اصل مجموعه ای از action ها هستند که به زبان c می باشند و تعیین می کنند که Lex در قبال یافتن یک واحد لغوی تعریف شده و یا به عبارت دیگر یک عبارت (expression) باید چه عکس العملی نشان دهد.
در نهایت Lex یک برنامه به زبان C تولید می کند که این برنامه می تواند یک فایل نمونه را از ورودی دریافت نماید و با توجه به قوانین از پیش تعریف شده اجزاء مختلف را شناسایی می کند. این اجزاء یا در مجموعه قوانین تعریف شده برای Lex وجود دارند و یا نه. در صورت وجود عمل متناسب بررروی آن ها انجام می شود و در غیر این صورت عین جزء شناسایی شده به خروجی منتقل می گردد.
نکته ای که وجود دارد و باید به آن دقت شود این است که Lex تنها به شناسایی اجزاء لغوی و پردازش آن ها می پردازد و هیچ پردازشی را برروی الگوهای زنجیره های لغوی انجام نمی دهد.
ابزار تولید کننده تحلیلگر نحوی :
از این ابزار ها میتوان به YACC و Bison اشاره کرد که Bison مورد بررسی قرار داده ایم .
Bison :
مقدمه :
Bison ، از یک گرامر ورودی ، یک برنامه C میسازد که بعد از کامپایل شدن ، یک تجزیهکننده تولید میکند . این تجزیهکننده ، زبان توصیف شده توسط گرامر را تشخیص میدهد** . برنامهنویس باید توسط Flex یک تحلیلگرلغوی بسازد یا آن را به شکل دستی بنویسد . در فایل مشخصهی Bison ما میتوانیم عملیاتهایی به زبان C اضافه کنیم . هر زمان که تطابقِ*** قاعدهیگرامری ]با دنبالهی توکنها[ تشخیص داده میشود ، تجزیهکننده ، عملیات مربوط به آن قاعده را اجرا میکند . با این روش میتوان یک کامپایلر کامل نوشت .
معمولاً تجزیهکنندههایی که توسط Bison تولید میشوند ، ساختار فایل ورودی را که باید از قواعدِگرامر داده شده به Bison پیروی کند ، بررسی میکنند .
پس برای بکارگیری Bison یک فایلمشخصه]ی [Biosn بنویسیم . ساختار احتمالی فایل ورودی که باید تحلیل شود ، ]شامل[ عملیاتهایی که باید اجرا شود ، یک تحلیلگر لغوی و اعلانات لازم ، خواهد بود .
Yacc در اصل برنامه ای است برای تولید پارسر ها. این برنامه یک syntax را به عنوان ورودی دریافت می کند و یک برنامه خروجی را تولید خواهد نمود که می تواند الگوهای زنجیره های لغوی را دریافت نموده و پردازش مناسب را برروی آن ها انجام دهد. این برنامه خروجی در اصل یک پارسر از نوع LALR است. عبارت LALR در اصل مخففی برای عبارت زیر است:
Look ahead, left to right, right most derivation producer with 1 look ahead token
در یک سلسه مراتب اجرا می توان گفت که ابتدا برنامه تولید شده توسط Lex اجزاء لغوی را شناسایی می نماید و سپس برنامه تولید شده توسط Yacc براساس اجزاء شناسایی شده نسبت به استخراج زنجیره های معنادار از این اجزاء شناخته شده اقدام می نماید.
5 عدد فایل ورد گزارش از ابزارهای مولد تحلیلگر لغوی و تحلیلگر نحوی Lex و Yacc… در مجموع ۷۴ صفحه
۱. گزارش Lex و Yacc – هفت صفحه
۲. معرفی LEX و تعامل آن با YACC همراه با مثال – ۳۶ صفحه
۳. عبارت منظم زبان های برنامه نویسی – سه صفحه
۴. توضیح Lex – یک صفحه
۵. مکانیزم کار کامپایلر – هشت صفحه
۶. معرفی ابزارهای مولد تحلیلگر لغوی و تحلیلگر نحوی – ۲۱ صفحه
——————————————————————————-
پروژه آماده کامپایلر : اسکنر زبان سی – C Scanner
——————————————————————————-
پروژه آماده کامپایلر : پارسر زبان سی – C Parser
——————————————————————————-
پروژه آماده کد سی شارپ اسکنر و پارسر زبان نمونه C
کد سی شارپ زبان نمونه C
قابلیت های کد سی شارپ پیاده سازی شده:
گزارش خطا
انتخاب عملی مورد نظر زمان برخورد با ابهام ها با پرسیدن از کاربر
نمایش ترمینال ها
نمایش گرامر
نمایش غیر ترمینال ها
Follow & First
لیست کلوژرها
انجام عملیات پارز مرحله به مرحله
نمایش لیست توکن های صف تو هر لحظه
نمایش درخت پارز تو هر لحظه
تعریف فایل ها
سورس کد رو داخل فایل دانلودی گذاشتید یا فقط فایل اجرایی هست؟
سلام بلی سورس هم هست ، کلیه مواردی که در اختیارتون گذاشته میشه در توضیحات فایل نوشته شده ….