طراحی و توسعه یک زبان برنامه نویسی

سلام دوستان وقت بخیر

من حدود چند ماهی میشه که در حال تحقیق و جستجو در مورد چگونگی و مراحل و اصول طراحی یک زبان برنامه نویسی مثل زبان های مطرح مثلا پایتون و جاوا و ... هستم که تاحالا به جوابی نرسیدم. 

میخواستم بدونم که اگر کسی در این زمینه اطلاعات داره ممنون میشم در این تاپیک مورد بحث قرار بده تا من ودیگران هم استفاده کنن

نحوه استفاده از معماری میکروسرویس و ارتباطش با این بحث 

اطلاعاتی مثل اینکه مراحل ساخت زبان جدید چیه 
با چه زبانی مینویسن و چه دانشی میخواد و اگر خودتون نوشتید لطفا مطرح کنید 

ممنون میشم شرکت کنید در این بحث 😊

پاسخ ها

sokanacademy forum
کاربر سکان آکادمی 5 سال پیش

با سلام.

تنها زبانی که کامپیوتر می تونه دستورات اون رو اجرا کنه زبان ماشین هست که یک سری اعداد صفر و یک هستند. پس زبانی سطح بالایی که شما می نویسید در نهایت باید به زبان ماشین تبدیل بشه. ابزاری که این کار رو انجام میده یک برنامه هست که مترجم نام داره که می تونه به صورت کامپایلری - مفسری یا هیبریدی (ترکیبی از کامپایلر و مفسر) طراحی و پیاده سازی بشه.

کامپایلر: کل کدهای سطح بالا رو یکجا به زبان ماشین تبدیل میکنه. و این کدها توسط سی پی یو اجرا میشه

مفسر: خط به خط کدها رو به زبان ماشین تبدیل میکنه و سی پی یو خط تبدیل شده رو اجرا می کنه

ترکیبی: یک کامپایلر کدهای سطح بالا رو به یک سری کدها که شبیه زبان اسمبلی هست تبدیل می کنه (کد میانی یا بایت کد) و این کدها توسط یک ماشین مجازی(مفسر)‌ تفسیر و اجرا میشه. حالا روی هر سیستمی که این ماشین مجازی باشه کدهای زبان سطح بالا قابل اجرا هست.

در طراحی زبان برنامه نویسی از زبانهای سیستمی استفاده میشه. این زبانها مستقیما می تونن با سخت افزار ارتباط برقرار کنن. از جمله این زبانها می توان به C, C++, Rust, Ocaml اشاره کرد.

با استفاده از این زبانها هسته زبان سطح بالا پیاده سازی میشه و سپس با استفاده از خود زبان سطح بالا زبان توسعه داده میشه.

مراحل ابتدایی طراحی یک زبان برنامه نویسی می توان به شکل زیر باشد:

۱. شما ابتدا یک فایل دارید که شما کدهای زبان سطح بالا هست

۲. این کدها توسط یک برنامه ای یک برنامه ای به نام Lexer پردازش می شوند و ساختاری تولید می کنند که Token نام دارد.

۳. توکن ها را برنامه ای به نام Paser بررسی می کند و ساختار دیگری به نام AST تولید می کند

۴. AST را یک کامپایلر به زبان ماشین تبدیل می کند.

می توان کاری کرد که کامپایلر کد را به جای  اینکه به زبان ماشین تبدیل کند به بایت کد جاوا (یا بایت کد هر زبان دیگری) تبدیل کند و سپس این بایت کد توسط ماشین مجازی جاوا (یا ماشین مجازی هر زبان دیگری) به کد ماشین تبدیل شود. به این طریق می توان زحمت تبدیل AST به زبان ماشین را متحمل نشد.

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

sokanacademy forum
کاربر سکان آکادمی 5 سال پیش

سلام واقعا خیلی ممنونم که وقت گزاشتید و پاسخ مفیدی نوشتید 

سوال من این هست که تئوری هارو میدونم ولی بحث پیاده سازیش رو مد نظرم هست که با چه منبعی میشه شروع کرد به پیاده سازی زبان 

اگر که آموزشی یا مطلبی هست ممنون میشم لطف کنید یا اگر خودتون تجربه دارید😃

sokanacademy forum
کاربر سکان آکادمی 5 سال پیش

برای طراحی یک زبان برای jvm از این منبع استفاده کنید http://jakubdziworski.github.io/enkel/2016/03/10/enkel_first.html

برای پیاده سازی یک زبان ک به صورت native ب زبان ماشین تبدیل بشه می تونید از LLVM  استفاده کنید کافی سرچ کنید 

How to create llvm based language

sokanacademy forum
کاربر سکان آکادمی 5 سال پیش

پروژه درس کامپایلر من یه پروژه ای بودش که با ++C نوشته بودم ، در واقع یه پارسر بودش که توی لایه منطق یه سری قانون واسش تعریف کرده بودم ، مثلا ته هر کد به جای ';' باید '.' میزاشتی ، توی حلقه به جای براکت باید از کلمه کلیدی begin end استفاده میشد و ... ، سینتکس با ++C تفاوت داشت ولی نهایتا بعد از کامپایل تبدیل میشد به C ، چیزای دیگه ای هم بهش اضافه کردم مثل I/O ، هر چند در وسعت کوچیک و آماتور، به نظرم اول مطالبی مثل درخت اشتقاق، پارسر ، کامپایلر و... رو بخون

online-support-icon