ورود

View Full Version : برنامه ای که دستورات یک فایلی متنی را بخواند و اجرا کند!



ali-5656
یک شنبه 26 آبان 1387, 07:47 صبح
سلام به دوستان عزیز...
خیلی جستجو کردم تو انجمن، اما چیزی که مدنظرم بود رو پیدا نکردم...
موضوع از این قراره که یک فایلی داریم به نام in.txt و سطر به سطر دستورات زیر در آن وجود دارد:

def x 3 5 یعنی یک عدد کسری به اسم x تعریف کند و مقدار ۳/۵ را در نظر بگیرد
add x y z یعنی x=y+z در نظر بگیرد
mult x y z یعنی x=y*z در نظر بگیرد
sub x y z یعنی x=y-z در نظر بگیرد
div x y z یعنی x=y/z در نظر بگیرد
print x یعنی مقدار x را چاپ کند
printd x یعنی مقدار x را به صورت double چاپ کند
حالا با این اوصاف، باید برنامه ای بنویسیم که دستورات این فایل رو خط به خط بخونه و اجرا کنه... به موارد زیر هم توجه داشته باشید:

برنامه حروف بزرگ و کوچیک حساس است.
آخرین خط دستورات end است.
اجزاء مختلف دستورات با یک فاصله جدا شده اند.
مقدار تابع موجود نیست اگر شی تعریف شده موجود نباشد.
دستور def برای یک متغییر دوبار نمیتواند تعریف شود.
حق استفاده از stl وجود ندارد.
ممنون می شم یک بررسی ای بکنید... منتظرم.

shask00l
یک شنبه 26 آبان 1387, 13:11 عصر
توی ولایت ما به این کار میگن طراحی مفسر . اگه تمام اون قوانینی که گفتی حتما باید رعایت بشه مجبوری برای آنالیز برنامه از درخت استفاده کنی. البته درخت کنترل شده . ولی اگه استاد زیادم حالیش نیست و همینجوری اینا رو گفته میتونی یه script engine برای این کار بنویسی که فقط دستور بگیره و اجرا کنه . تک تک . البته اینم کار زیاد ساده ای نیست ولی از اصولی نوشتن این برنامه خیلی راحت تره .

ali-5656
یک شنبه 26 آبان 1387, 17:04 عصر
خیلی ممنون از راهنمایی...
والا در مورد اینکه استاد چیزی بارش هست یا نه اطلاعی ندارم... پروژه ی خواهرم هست...
الان برای همین اسکریپت انجین امکانش هست یک راهنمایی ای بکنید.
بازم ممنون

ali-5656
دوشنبه 27 آبان 1387, 15:36 عصر
دوستان ِ عزیز کسی نیست که بتونه کمکی کنه؟! من یکم عجله دارم... شرمنده...

shask00l
دوشنبه 27 آبان 1387, 21:33 عصر
1 مثال کوچیک برات میزنم . خودت بقیشو بگیر .
نکته اول توی طراحی engine اینه که بتونی دستورات نوشته شده توی فایل اسکریپت رو از هم جدا کنی. اطلاعات توشو استخراج کنی و ..... مثلا


print x

خوب برنامه باید بتونه این دو عنصر رو از هم جدا کنه و تشخیص بده که هرکدوم چی هستند . برای تشخیص کلمات کلیدی مشکلی وجود نداره . مشکل متغییر ها هستن که برای شناسایی و ثبتشون باید از لیست پیوندی یا آرایه استفاده کنی . وقتی که از هم جداشون کردی اونوقت کارت تقریبا تموم میشه . فقط میمونه اجرا کردن که اونم با توجه به کلمات کلیدی و داده های مرتبط باهاشون میتونی توی هر زبانی معادلشون رو پیدا کنی .

** همین جا اعلام میکنم این روش اصولی نیست و فقط بدرد پروژه پایان ترم . خواهر یا مشتری میخوره . تازه اگه استاد گیر باشه به همینم گیر میده **

انتهای توانایی های این روش پیاده سازی ساده ترین حالت if ویا حلقه for هستش . پس بیشتر از این ازش توقع نداشته باش .

shask00l
دوشنبه 27 آبان 1387, 21:40 عصر
آقا راستی 1 نکته جدیدی یادم اومد .. اینهمه ژانگولر برای چی ؟

خود دات نت بهت این اجازه رو میده که 1 مدل syntax جدید تعریف بکنی و به عنوان 1 زبان جدید ازش استفاده کنی. فکر کنم پروژه فارسی نت هم از همین روش استفاده کرده . همه امکانات دات نت رو هم داره . oop هم میتونی باهاش بنویسی . ازین چیزاییه که ... استاد فر میخوره .. البته اگه ازین استاد الکیا باشه .

ali-5656
سه شنبه 28 آبان 1387, 21:12 عصر
اوکی مرسی...
ببینم چیکار می تونم بکنم... فکر کنم اگر syntax تعریف کنم بهتر باشه...

shask00l
شنبه 02 آذر 1387, 09:15 صبح
http://www.codeproject.com/KB/codegen/ScriptEngine.aspx