Вовсе не Кабек

Пользователь

Регистрация: 12.05.2020

Сообщения: 333

Рейтинг: 51

Нарушения: 100

Вовсе не Кабек

Регистрация: 12.05.2020

Сообщения: 333

Рейтинг: 51

Нарушения: 100

В этом семаке у меня курсач - написать компилятор на С++ для какого-нибудь другого компилируемого ЯП(я выбрал golang)

Собственно, сижу пишу его, но почему то не могу найти нигде примеров самописных компиляторовHAhaa.png

Вроде разобрался как писать лексер и парсер, но чет генератор кода на ASSэмблере меня пугаетroflanLico.png

Собственно, мб кто знает, где посмотреть примеры самописных компилей? Или годный гайд как это написать?

linkin sphere

Пользователь

Регистрация: 10.07.2019

Сообщения: 278

Рейтинг: 23

linkin sphere

Регистрация: 10.07.2019

Сообщения: 278

Рейтинг: 23

img

Till_Its_Gone

Пользователь

Регистрация: 14.04.2020

Сообщения: 562

Рейтинг: -2

Нарушения: 100

Till_Its_Gone

Регистрация: 14.04.2020

Сообщения: 562

Рейтинг: -2

Нарушения: 100

Ничеси)00

У меня на втором курсе тоже был больной препод(в хорошем смысле), он нас затролил и ласт задание на экзе дал написать свою ОС)

при том что кроме C#, Java мы ничего не учили)

Вовсе не Кабек

Пользователь

Регистрация: 12.05.2020

Сообщения: 333

Рейтинг: 51

Нарушения: 100

Вовсе не Кабек

Регистрация: 12.05.2020

Сообщения: 333

Рейтинг: 51

Нарушения: 100

linkin sphere сказал(а):

Нажмите, чтобы раскрыть...

Спс

Till_Its_Gone сказал(а):

Ничеси)00

У меня на втором курсе тоже был больной препод(в хорошем смысле), он нас затролил и ласт задание на экзе дал написать свою ОС)

при том что кроме C#, Java мы ничего не учили)

Нажмите, чтобы раскрыть...

Самый рофл, что препод нам ничего не объяснял, сказал "да это изи"

Kirmina

Пользователь

Регистрация: 03.01.2015

Сообщения: 27815

Рейтинг: 4846

Kirmina

Регистрация: 03.01.2015

Сообщения: 27815

Рейтинг: 4846

Till_Its_Gone сказал(а):

Ничеси)00

У меня на втором курсе тоже был больной препод(в хорошем смысле), он нас затролил и ласт задание на экзе дал написать свою ОС)

при том что кроме C#, Java мы ничего не учили)

Нажмите, чтобы раскрыть...

а мой курсач во втором семаке был сайтом, который я благополучно взял с шаблона и вставвил свой текст с кортинками 

изи защита на 95 баллов

Вовсе не Кабек

Пользователь

Регистрация: 12.05.2020

Сообщения: 333

Рейтинг: 51

Нарушения: 100

Вовсе не Кабек

Регистрация: 12.05.2020

Сообщения: 333

Рейтинг: 51

Нарушения: 100

Kirmina сказал(а):

а мой курсач во втором семаке был сайтом, который я благополучно взял с шаблона и вставвил свой текст с кортинками 

изи защита на 95 баллов

poppy.png?1574587168

Нажмите, чтобы раскрыть...

Ну я сам самостоятельно учу веб, потому что нравится. А тут дали вот это с 0 объяснений

Till_Its_Gone

Пользователь

Регистрация: 14.04.2020

Сообщения: 562

Рейтинг: -2

Нарушения: 100

Till_Its_Gone

Регистрация: 14.04.2020

Сообщения: 562

Рейтинг: -2

Нарушения: 100

Вовсе не Кабек сказал(а):

Ну я сам самостоятельно учу веб, потому что нравится. А тут дали вот это с 0 объясненийFeelsClownMan.png?1552738440

Нажмите, чтобы раскрыть...

Так забей) Только отбитые вникают особо в универские задания) 

Офк, если тебе интересно, то можешь что-то почитать, мне как-то давали книжку про создание языков на lisp, потому что было интересно как это работает. 

Вовсе не Кабек

Пользователь

Регистрация: 12.05.2020

Сообщения: 333

Рейтинг: 51

Нарушения: 100

Вовсе не Кабек

Регистрация: 12.05.2020

Сообщения: 333

Рейтинг: 51

Нарушения: 100

Till_Its_Gone сказал(а):

 

Так забей) Только отбитые вникают особо в универские задания) 

Офк, если тебе интересно, то можешь что-то почитать, мне как-то давали книжку про создание языков на lisp, потому что было интересно как это работает. 

Нажмите, чтобы раскрыть...

Числанут же

Нигде не могу найти примеры самописных компилей, как будто их пишут только у нас

Till_Its_Gone

Пользователь

Регистрация: 14.04.2020

Сообщения: 562

Рейтинг: -2

Нарушения: 100

