میلاد جعفری

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

میلاد جعفری ۱۳۹۷/۱۱/۰۵ 133 مباحث عمومی برنامه‌نویسی

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

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

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

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

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

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

پاسخ‌ها به این تاپیک
saeed gholami
saeed gholamiبرنامه نویس و توسعه دهنده وب با پایتون
۱۳۹۷/۱۱/۲۰

با سلام.

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

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

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

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

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

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

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

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

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

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

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

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

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

میلاد جعفری
میلاد جعفریدولوپر استک فول و عاشق هستم :(
۱۳۹۷/۱۱/۲۰

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

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

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

در پاسخ به

saeed gholami
saeed gholamiبرنامه نویس و توسعه دهنده وب با پایتون
۱۳۹۷/۱۱/۲۴

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

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

How to create llvm based language

در پاسخ به