Материалы сайта
Это интересно
Лабораторные работы по Теории вычислительных процессов и структур
Министерство образования Российской Федерации Саратовский государственный технический университет Формульный компилятор методические указания к выполнению лабораторной работы по курсу «Теория вычислительных процессов и структур для студентов специальности ПВС Составил доцент кафедры ПВС Сайкин А.И. Саратов - 2001 г. Введение Данная лабораторная работа рассчитана на четыре аудиторных часа. Самостоятельная работа по изучению литературы, оформление отчёта ещё шесть часов. Объект исследования формульный транслятор, Цель исследования состоит в изучении проблематики разработки трансляторов с алгоритмических языков. Метод предполагает использование алгоритма рекурсивного спуска и написание программы транслятора. Работа выполняется в дисплейном классе. 1. Содержание работы. Формульный транслятор эта программа, которая переводит исходную программу, написанную на входном языке, в объектный псевдокод, который в последствии, после необходимой оптимизации, может быть заменён машинным кодом с абсолютной адресацией. Для написания программы на входном языке необходимо создать язык, в который бы входили: заголовок программы, оператор описания типа переменной, оператор ввода переменной, оператор присвоения и оператор вывода результата. Для оператора присвоения необходимо предусмотреть знаки арифметических операций, скобки и элементарные функции, которые выдаются вместе с вариантом задания. А также, разделители и служебные символы. В связи с этим разрабатывается контекстно-свободная грамматика, которая в последствии позволит провести грамматический разбор программы на исходном языке. Грамматическому разбору должен предшествовать лексический анализ, который обычно не вызывает затруднений (см. лабораторные работы №1 и №2). Оператор присвоения имеет общий вид для всех вариантов Y=Y(x). Результатом выполнения программы должен быть текст в объектном псевдокоде. Для чего необходимо оговорить его содержание. В работе рекомендуется использовать так называемые четвёрки, имеющие вид КОП, А1, А2, А3, где: КОП - код операции, А1- адрес первого операнда, А2 - адрес второго операнда, А3 - адрес результата. Хотя возможны и другие варианты, например, по двухадресной и одноадресной схемам. Используемые данные могут быть как целыми, так и с плавающей точкой. 2. Задание по работе. 1. Получить вариант задания у преподавателя. 2. Разработать язык формульного транслятора. 3. На основе разработанной регулярной грамматики разработать программу лексического анализатора. 4. На основе разработанной контекстно-свободной грамматики разработать программу грамматического разбора исходного текста на входном языке. 5. Во всех случаях предусмотреть сообщения пользователю о лексических и синтаксических ошибках. 6. Разработать и описать объектный псевдокод. 7. Составить и утвердить техническое задание на программу генерации. 8. Разработать программу генерации объектного псевдокода. 9. Составить отчёт по работе с описанием всех пунктов задания, представить работающую программу. 3. Варианты заданий. Вариант задания состоит из трёх цифр. Каждая цифра означает соответствующую строку таблицах 1, 2 и 3. В соответствии с этим, оператор присвоения может содержать указанные математические функции из указанных строк таблиц. Таблица 1. | № |Функция | | 1 | acos | | 2 | asin | | 3 | atan | | 4 | sin | | 5 | cos | | 6 | sinh | | 7 | cosh | Таблица 2. | № | Функции | | 1 | exp | | 2 | abs | | 3 | mod | | 4 | sqrt | | 5 | log | | 6 | ln | | 7 | log10 | Таблица 3. | № | Функции | | 1 | tan | | 2 | tanh | | 3 | cotan | | 4 | cotanh | | 5 | trunk | | 6 | round | | 7 |nearbyint | Подробные сведения о перечисленных функциях можно найти в справочнике программиста по С/C++. 4. Методические указания. В любом языке программирования обязательно существуют ограничения. Поэтому следует сразу оговорить, что переменые обозначаются идентификаторами, начинающимися с латинской буквы и несодержащими разделителей. Следует оговорить максимально допустимую длину для идентификатора. Следует оговорить приоритет в выполнении арифметических операций, который должен совпадать с общепринятым. Лексический анализ, грамматический разбор и генерация псевдокода могут быть совмещены в одной программе, но методически их лучше реализовать по отдельности: вначале лексический анализ, затем грамматический разбор и после этого, когда все ошибки будут устранены - генерация машинного кода. Но в любом случае написание программы является творческим процессом и всё, что говорилось ранее, носит только рекомендательный характер. 5. Контрольные вопросы. 1. Каков приоритет в выполнении арифметических операций в выражении? 2. Что такое лексема? 3. Каково назначение лексического анализа? 4. Каково назначение грамматического разбора? 5. Как определяется контекстно-свободная грамматика? 6. Что такое «чевёрки»? 7. Зачем используют псевдокод? 8. В чём особенность объектного кода? 9. Как из объектного кода получить исполняемый код? Литература. 1. Бек Л. Введение в системное программирование. -М.: Мир, 1988.-448 с. 2. Компаниец Р.И., Маньков Е.В., Филатов Н.Е. Системное программи- рование. Основы построения трансляторов.-СПб.: КОРОНА принт, 2000 .-256 с. 3. Шильд Г. Справочник программиста по С/С++.-М.: Издательский дом «Вильямс», 2000.-448 с.