PDA

View Full Version : سوال: چگونگی parse کردن توسط برنامه



Elena7
سه شنبه 17 اسفند 1389, 13:54 عصر
سلام دوستان.
من یک برنامه با ++c می خوام که یک رشته ورودی رو بگیره و تشخیص بده که هر کلمه چه نقشی داره. مثلا عدده یا اپراتور منطقیه یا شناسه است و ...
برای این کار می دونم که باید رشته رو توی یک آرایه بریزم بعد دونه دونه هر کلمه رو توی یک فایل.
ولی نمی تونم پیاده سازیش کنم. یعنی اینکه چطوری جلو برم و این که با blank چکار کنم.
کسی می تونه کمکم کنه؟! :افسرده:

jooker
سه شنبه 17 اسفند 1389, 18:59 عصر
با سلام.

برای اینکار باید مبحث طراحی کامپایلر و نظریه زبانها رو دنبال کنی. به اینکار میگن تشخیص توکن ها که مرحله اول تو پیاده سازی کامپایلر محسوب میشه. این کار رو میتونی هم به صورت دستی پیاده سازی کنی هم به صورت خودکار توسط ابزار lex. برای پیاده سازی دستی اول باید برای توکنهایی که میخوای تشخیص بدی یه ماشین متناهی رسم کنی وبعد اون ماشین رو تبدیل به کد کنی. اگه در مورد نظریه زبان چیزی بلدی بگو تا راهنماییت کنم ولی اگه نه حتما در مورد نظریه زبان ها و ماشینها مطالعه کن(منبع برای نظریه: نظریه زبانها و ماشینها پیتر لینز)

ولی برای پیاده سازی خودکار باید با عبارات منظم آشنا باشی. روش کار هم به این صورته که اول باید عبارات منظم رو تو یه فایل متنی طبق سینتکس ابزار lex بنویسی و بدی به ابزاذ lex تا اون کد c رو برا تولید کنه.

جمع بندی: پیاده سازی دستی سخته و کار زیادی ازت میبره ولی روش lex سادست ولی کدی که این ابزار برات تولید میکنه اصلا خوانایی نداره ولی درست عمل میکنه.

بعد از تصمیم گیری در مورد پیاده سازی دستی یا خودکار اطلاع بده تا اگه کمکی از دستم بر بیاد...

ماشین متناهی برای تشخیص شناسه در زبان پاسکال

Elena7
سه شنبه 17 اسفند 1389, 19:55 عصر
من اصلا با lex آشنایی ندارم. دیاگرام رو کشیدم. کد کردنش رو بلد نیستم. اونطوری که بالا گفتم اشتباهه؟؟

jooker
سه شنبه 17 اسفند 1389, 20:54 عصر
کلا روشت اشتباهه. حتما باید از دیاگرام یا عبارات منظم برای پیاده سازی استفاده کنی. مگر اینکه بخوای یه شناسه و عملگر تشخیص بدی که روش خودت با یه کم اصلاح جواب میده ولی برای تشخیص توکنهای زیاد باید از روش دیاگرام استفاده کنی. اگه میتونی ماشین متناهی رو بخونی بگو تا کمکت کنم وگرنه برو یاد بگیر بعد

تا بعد...