Сначала я бы порекомендовал прочитать главу 9 (Обозначения) Практики программирования Кернигана и Пайка.
Когда вы это сделаете, вернитесь сюда с конкретными вопросами о том, как сопоставить концепции в этой главе с конкретными планами для задач, которые вы хотите решить.
Основной шаблон - написать интерпретатор, которому передан аргумент «команда» и, возможно, аргумент «окружение» и который выполняет команду (в окружении). Затем у вас есть возможность написать анализатор, который берет строку 'script' и преобразует ее в действительный объект 'command' (т. Е. External-DSL); или вы предоставляете библиотеку, чтобы помочь пользователям явно создать объект 'command' на том же языке, который вы используете (internal-DSL).
Керниган и Пайк хорошо показывают, насколько тривиальным и сложным может быть переводчик. Если вы хотите глубже, то я бы предложил прочитать Основы языков программирования , автор Daniel Friedman et al. Который создает как минимум один интерпретатор для каждой главы и демонстрирует, как реализовать такие функции, как переменные, функции, области действия, объекты, классы, статическая типизация и продолжения.
Однако я бы предложил сначала попробовать свои силы в тривиальном DSL, иначе это всего лишь теория - книга гораздо интереснее, когда она сделана актуальной и практичной из вашего предыдущего опыта.