لینک SourceForge ـه پروژه ... https://sourceforge.net/projects/hypersia/
Printable View
لینک SourceForge ـه پروژه ... https://sourceforge.net/projects/hypersia/
من قبلا گفته بودم هر کاری از دستم بر بیاد انجام میدم ...http://freesmile.ir/smiles/890621_LaieA_024.gif
امروز یه مقداری وقت داشتم ... گفتم مقالاتی که در مورد کامپایلر هستش رو جستجو کنم و اینجا لینکشون رو بزارم ... شاید یه کمکی باشه به دوستان .. من که در حد شما نیستم http://freesmile.ir/smiles/765521_LaieA_058.gif
http://bookos.org/book/462272/d9af86
http://bookos.org/book/463739/3a23e3
http://bookos.org/book/490317/b8e1dc
http://bookos.org/book/491311/d805e2
http://bookos.org/book/495674/21e768
http://bookos.org/book/496162/d08136
http://bookos.org/book/501264/17eb1a
http://bookos.org/book/507417/08135c
http://bookos.org/book/507451/40f78c
http://bookos.org/book/507481/d78386
http://bookos.org/book/514999/755de4
http://bookos.org/book/531455/3dde16
http://bookos.org/book/531949/40e8e9
Compiler design: theory, tools, and examples
Algorithms for compiler design
Compilers and compiler generators: an introduction with C++
A basic course on compiler principles
قابل شما رو هم نداره http://freesmile.ir/smiles/416721_390421_Laie_81.gif
اینجا هم آقای شاهین عشایری لطف کردن یک پست در مورد سورس کامپایلر Free Pascal گذاشتن که بد نیست یه نگاهی بهش بندازید ... می تونیم روی سورس این کامپایلر نگاه کنیم و چیزای زیادی ازش یاد بگیریم
لینک دانلود کد کامپایلر Free Pascal
سلام بچه ها!
قبل این که درگیر قسمت طراحی خود کامپایلر بشیم می تونیم (به نظرم بهتره) یه سری ماکرو (لینک) بنویسیم، که در آینده دقیقا بهتون می گم چه ماکروهایی...
>>> یه سری برای تبدیل انواع مختلف به هم هست... مثلا تبدیل Integer به Byte...
- - - باید ببینیم Type هامون چیا هستن؟ (لینک)
- - - بعد ببینیم چه طوری با Assembly به هم تبدیل کنیم اونا رو... من قبلا رو این موضوع کار احتمالا کردم...
- - - فعلا قراره حتما هر متغیری تعریف بشه قبل از استفاده... اما احتمالا در آینده متغیر هایی که تعریف نشدن رو از نوع Variant (لینک) در نظر می گیریم...
- - - نوع String در زبانمون رو باید مشخص کنیم و به خوبی ساختارش رو درک کنیم... (لینک)
- - - توجه کنید دیگه الان اون قدیما نیست! واحد ممیز شناور هست که برای کار با اعداد اعشاری به کمکمون می آد... (لینک) واحد های دیگه ای هم هست... از این ها هم مطلع بشید بد نیست! (لینک) (لینک)
>>> یه سری برای جمع، تفریق، ضرب، تقسیم و یا اعمال دیگه ی هر نوع هست... مثل جمع دو Integer...
- - - خوب ماکروی عملگر ها رو بین انواع هم نوع تعریف می کنیم...
- - - بعدا می تونیم از تبدیل انواع استفاده کنیم...
- - - باید رفتار زبان در مقابل انواع رو تعیین کنیم... Weak-Typed بودن (لینک) و این جور چیزا...
>>> یه سری برای تخصیص حافظه ی پویا و کار با حافظه... (لینک)
- - - مسائل مربوط به حافظه در زبان های سطح بالا رو باید معادلش رو در Assembly درک کنید...
- - - مثلا چیا تو Stack هستن... چیا تو Heap... (لینک)
>>> برای آرایه ها...
- - - ساختار آرایه ها چه جوری باشه؟
- - - Redim کردن چه جوریه ساز و کارش؟
- - - نحوه ی کار Preserve...
>>> یه سری مربوط به فراخوانی ها...
- - - قرارداد های فراخوانی رو مطالعه کنید... (لینک) (لینک)
>>> ...
این ماکرو ها رو می نویسیم که بعدا موقع تبدیل سورس کد، خیلی راحت تر کدهامون رو به کدهای اسمبلی ای تبدیل کنیم که از این ماکرو ها توشون استفاده شده...
فکر کنم با انجام این کار، کارمون در حد ساختن مفسرها ساده می شه!
تازه می شه پروژه رو از دو جهت هم زمان پیگیری کرد... یکی از اول به آخر یعنی همون مسائل مربوط به تحلیلگر لغوی و تجزیه گر و این ها... یکی از آخر به اول یعنی نوشتن ماکرو های مورد نیازمون برای راحتی در موقعی که داره کد Asm تولید می شه...
ضمنا من یه مقدار وقت آزادم کم تره امسال... ولی فکر نکنید پیگیر پروژه نیستم...
همچنین دارم قسمت دوم آموزش برنامه نویسی Win32 با MASM رو ترجمه می کنم که به امید خدا در تاپیک مربوطه قرار می دم... اما هم وقت کم می آرم، هم حوصله می خواد!...
موفق باشید!
سلام
PAX Compiler از زبان visual basic پشتیبانی می کنه و سینتکس پشتیبانی شده توسط اون چیزی شبیه VB.NET است. الان دارم یکسری تست بر روی این محصول انجام میدم تا ببینم چه نقاط مثبت و چه ضعفهایی داره. به نظر من از قسمتهای مختلف این محصول میشه ایده های خیلی خوبی گرفت. کد این کامپایلر هم در اینترنت وجود داره. این هم سایت سازنده:
http://www.paxcompiler.com/
نتایج حاصل از این تستها رو بعداً در همین تاپیک قرار خواهم داد.
در ضمن کار ساخت Parser رو هم شروع کردم که زمانی که به یه جای قابل قبولی رسید با توضیحات کامل قرار میدم که دوستان هم در توسعه اون مشارکت کنند.
به عنوان معرفی یک منبع فوق العاده برای ساخت کامپایلر توصیه می کنم که سایت زیر مورد مطالعه قرار بگیرد:
http://llvm.org/
یکی از مزایای خوب llvm این است که backend های آماده ای برای آن وجود دارد که باعث می شود که زیاد با اسمبلی درگیر نباشیم. برای ساخت کامپایلر با LLVM کافی است که کدهای سطح بالا را به کدهای IR تبدیل کنیم. IR تقریباً چیزی شبیه به دستورات زبان C است و نیازی نیست که خودمان نوع عای داده ساده را پیاده سازی کنیم، چرا که این موارد از قبل پیاده سازی شده اند. در مورد llvm فیلمهای آموزشی زیادی را می توان در youtube پیدا کرد.
موفق باشید...
نقل قول:
همچنین دارم قسمت دوم آموزش برنامه نویسی Win32 با MASM رو ترجمه می کنم که به امید خدا در تاپیک مربوطه قرار می دم
این Tut هم بد نیست خیلی جمع و جوره :کف:
خیلی شبیه ایکون ویژوال استودیو نیست ؟
ممنون ... لطف داریدنقل قول:
ولی خوشم اومد با سلیقه ای داداش.:چشمک:
قربونت مسعود جان ... لطف داری...نقل قول:
عاشق سبکتم!
الکی شلوغ پلوغ نیست!
استراتژی گوگل و جدیدا مایکروسافت...
نه اون حلقه هاش به هم وصل شده ... حلقه هاش شبیه بیضی هستش ... جدیدا هم که دیگه اصن حلقه نیست ...! ( مال 2012 رو میگم )
صفه قبلو نگاه کردم حدودا پیش از 28 تا پست پاک شده. میدون جنگه مگه اینجا:قهقهه:
حالا که قراره ی زبانی بسازید اخه چرا ب اسم وی بی چرا تقلید از وی بی
بهتر نیست خودتون ی سینتکس درست کنید
حالا هرچقدر هم زبان ضعیف باشه مهم نیست ولی به نظر من سعی کنید یه ایده نو بدین
نه این که کپی کنید
کپی نمیکنیم عبدالله جان ...
اگه آیکون برنامه رو دیدی و از روی آیکون اینو میگی .. باید بگم آیکون هیچ ربطی به آیکون VS نداره و من اصلا قصد نداشتم تقلید کنم ... آیکون رو اگه دقت کنی بیشتر شبیه زنجیر هستش تا شبیه علامت بینهایت ( آیکون VS شبیه علامت بینهایت هستش ) ...
زنجیر هم معنای نماد نظم و پیوستگی و ... هستش
این کامپایلر داره از صفر نوشته میشه ... و قصد نداریم از VB6 تقلید کنیم ... شاید سینتکسش شبیه VB6 باشه ... ولی تقلید نیست ...
دلیل شباهت سینتکس هم اینه که عده ی زیادی با VB6 کار کردن و سینتکسش رو دوست دارن ... نمیشه بخوایم به یه سینتکس متفاوت مجبورشون کنیم ... پس هر چه سینتکس شبیه به VB6 باشه بهتره ...
ولی امکاناتی که VB6 نداره رو میخوایم بهش اضافه کنیم...
موفق باشید
در واقع بهتره کلمه vb6 رو به کار نبرید و بگید که زبانی از خانواده بیسیک هست.
سلام!
حرفتو قبول دارم در مورد ایده ...
البته نباید گفت این که شبیه VB6 هست یعنی کپیه... چه بسا VB6 یه نمونه ی ضعیف از این بشه... :لبخند:
اما در مورد ایده، خیلی دوست دارم فعلا که اول کار هستیم ایده هایی که جالبن و راحت تر هم پیاده سازی می شن بدین...
خیلی وقتا موقع برنامه نویسی یه سری ایده ها به ذهنم می رسه... مثلا اینا...
^ پشتیبانی داخلی از اعداد مختلط (Complex) و Hyper Complex که اعدادی فراتر از اعداد مختلط هستن... مثل Quaternion ها، Octonion ها و Sedenion ها...
^ پشتیبانی داخلی از Hyper Operator ها، مثلا Tetration که عملگر بعد از توان هست یا Pentation که عملگر بعد از Tetration هست... این جا رو ببینید...
^ شاید در فازهای بعدی پروژه، ارائه ی روشی ساده برای طراحی GUI با HyperTML5...!
^ قابلیت تعریف Type جدید برای متغیرهای عددی با دقت و اندازه ی دلخواه در 3 سوت...!
...
اینم لوگوی تیممون ... http://freesmile.ir/smiles/373317_yes2.gif
البته با مخلفات گذاشتم .. گفتم شاید براتون جالب باشه ... http://freesmile.ir/smiles/197317_blush2.gif
http://img.majidonline.com/pic/294831/bita.png
الان چه کسانی قراره در این پروژه کار کنن؟ به چی تسلط دارند؟ آیا دوستان با فازهای کامپایلر آشنایی دارند؟
راستش اگه وقت داشته باشم و تعداد افراد گروه به اندازه کافی باشه , خوشحال میشم فعالیت کنم. البته اگه وقت کنم.
خودم با بخشهای مربوط به backend و frontend و زبانهای مستقل از متن یک آشنایی نسبی دارم. البته متاسفانه سرم خیلی شلوغه.
فعلا که بنده هستم ... آقا مسعود ( IamOverlord ) ... آقای شاهین عشایری هم که از سواد زیادی در زمینه ی کامپایلر برخوردار هستند به تازگی بهمون پیوستن ...
همینطور ho3ein.3ven و m.4.r.m که تو کار زبان اسمبلی هستند ... البته جا داره از آقا بهروز عباسی هم تشکر کنیم که داره بهمون کمک میکنه ...
شما هم خوشحال میشیم همکاری کنید ... هر چند کم !
نه ما قرار نیست از سینتکس basic استفاده کنیم ... شاید سینتکس ما شبیه VB6 بشه .. ولی صرفاً از سینتکس بیسیک استفاده نمی کنیم .. یه جور الهام گرفتن هستش .. وگرنه احتمال داره یه جاهایی از سینتکس رو از ++C الهام بگیریم .. یا مثلا از دلفی ... چون اینا هم از محبوبیت بالایی برخوردار هستند ... میشه برای یه سینتکس خوب ازشون ایده گرفت
کاربرد این اعداد خیلی زیاده.(مختلط)
از کشف بوزون هیگز بگیر تا مدار های کامپیوتر.
ولی مجموعه ی اعداد Sedenions جواب معادلات خیلی خیلی پیچده ای رو تو خودش داره.
کاربرد این مجوعه ی Sedenions تازه داره رو میشه.
این مجموعه اینقدر پیچیدست که مایکروسافت 3 سال داره رو یه هدر فایل برای این اعداد کار میکنه.(البته من خودم شک دارم که راست باشه)
ما تو ریاضی با مجمو عه های اعداد ریاضی آشنایی داریم ترتیبش طبق ویکی اینه:
Real numbers ----> Complex numbers----> Quaternions ----> Octonions ----> Sedenions
درضمن عملگر Tetration چیزی به جز توان نیست.درواقع توان های تو در تو هست که پشتیبانی نمیخواد.
یه تابع ساده میتونه این کار رو انجام بده.
البته فکر میکنم در زمینه طراحی کامپایلر , آشنایی با زبانهای مستقل از متن و در کل نظریه زبانها و ماشینها از همه موارد مهمتر هست. یک نگاهی به این تاپیک بندازید بد نیست:
https://barnamenevis.org/showthread.p...سی-جدید
اینجا بنده و IamOverlord عزیز خیلی تلاش کردیم تا دوستان دیگری رو که با این موارد آشنا هستن دعوت کنیم تا در پروژه سهیم باشن ولی ظاهرا کسی نبود و بنده مجبور شدم تقریبا به تنهایی پیاده سازی پروژه رو پیش ببرم که واقعا غیر ممکن بود. لطفا دوستان واضح مشخص کنن که آیا با این موارد آشنایی دارن؟
شاید نتونیم تو این زمینه مثل خیلی ها کد نویسی حرفه ای نداشته باشیم اما لاقل چند تا ذهن بهتر از یک ذهن کار می کنه ایده و ... در نوشتن کد های راحت تر میتونیم کمک حال باشیم . ما می توانیم
این سایت هم برای شروع بد نیست
http://compilers.iecc.com/crenshaw/
به صورت پاسکل و دلفی کد هاشو نوشته اما تغییر دادنش و مفهومش سخت نیست
قصد نداری ولی میکنی:لبخندساده:
اتفاقا به نظرم اگه از این موارد پشتیبانی کنه خیلی خوب میشه.
اگه قرار باشه این زبان مثل زبان های دیگه باشه طرفدار آنچنانی پیدا نمیکنه. به نظرم باید چیزی داشته باشه که برنامه نویس ها رو جذب کنه.
مثلا regx که وی بی تقریبا نداره(یه عملگر like هست اونم که...)بعد تو مباحث کلاس باید از وی بی برتر باشه و مباحثی مثل extends,implements,abstract رو پشتیبانی کنه.
مواردی زیادی وجود داره ولی بحث کردن در مورد اینا یکم زوده.
آره منم با محسن موافقم ... الان شما بخوای یه پروژه با VB6 بنویسی ممکنه بعضی جا ها کم بیاره ... ولی مثلا دلفی خیلی بهتره و احتمال این که کم بیاری به مراتب خیلی کمتر هستش...
به همین خاطره که میگم شکل کلی سینتکس می تونه شبیه VB6 باشه ... ولی کلمات کلیدی ... امکانات و... میتونن یه چیزی حداقل در حد دلفی باشن ...
---------
من به یه نفر از دوستانی هم که توی همین سایت می شناختم پیام دادم .. امیدوارم باهامون همکاری کنن...
اضافه کردن inline assembly
الان خلاصه چی شد؟ با نظرات پراکنده دوستان که نمیشه روی کسی حساب کرد و پروژه رو شروع کرد. از روزی هم که تاپیک دوباره بالا اومده همش داره در مورد توجیه انجام این کار بحث میشه و به غیر از چند کار گرافیکی عالی جناب Mohammad Salehi ( که خیلی مهمه ولی مربوط میشه به مراحل نهایی کار ) کسی پروژه رو استارت نمیزنه. مطمئن باشید یک چنین تاپیک شلوغی به نتیجه نمیرسه. من یک پیشنهاد دارم. یک تاپیک جدید زده بشه در بخش open source و در اون افرادی که مایل هستند به طور جدی در پروژه شرکت کنن , اعلام آمادگی کنن و تخصص خودشون رو در هر کدوم از بخشهای مورد نیاز مشخص کنند. یعنی:
1- نظریه زبانها و ماشینها
2- فازهای کامپایلر
3- زبان اسمبلی برای backend
4- زبانی که کامپایلر قراره با اون نوشته بشه ( که ظاهرا vb6 هست )
بخش گرافیک هم که فکر میکنم Mohammad Salehi عزیز کافی باشه.
اینجوری اگه به اندازه کافی افراد فعال رو دور هم جمع کنیم, میتونیم با خیال راحت یک یا علی بگیم و پروژه رو استارت بزنیم.
البته یک مشکل دیگه ای هم هست , اینکه هنوز ماهیت زبان مشخص نیست تاپیک به عنوان توسعه vb ایجاد شده. بعضی از دوستان میگن قراره یک زبان جدید ایجاد بشه. بعضی میگن شبیه به vb باشه. البته این رو بدونید که ایجاد یک زبان جدید با syntax منحصر به فرد , اونقدر که فکر میکنید آسون نیست و کلی وقت میبره. مخصوصا اگه بخوایم استاندارد باشه.خلاصه این رو بدونید تا زیر و بم زبان رو مشخص نکنیم , کامپایلری هم وجود نداره و بهتره هر چه زودتر تکلیفش مشخص بشه. البته با مشورت همگی.
اینها فقط پیشنهاد بود ولی فکر نمیکنم غیر منطقی باشه!
در مورد تاپیک من این کار رو انجام دادم ... ولی تاپیک های اون بخش نیاز به تائید مدیر داره ... ظاهرا هنوز مدیر تائیدش نکرده ... حالا به آقای کرامتی پیام دادم ... ببینم تائید میکنه ...
اگه تائید کرد دیگه اینجا فعالیت نمی کنیم ... یه لینک میزاریم اینجا و تاپیک رو قفل می کنیم ...
توی اون تاپیک هم فقط بحث تخصصی و تبادل اطلاعات هستش ...
به احتمال زیاد VB6 نیست ...نقل قول:
4- زبانی که کامپایلر قراره با اون نوشته بشه ( که ظاهرا vb6 هست )
من یه Document Archive دارم ... توش یه سرچی کردم و مقالاتی که به درد میخوردن رو جدا کردم ...
می تونید دانلود کنید :
http://mssdh.xzn.ir/Programming%20Languages.zip
9.16 MB
یکیشون برای افرادی که چیزی از طراحی کامپایلر سر در نمیارن خیلی خوبه ... قشنگ توضیح داده
سلام دوستان!
در مورد اون عملگرها:
همون طور که می دونید اول می گیم جمع... بعد می رسیم به ضرب... و بعد توان...
خوب ضرب ساده تر نوشتن یه همچین چیزیه: a+a+...+a
...و توان ساده تر نوشتن یه همچین چیزی: a*a*...*a
خوب تا حالا به این فکر کرده بودید که آیا ریاضی دان ها به بعد از این فکر کردن یا نه؟! خوب نمی دونم شاید بگید بی کاریه!... حداقل برای من که مسئله ی جالبیه...
مثلا تویه زبان Fortran از ** برای توان استفاده می شه... ما هم می تونیم از همین ایده استفاده کنیم و عملگر جدیدمون رو به صورت ^^ نمایش بدیم...
a^^7=a^a^a^a^a^a^a
توجه کنید که اولویت توان از آخر به اول هست یعنی از راست به چپ... وگرنه اگه از اول به آخر توان ها رو حساب می کردیم که اصلا نیازی به تعریف عملگر جدید نبود و می شد این رو به عنوان معادلش رو نوشت: a^a^6
خوب به این ^^ که گفتم می گن Tetration یا Hyper4... و خیلی سریع رشد می کنه... مثلا 3^3 کجا و 3^^3 کجا...!
بعد از این هم با همین روشی که گفتم عملگر جدید پیدا می شه...
به Hyper0 هم فکر کنید! ++C رو یادتون هست؟
اصلا قبل از Hyper0 چیزی هست؟
می شه برای رسم فراکتال ها هم ازشون استفاده کرد...
ضمنا همون طور که منها مخالف جمع هست و تقسیم مخالف ضرب، اینا هم عملگر مخالف دارن... البته همون طور که برای توان، هم root داریم هم logarithm برای اینا هم دو تا داریم: super-root و super-logarithm...
مسائل جالبیه اگه دقت کنید...
در مورد اون اعداد:
به طور خلاصه یه عددی تعریف می شه که با نماد i نشون داده می شه و فرض می شه که اگه این عدد ضرب در خودش بشه، حاصل بشه منفی یک: i^2=-1
در حالت کلی اعداد مختلط به این شکل نشون داده می شن: a+i*b که a و b دو عدد حقیقی دلخواه هست...
که اتفاقا خیلی هم کاربرد دارن این اعداد مختلط...
حالا نکته ی جالبی که هست اینه که شما می تونی جذر هر عدد منفی ای رو حساب کنی! با یه تعریف ساده و جمع و جور...
حتی شما می تونی logarithm اعداد منفی رو هم حساب کنی! که این برای من بسیار جالب بود...
حوزه ی اعداد طبیعی نسبت به جمع بسته است، یعنی شما هر دو تا عدد طبیعی رو که جمع کنی حاصلش عدد طبیعی می شه... اما نسبت به تفریق بسته نیست...
ولی اعداد صحیح، هم نسبت به جمع بسته هستن هم نسبت به تفریق... اعداد صحیح نسبت به ضرب هم بسته هستن، اما نسبت به تقسیم دیگه بسته نیستن...
ولی اعداد گویا هم نسبت به جمع و تفریق بسته هستن هم نسبت به ضرب و تقسیم بسته هستن البته به شرطی که کاری که می کنیم تعریف شده باشه... منظورم همین تقسیم بر صفر هست...
ولی اعداد گویا نسبت به توان و رادیکال و لگاریتم بسته نیستن...
اما حوزه ی اعداد مختلط نسبت به همه ی اینایی که گفتم بسته هست! یعنی شما می خوای جمع بزن، لگاریتم بگیر، حتی سینوس و کسینوس رو حساب کن، ریشه ی یه عدد مختلط رو به فرجه ی یه عدد مختلط دیگه حساب کن،... حاصل عدد مختلط می مونه!
اما سوال جالب اینه که آیا حوزه ای بالا تر از اعداد مختلط هست؟ بله... و اتفاقا کاربرد هم دارن تو علم...
For this reason, quaternions are used in computer graphics,[11] computer vision, robotics, control theory, signal processing, attitude control, physics, bioinformatics, molecular dynamics, computer simulations, and orbital mechanics.Quaternion ها که چهارتایی هستن: a+b*i+c*j+d*k که i، j، k اجزاء موهومی هستن...
Octonion ها که هشت تایی هستن: a+b*e1+c*e2+d*e3+e*e4+f*e5+g*e6+h*e7
Sedenion ها که شانزده تایی هستن...
و خواص جالبی هم دارن! مثلا در Quaternion ها شما دیگه نمی تونی بگی لزوما a*b با b*a برابر هست...!
به ترتیب هر چی می ری جلوتر یه سری خاصیت از بین می ره... جالبه بدونید در حوزه ی Sedenion ها ممکنه دو عدد غیر صفر، حاصل ضربشون صفر بشه!
...
پشتیبانی داخلی از این چیزایی که گفتم جالبه... ضمن این که گفتم اینا کاربرد هم دارن...