Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка2012.doc
Скачиваний:
7
Добавлен:
19.11.2019
Размер:
151.55 Кб
Скачать

1.5Основные определения

Лексемами называют минимальные значимые единицы текста программы.

Пример:

Предложение (оператор) – for i:=1 to n do writeln(i); будет разбито на лексемы: «for», «I», «:=», «1», «to», «n», «do», «writeln», «(», «i», «)», «;».

Постфиксная запись – распространенная форма линеаризованного представления – это запись синтаксического дерева в порядке его обхода снизу-вверх (рисунок 2а):

abc – * bc * + := (1).

Префиксная запись - это распространенная форма линеаризованного представления – это запись синтаксического дерева в порядке обхода его сверху-вниз (рисунок 2б): выражение (1) будет таким:

:= a + *b – c * b – c (2).

а) Постфиксная запись б)Префиксная запись

Рисунок 2. Графы деревьев синтаксического разбора

1.6Описание программы alter

ALTER является программой написанной на С++. Она позволяет переводить программы, написанные на Pascal, в программы на Assembler.

ALTER является однопроходным компилятором, лексический анализатор которого работает по принципу ''дай лексему''. Для определения типа лексемы служит переменная token_type, которая может принимать значения VARIABLE для переменных, COMМAND для команд, NUMBER для чисел, QUOTE для строки в кавычках. Переменная tok хранит в себе внутренний код лексемы. Сама лексема находится в переменной token. Для вызова лексического анализатора служит функция get_token(). В процессе её работы из программного буфера, куда помещена анализируемая программа, извлекается посимвольно лексема. При этом пропускаются символы комментария между знаками’’{ }’’. Затем выполняется проверка типа лексемы. Если это число или строка в кавычках, то сразу завершается работа лексического анализатора и переменной token_type присваивается соответствующее значение. Если это строка символов, то все они преобразовываются в нижний регистр и затем выполняется проверка на совпадение лексемы с командой языка функцией look_up(char*). Если лексема является командой, то переменной token_type будет присвоено значение COMMAND, а tok внутреннее представление этой команды, в противном случае лексема будет рассматриваться как переменная.

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

ALTER не проводит оптимизацию получившегося кода, поэтому существует возможность выполнить эту процедуру самостоятельно.

2Требования к выполнению лабораторных работ

2.1Эксплутационные требования системы к компьютеру:

  • Процессор 286 и выше;

  • ОЗУ не менее 640 Кб;

  • Свободное пространство на жестком диске 790 Кб;

  • VGA-совместимый дисплей.

2.2Требования к информационной и программной совместимости:

  • ОС - MS-DOS, Windows 9x;

  • Компиляторы: Pascal, ALTER;

  • Транслятор TASM.exe;

  • Загрузчик-TLINK.exe.

2.3Требования к тексту программы на Pascal.

1. Файл, который должен обработать компилятор ALTER, должен содержаться в одном каталоге с компилятором ALTER. Обрабатываемый файл должен иметь расширение *.pas.

2. Текст Pascal-программы должен представлять собой последовательность стандартных конструкций языка Pascal. Строки программы должны завершаться специальными управляющими символами. Максимальная длина строки должна быть не более 126 символов. Текст программы на Pascal должен начинаться с ключевого слова var.

Проверить соответствие программы требованиям Pascal можно, откомпилировав программу (нажать Ctrl+F9) в среде Pascal.

3. В соответствии с требованиями компилятора ALTER текстовая конструкция программы на Pascal должна содержать только перечисленные в таблице 1 зарезервированные слова. Остальные предусмотренные в Pascal конструкции ALTER не переводит в ассемблерный код.

Таблица 1. Зарезервированные слова компилятора ALTER

Var

Begin

For

If

:=

Read

integer

End

while

then

*

Readln

Word

Repeat

else

+

Write

Byte

until

-

Writeln

String

Do

DIV

To

Downto