Архив3 / Kursach_po_SPO / Курсач по СПО / Курсач / АТЗ
.doc
1 Анализ технического задания
В данном курсовом проекте необходимо спроектировать транслятор с подмножества языка Pascal. В конкретном случае нужно сделать системную программу, выполняющую преобразование программы, написанной на языке Pascal, в программу на языке ассемблера в определенной смысле эквивалентную первой.
Основным требованием заказчика к транслятору является поддержка:
-
Целочисленные константы
-
Директива описания переменных типа integer
-
Условный оператор if, then, else
-
Простое логическое выражение
-
Оператор присваивания
Программа должна выполнять следующие функции, обусловленные задачами составления программы: читать данные из файла, обрабатывать и анализировать их (разбивать содержимое на лексемы, на основании алфавита языка и грамматики, а также должно приниматься решение о принадлежности лексемы к тому или иному классу, и записывать в соответствующую таблицу – массивы), по предыдущим результатам должна заполняться таблица стандартных символов, таблица литералов, таблица идентификаторов; по данным таблицы стандартных символов должен происходить синтаксический разбор с целью проверки правильности синтаксиса, по методу рекурсивного спуска, т.е. нисходящего детерминированного разбора на основе LL(K) грамматики, и потому происходит диагностика ошибок и трансляция данных с подмножества языка Pascal в язык ассемблера, вывод результата в файл.
Лексический анализ подразумевает разбиение содержимого входного файла на лексемы и, в зависимости от принадлежности лексемы к тому или иному классу, ее запись в соответствующую таблицу (таблицу идентификаторов, таблицу литералов). А также формирование таблицы стандартных символов, которая состоит из списка лексических единиц, расположенных в том порядке, в котором они встречаются в тексте программы . На этом этапе транслятор языка Pascal должен обнаруживать и отмечать лексические ошибки.
На этапе синтаксического анализа будет происходить разбор сложных логических выражений. Синтаксический анализ будет выполняться по нисходящему детерминированному методу разбора на основе LL(K) грамматик, цель которого – проверка правильности синтаксиса содержимого входного файла.
Завершающий этап – генерация кода.
Генерация кода – это перевод транслятором внутреннего представления исходной программы в цепочку символов выходного языка. Для компилятора это – объектный код, для транслятора это может быть программа на другом языке программирования. Транслятор выполняет генерацию кода поэтапно на основе законченных синтаксических конструкций входной программы.