Складіть мову програмування з собою


10

Я студент інформатики. Я хочу створити власну мову програмування (Основна мова з кількома інструкціями).

Я знаю, як зробити синтаксичний аналізатор, я вже робив це в Perl. У статті я прочитав щось про компілятор, компілятор робиться сам по собі.

Наприклад, компілятор C написаний на C. Як це можливо? Я можу скласти свою мову, але не знаю, як я міг би її виконати? Будь-яка ідея?

Це справді гарне запитання, і я можу написати блог проекту.


Люди пояснили, як слід завантажуватися, але навіщо це робити? Немає причин, коли ви не можете скласти свою мову за допомогою компілятора, написаного на C, Perl або будь-якому іншому. Звичайно, було б непогано, щоб компілятор для вашої мови був написаний сам, але це було б багато роботи - вам доведеться написати щонайменше два компілятори, щоб отримати це (один у C / Perl / що завгодно, один у твоя мова).
Девід Річербі

Хм .. Я думаю, що я напишу свій перший компілятор на мові С та напишу друге мовою. Створити трохи мови програмування дуже цікаво, ми можемо вивчити багато інформатики
BaptisteL

Відповіді:


13

Хитрість полягає у завантаженні . Спочатку ви пишете компілятор для своєї мови (або його підмножини) якоюсь іншою мовою. Потім ви пишете компілятор для вашої мови (або великого підмножини тієї, з якою ви вже можете впоратись) вашою мовою. Ви використовуєте колишній компілятор для складання нового компілятора, а потім новий компілятор може компілювати себе.


Отже, я можу створити свій перший компілятор за допомогою C і наступного разу, коли я компілюю свій компілятор v2 з v1? Але є проблема, як я можу знати, що у компілятора немає жодних проблем? Мені потрібно перетворити свій вихідний код на асемблер? Або в іншому?
BaptisteL

2
Як я можу знати, що у компілятора немає жодних проблем? Більш загально, ви написали програму; як ти знаєш, що в ньому немає помилок? Ви цього не робите. Ви пишете кілька тестів і сподіваєтесь на краще. Чи потрібно конвертувати свій вихідний код у збірку? Точно ні. Ви можете довіряти компілятору C. Ви робите те саме, але збірка замінена на C (або будь-яку іншу мову на ваш вибір).
Yuval Filmus

Гаразд, я повинен довіряти своїм навичкам. ^ Я хотів попросити процес зробити компілятор. Я дійсно не розумію, що робити компілятор, синтаксичний та лексичний аналізатор, добре, але далі ??
BaptisteL

Потім ви генеруєте код. Якщо ви не хочете вникати в деталі створення машинного коду, ви завжди можете генерувати код якоюсь іншою мовою, скажімо, C-кодом, і використовувати зовнішній компілятор для компіляції цього в машинний код. (Або ви можете скористатись інтерпретованою мовою та запустити перекладача.)
Yuval Filmus

Hummm Ні Ні я не бажаю робити це так: My Language in enter -> Machine Code. Я не хочу перетворювати свою мову в іншу (те саме, що вперше складається) Це можливо?
BaptisteL

2

Компілятор, який може зібрати власні джерела, називається компілятором, що займається хостингом . Ранні укладачі були написані іншою мовою. Наприклад, перший компілятор С був, ймовірно, написаний в асемблері. Весь трюк у використанні колишнього компілятора нижчого рівня називається завантажувальним.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.