Интерпретаторы важны по нескольким веским причинам

Интерпретаторы важны по нескольким веским причинам. Во-первых, они могут обеспечивать удобную интерактивную среду (что зачастую удобнее, чем просто компилятор языка), Во-вторых, интерпретаторы языка обеспечивают превосходные интерактивные отладочные возможности. Интерпретатор позволяет, например, динамично устанавливать значения переменных и условий. В-третьих, большинство языков-запросов к базам данных работают в режиме интерпретации.

В данной работе будут даны общие методы и подходы к реализации интерпретатора на примере языка, который условно назовём CBAS (описание структуры программы на этом языке будет дано ниже). Язык представляет собой смесь языков BASIC и C, и упрощён почти до предела.

При разработке интерпетатора следует учесть тот факт, что каждая лексема имеет два формата: внешний и внутренний. Внешний формат – это строка символов, с помощью которой вы пишите программы на каком-либо языке программирования. Например, «while» – это внешняя форма ключевого слова while языка С. Можно построить интерпретатор из расчёта, что каждая лексема используется во внешнем формате, но это типичное решение проблемы программистом-непрофессионалом. Студентам четвёртого курса следует ориентироваться на внутренний формат лексемы, который является просто числом, и разрабатывать интерпретатор исходя из этой профессиональной точки зрения на проблему. Этот подход заключается в том, что каждой лексеме присваивается внутренний номер. Например, ключевое слово while может иметь порядковый номер 1, if – 2 и т.д. Преимущество внутреннего формата заключается в том, что программы, обрабатывающие числа, быстрее программ, обрабатывающих строки. Для реализации такого подхода необходима функция,  которая  берет  из  входного  потока  данных очередную  лексему  и  преобразует  ее  из  внешнего  формата  во внутренний.

            Очень важно знать, какой тип лексемы возвращён. Например, анализатору выражений необходимо  знать,  является  ли  следующая лексема числом,  оператором или переменной. Значение типа лексемы для  процесса  анализа  в  целом  станет  очевидным,   когда   вы приступите непосредственно к разработке интерпретатора.

Некоторые функции  интерпретатора  нуждаются   в   повторном просмотре  лексемы.  В этом случае лексема должна быть возвращена во входной поток. Например, это необходимо, когда очередная лексема является началом выражения. Тогда она помещается обратно во входной поток и вызывается функция обработки и вычисления этого выражения.

Ссылка на основную публикацию
Adblock detector