У меня нет ссылок, но из того, что я слышал, и из опыта C / C ++ - плохой язык для написания компилятора. Прежде всего, вам действительно нужно, чтобы оно было масштабируемым? Или масштабируемый на этом этапе? Особенно для языка разметки? вы не компилируете 60+ мегабайт исходного кода, так что я не думаю, что вам действительно нужно, чтобы он был масштабируемым.
В любом случае для своего языка программирования я использовал bison для парсера (чтение bison + flex обязательно, постарайтесь избежать всех конфликтов, которых нет в моем языке). Затем я использую и C и C ++ для кода. C, потому что bison использует C, и я просто вызываю простую функцию C, которая создает и заполняет структуру для создания абстрактного синтаксического дерева. Затем, когда это сделано, он вызывает мой код C ++, который проходит через AST и генерирует двоичный файл.
Предполагается, что Standard ML действительно хорош в создании языка. Если вы не используете этот функциональный язык, это хороший выбор, потому что он соответствует образу мышления (синтаксический анализ может выполняться слева направо, но вызовы ваших функций не будут в таком порядке). Поэтому я рекомендую, если вы не используете bison (или знаете, как его назвать, используя C / C ++ и bison).
Примечание: я дважды пытался написать компилятор. Первый раз в Си без бизонов, второй раз с зубрами. Нет никаких сомнений в том, что это заняло бы у меня экспоненциально больше времени из-за того, что бизон находит конфликты для меня, и я не обречен на отладочную землю (я, вероятно, на самом деле попытался бы найти способ сообщить о конфликтах, прежде чем писать код это именно то, что делает зубр)