Мне удалось написать компилятор без какой-либо конкретной книги (хотя в прошлом я читал некоторые книги по компилятору, но не в деталях).
Первое, что вы должны сделать, это поиграть с любым из инструментов типа «Компилятор компилятора» (flex, bison, antlr, javacc) и заставить вашу грамматику работать. Грамматика в основном прямолинейна, но всегда есть мелкие кусочки, которые мешают и разрушают все. Особенно такие вещи, как выражения, приоритет и т. Д.
Некоторые из более старых более простых языков более просты по причине. Это делает парсеры "Just Work". Рассмотрим вариант Паскаля, который может быть обработан исключительно с помощью рекурсивного приличия.
Я упоминаю об этом, потому что без вашей грамматики у вас нет языка. Если вы не можете разобрать и правильно его проанализировать, вы очень быстро никуда не добьетесь. И наблюдать, как дюжина строк примера кода на вашем новом языке превращается в множество токенов и синтаксических узлов, на самом деле просто потрясающе. Во всяком случае, это действительно работает. Это буквально почти "все это работает" или "ничего из этого не работает", особенно в начале. Как только это действительно сработает, вы почувствуете, что действительно сможете это осуществить.
И в какой-то степени это так, потому что, как только вы выполнили эту часть, вы должны приступить к работе. Как только вы скомпилируете «a = 1 + 1», большая часть новой работы позади вас, и теперь вам просто нужно реализовать остальных операторов. По сути, это упражнение по управлению справочными таблицами и ссылками, а также определению того, где вы находитесь в данный момент.
Вы можете работать самостоятельно с совершенно новым синтаксисом, инновационным временем выполнения и т. Д. Но если у вас есть время, вероятно, лучше всего сделать язык, который уже был сделан, просто чтобы понять и реализовать все шаги, и подумайте, если бы вы писали язык, который вам действительно нужен, как бы вы делали то, что вы делаете, с этим существующим по-другому.
Существует множество механизмов написания компилятора, и одно лишь успешное выполнение процесса однажды придаст вам больше уверенности, когда вы захотите вернуться и сделать это снова на своем новом языке.