===========================
Все последующие вопросы, связанные с конструированием ком- пиляторов, мы будем рассматривать на примере разработки транслятора для минимального подмножества языка Оберон-2 (Приложение 1). Такой конкретный и предметный подход на- верняка сузит круг обсуждаемых тем, не позволит рассмотреть тонкие и сложные вопросы, связанные с оптимизацией кода, за- то гарантирует полное понимание основ.
Оберон-2 — это расширенная версия языка Оберон, созданного выдающимся швейцарским специалистом Никлаусом Виртом, автором Паскаля и Модулы-2. Оберон очень прост и в то же время содержит в себе необходимые средства структурного, мо- дульного и объектно-ориентированного программирования [Свердлов, 2007].
Тот простой язык, для которого мы напишем компилятор, будет называться «О». Это шуточное название, во-первых, подчерки- вает некоторую несерьезность, учебный характер, «игрушеч- ность» языка — уж очень он будет прост. Во-вторых, буква «О», похожа на ноль (сложность языка стремится к нулю) и в то же время это первая буква слова Оберон. Из других ассоциаций — «Операция «Ы».
- Язык «О» является точным подмножеством Оберона и Оберо- на-2, то есть любая программа на языке «О» является пра- вильной программой на языках Оберон и Оберон-2.
- Программа на языке «О» состоит из единственного модуля. Выполнение программы начинается с первого оператора, за- писанного после слова BEGIN . Процедуры в языке «О» отсут- ствуют.
- Предусмотрены константы и переменные только целого ( INTEGER ) типа. Выражения логического типа (без логических операций) могут использоваться в операторах IF и WHILE . Массивов и записей нет.
- Выражения строятся по правилам языка Оберон. Допустимы все операции, применимые к целым и дающие результат цело- го типа: +, –, *, DIV , MOD . В логических выражениях использу- ются операции отношения: =, #, <, >, <=, >=, которые приме- нимы к целочисленным операндам.
- Набор операторов включает присваивание, вызов процедуры (стандартной), IF – THEN – ELSIF … ELSE – END , WHILE – DO – END .
- Предусмотрены стандартные процедуры и процедуры- функции ABS , DEC , HALT , INC , MAX , MIN , ODD . Их смысл такой же, как и в языке Оберон-2 (см. Приложение 1).
- Разрешается импорт стандартных (псевдо) модулей In и Out , предоставляющих процедуры ввода-вывода In.Open , In.Int , Out.Int , Out.Ln . Их свойства приведены в таблице.
В записи программы разрешены комментарии, которые могут быть вложенными.
- Большие и малые буквы различаются.
- Кроме ключевых слов, используемых в языке «О», зарезерви- рованными считаются также все остальные служебные слова языка Оберон-2. Их нельзя использовать в качестве иденти- фикаторов в программах на «О». Это обеспечивает полную совместимость снизу вверх с Обероном-2.