Till_Its_Gone

Регистрация: 14.04.2020

Сообщения: 562

Рейтинг: -2

Нарушения: 100

Вовсе не Кабек сказал(а):

Числанут жеHAhaa.png

Нигде не могу найти примеры самописных компилей, как будто их пишут только у насroflanLico.png

Нажмите, чтобы раскрыть...

ну так глянь тут

https://github.com/search?l=C%2B%2B&o=desc&q=compiler&s=updated&type=Repositories

nanocop

Пользователь

Регистрация: 27.08.2014

Сообщения: 218

Рейтинг: 68

nanocop

Регистрация: 27.08.2014

Сообщения: 218

Рейтинг: 68

Вовсе не Кабек сказал(а):

В этом семаке у меня курсач - написать компилятор на С++ для какого-нибудь другого компилируемого ЯП(я выбрал golang)

Собственно, сижу пишу его, но почему то не могу найти нигде примеров самописных компиляторовHAhaa.png

Вроде разобрался как писать лексер и парсер, но чет генератор кода на ASSэмблере меня пугаетroflanLico.png

Собственно, мб кто знает, где посмотреть примеры самописных компилей? Или годный гайд как это написать?

Нажмите, чтобы раскрыть...

может он надеется что ты спишешь у кого-то

Вовсе не Кабек

Пользователь

Регистрация: 12.05.2020

Сообщения: 333

Рейтинг: 51

Нарушения: 100

Вовсе не Кабек

Регистрация: 12.05.2020

Сообщения: 333

Рейтинг: 51

Нарушения: 100

Till_Its_Gone сказал(а):
Нажмите, чтобы раскрыть...

Спс, сейчас чекну

Вовсе не Кабек

Пользователь

Регистрация: 12.05.2020

Сообщения: 333

Рейтинг: 51

Нарушения: 100

Вовсе не Кабек

Регистрация: 12.05.2020

Сообщения: 333

Рейтинг: 51

Нарушения: 100

nanocop сказал(а):

может он надеется что ты спишешь у кого-то

Нажмите, чтобы раскрыть...

Не откуда списывать

Я думал, мейби я один такой тупой, а никто в группе не шарит как это делать

raven_cler

Пользователь

Регистрация: 10.04.2014

Сообщения: 587

Рейтинг: 103

raven_cler

Регистрация: 10.04.2014

Сообщения: 587

Рейтинг: 103

Вовсе не Кабек сказал(а):

В этом семаке у меня курсач - написать компилятор на С++ для какого-нибудь другого компилируемого ЯП(я выбрал golang)

Собственно, сижу пишу его, но почему то не могу найти нигде примеров самописных компиляторовHAhaa.png

Вроде разобрался как писать лексер и парсер, но чет генератор кода на ASSэмблере меня пугаетroflanLico.png

Собственно, мб кто знает, где посмотреть примеры самописных компилей? Или годный гайд как это написать?

Нажмите, чтобы раскрыть...

В книге "Lisp in small pieces" есть целая глава, посвящённая реализации компиляторов, так же как в классическом учебнике SICP последняя глава посвящена компиляторам. Они про scheme, но он настолько простой, что можно легко разобраться в основных алгоритмах. Обе книги переведены на русский.

 

Но конечно же самой главной работой здесь была, есть и будет книга "Компиляторы: принципы, технологии и инструменты", так же известная как "книга дракона". Это то, что можно местами пролистать, процитировать, указать в списке литературы.

 

Теперь что касается основных шагов, которые нужно выполнить.

 

Я не уверен, каким компилятором и операционной системой ты пользуешься, но для gcc есть флаг компиляции -S, который позволяет компилировать не в исполняемый файл, а в ассемблерный код. Подозреваю, что в gccgo он тоже есть. Эта штука тебе очень пригодится, чтобы видеть, что генерирует уже готовый компилятор.

 

Далее тебе понадобится написать свой лексер(или токенизатор), анализатор и непосредственно генератор кода. 

 

Токенизатор считывает файл построчно и разбивает строку на токены, т.е. некие языковые единицы, такие как открывающие и закрывающие скобки, арифметические операторы, операторы присваивания, ключевые слова(типа return, func и т.д.), числа, строки(и соответственно кавычки).

 

Потом анализатор преобразует токены в так называемое AST-дерево, чаще всего для его реализации используют метод рекурсивного спуска(вот пример реализации): https://ru.wikibooks.org/wiki/%D0%A0%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%BE%D0%B2/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B3%D0%BE_%D1%81%D0%BF%D1%83%D1%81%D0%BA%D0%B0

 

Ну и наконец генератор ассемблера. 

 

Примеры реализации: 

 

https://rosettacode.org/wiki/Compiler/code_generator

 

Если тебе нужны примеры именно исходников, и проще учиться по ним, вот тебе действительно маленький и простой компилятор C стандарта 99-го года:

https://github.com/Wilfred/babyc

 

А, соре, невнимательно прочитал тему. Но в общем в любом случае пример компилятора есть выше.