Если вы сосредоточены на изучении дизайна компилятора, я думаю, что скорость компиляции не будет вашим приоритетом.Я предлагаю вам сначала реализовать синтаксический анализатор сверху вниз, используя рекурсивную технику потомков, которая проста и понятна.Также используйте лексер, разработанный вручную с использованием конечного автомата, который также довольно прост, но концептуально очень богат.
При определении синтаксиса вашего языка вы должны убедиться, что он согласован и однозначен.Если вы знакомы с Prolog, вы можете использовать Грамматики Определенных Условий (DCG), чтобы поиграть с вашим языком перед его внедрением.Я нахожу это весьма полезным.
Тогда вы можете рассчитывать на реализацию лексера и анализатора с использованием инструментов для их генерации (таких как Bison, ANTLR, Lemon, Yacc и т. Д.)
Еще один совет:будь проще.Вы можете реализовать подмножество языка, который вы хотите построить, и отшлифовать его, пока не почувствуете себя довольным, затем расширить его, внедрив новые функции и так далее.Вы обнаружите, что расширяете свой язык и свой компилятор, и видите, как он становится больше и полнее, а когда он становится все лучше и лучше, вы будете чувствовать себя более уверенно и удовлетворенно.В конце концов, это красивый и красивый вызов.
Веселитесь.Изучение дизайна компилятора - это просто увлекательная и очень интересная тема!
PS.Прочитайте книгу дракона