Видел парня на хабре. В 11 лет не каждый может такого достичь, как он, но все же.
Итак, вы хотите написать компилятор. Это не так сложно, как кажется(иначе не было бы такого количества языков).
- Понадобится выучить, что такое грамматики, формальные и регулярные языки, контекстно-свободные грамматики и так далее. Необходимо достаточно глубоко понимать, что это и для чего. Также нужны знания структур данных, ассемблера, паттернов проектирования.
- Для опыта необходимо посмотреть грамматики современных языков, благо, они есть в свободном доступе. Пример раз, пример 2
- На основе полученных знаний, а также опыта изучения грамматик существующих языков необходимо написать свою грамматику
- К этому моменту вы сильно подрастете, если не физически, то скиллом уж точно, поэтому заведите себе хобби или девушку, чтобы отвлекаться от этой дребедени, иначе сойдете с ума.
- На основе данной грамматики пишется на любом известном вам языке лексер и парсер, которые переводят эту грамматику в набор токенов(задача лексера), а парсер эти токены в Абстрактное Синтаксическое Дерево (Abstract Syntax Tree)
- На основе данного дерева вы можете проводить анализ кода, проверку на ошибки, оптимизации.
- Данное дерево мы можем трансформировать в другую форму. После чего на его основе сгенерировать код, который мы хотим получить.
- Крайне советую посмотреть исходники открытых компиляторов, например, Roslyn для шарпа или аналогов для других языков, чтобы посмотреть, как оно вообще работает.
В одиночку написать компилятор для языка высокого уровня достаточно сложно, поэтому советую выбрать язык, который вам нравится, но который вы хотели бы поменять, изучить теоретическую часть, а дальше идти на гитхаб к проекту компилятора для вашего языка и делать пулл-реквесты. Заодно вы получите опыт командной разработки, глубокие знания самого языка, который вам нравится.
И да, придется оооочень много читать, а также хороший английский, на русском намного меньше литературы по данной специфике.