معرفي دو ابزار توليد تحليلگر لغوي و تحليلگر نحوي
از هنگامي كه تحليگر هاي لغوي و تجزيه كننده ها با دست نوشته مي شدند ، ]كم كم و ناخودآگاه[ تحليلگرهاي لغوي و تجزيه-كننده ها به طراحي يكساني رسيدند و طراحان فهميدند كه آنها را مي توان با دادن شرحي از رفتار مورد نظرشان ، به طور خودكار توليد كرد . نمونه اي از اين ابزارهاي خودكار كه برنامه نويسان را از كار خسته كننده ي نوشتن]دستي[ تحليلگر لغوي يا تجزيه كننده ، آسوده می کنند در زیر معرفی شده اند .
ابزار توليد کننده تحليلگر لغوي:
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… در مجموع 74 صفحه
1. گزارش Lex و Yacc – هفت صفحه
2. معرفی LEX و تعامل آن با YACC همراه با مثال – 36 صفحه
3. عبارت منظم زبان های برنامه نویسی – سه صفحه
4. توضیح Lex – یک صفحه
5. مکانیزم کار کامپایلر – هشت صفحه
6. معرفي ابزارهای مولد تحليلگر لغوي و تحليلگر نحوي – 21 صفحه
——————————————————————————-
پروژه آماده کامپایلر : اسکنر زبان سی – C Scanner
——————————————————————————-
پروژه آماده کامپایلر : پارسر زبان سی – C Parser
——————————————————————————-
پروژه آماده کد سی شارپ اسکنر و پارسر زبان نمونه C
کد سی شارپ زبان نمونه C
قابلیت های کد سی شارپ پیاده سازی شده:
گزارش خطا
انتخاب عملی مورد نظر زمان برخورد با ابهام ها با پرسیدن از کاربر
نمایش ترمینال ها
نمایش گرامر
نمایش غیر ترمینال ها
Follow & First
لیست کلوژرها
انجام عملیات پارز مرحله به مرحله
نمایش لیست توکن های صف تو هر لحظه
نمایش درخت پارز تو هر لحظه
تعریف فایل ها
سورس کد رو داخل فایل دانلودی گذاشتید یا فقط فایل اجرایی هست؟
سلام بلی سورس هم هست ، کلیه مواردی که در اختیارتون گذاشته میشه در توضیحات فایل نوشته شده ….