Как правило, вам нужно создать таблицы символов и выполнить проверку типов.Для некоторых языков вы можете сделать это на лету;для других, я думаю, что в первую очередь нужно разрешать имена и проверять типы, иначе вы не сможете хорошо их интерпретировать (C ++ приходит на ум).
Как только вы построите таблицы символов, выможет написать интерпретатора, пройдя по дереву в порядке выполнения и выполнив то, что говорят операторы.Базовая арифметика довольно проста.Струнное и динамическое управление хранилищем сложнее;чтобы выяснить, как вы собираетесь обрабатывать выделение и освобождение хранилища, а для языков, которые управляют хранением, вам в конечном итоге придется внедрить какой-то сборщик мусора.В этот момент жизнь быстро усложняется.
Скорее всего, вы обнаружите, что ваш язык нуждается в функциях, которые вы не рассматривали.Обработка исключений?Несколько назначений?Местные рамки?Лямбда?Затворы?Вы довольно быстро узнаете, сколько современных языков делают их полезными.
Когда вы начнете писать более сложные программы, вам понадобится отладчик.Контрольные точки?Единственный шаг?Переменная проверка?Обновить?Начать с произвольных мест?Цикл read-eval-print?
Вам все еще нужно привязать язык к внешним библиотекам;большинство людей хотят общаться с консолями и файлами;Вы хотите буферизованные файлы или все в порядке с 1 символом за раз и соответствующим падением производительности?Вам придётся поспорить с представлениями символов (7-битные ascii? 8-битные? UTF8 с не-единичными широкими символами? Полный Unicode?) И стандартными библиотеками поддержки (конкатенация строк, поиск, преобразования чисел [включая точные преобразования с плавающей запятой в обоих направлениях], большое число арифметики, ловушки с плавающей запятой, .... Список проблем становится довольно длинным, если вам нужен полезный язык программирования.
Ядро интерпретатора, вероятно, будет довольно маленьким. Вы найдете, что другие вещи, вероятно, сгораютна один или два порядка больше усилий. Где-то здесь, если вы хотите, чтобы кто-нибудь использовал язык, вы должны задокументировать все ваши выборы. И небеса помогут вам, если вы измените интерпретатор немного позже, когда кто-то запускает большое приложение.
Далее кто-то будет жаловаться на производительность. Теперь вы можете настроить свою реализацию и начать сожалеть о том, что вы написали интерпретатор вместо компилятора
Наслаждайтесь. Если у вас естьА АСТ, вы едва поцарапали поверхность.Если вы это сделаете, то научитесь ценить то, что предлагают современные языки «из коробки», и сколько усилий потребовалось для его предоставления.