не давно как раз подобным занимался. нужно было сделать компилятор из чего то похожего на excel в php.
основные шаги для этого
1) токенизация, модуль лексер проходит посимвольно код и разбивает исходный код, на вашем новом языке на токены, числа, ключевые слова, скобки и тд, то есть каждый токен - некая последовательность символов пример ("var", "name", "=", "vasya", ";", "print", "(", "name", ")", ";").
2) далее парсер проходит по токенам и определяет их тип, при этом как правило строится AST (abstract syntax tree). это набор объектов в которых исходный код представлен в виде объектов и операций над ними.
в этом виде код уже можно выполнять, не генерируя код на целевом языке.
3) компиляция. на основе AST генерируется код на другом языке.
основные ключевые слова можно посмотреть здесь
https://en.wikipedia.org/wiki/Lexical_analysis
если знакомы с php, то вот примеры таких компиляторов на php
на нем они получаются довольно просто, тк язык высокоуровневый
https://github.com/symfony/expression-language (парсит выражения и может вычислять их на основе AST то есть без генерации php кода, хотя может и его генерить)
https://github.com/twigphp/Twig (парсит шаблоны и генерит php код)
код очень похож, тк создатель у них один.
я свой парсер тоже делал на их основе, но пришлось серьезно дописывать, чтобы expression-language превратить в полноценный язык программирования, с поддержкой циклов, переменных и других конструкций.
примеры кода модулей из symfony expression language
1) токенизация
https://github.com/symfony/expression-language/blo...
2) парсер
https://github.com/symfony/expression-language/blo...
создаются вот такие сущности
https://github.com/symfony/expression-language/tre...
то есть нода - функция, константа, массив, название переменной и тд.
3) компилятор
https://github.com/symfony/expression-language/blo...
но большая часть генерации кода происходит в самих нодах. пример -
https://github.com/symfony/expression-language/blo...