Автор работы: Пользователь скрыл имя, 25 Декабря 2013 в 12:58, курсовая работа
Уже в ЭВМ первого поколения появляется язык мнемокода (впоследствии – язык ассемблера) для более понятного человеку представления машинных команд. Программистам уже не нужно тратить уйму времени над загадочной последовательностью нулей и единиц. Затем возникают и занимают прочное место в решение задач другие, более сложные языки программирования, и дальнейшее развитие систем программирования идет именно в повешении дружественности к человеку.
Введение
Анализ технического задания
Описание языка
Выбор и обоснование архитектуры системы
Выбор и обоснование алгоритма
Описание программы
Методика испытаний
Заключение
Список использованной литературы
Содержание
Введение |
|
|
|
|
|
|
|
|
|
|
|
|
|
Заключение |
|
Список использованной литературы |
|
Приложение А(обязательное) |
|
Приложение Б(обязательное) |
Введение
Уже в ЭВМ первого поколения появляется язык мнемокода (впоследствии – язык ассемблера) для более понятного человеку представления машинных команд. Программистам уже не нужно тратить уйму времени над загадочной последовательностью нулей и единиц. Затем возникают и занимают прочное место в решение задач другие, более сложные языки программирования, и дальнейшее развитие систем программирования идет именно в повешении дружественности к человеку.
Но, к сожалению, компьютеры традиционной архитектуры, принципы которой были заложены еще фон Нейманом, не умеют понимать ничего другого, кроме машинных команд. В связи с этим возникла необходимость в разработке «переводчиков» с различных языков программирования на язык машинных кодов. Такими переводчиками и являются трансляторы.
Традиционная архитектура
По классификации программного
обеспечения ЭВМ компиляторы
относятся к системным
Подготовка программы
Задание можно разделить на 3 части: лексический анализ, синтаксический анализ, разработка компилятора в целом.
Лексический анализ включает этапы:
- преобразование исходного
- выделение лексических единиц (лексем);
- распознавание типов лексем;
- добавление лексем в
В данном языке используются следующие типы лексем:
- идентификаторы;
- ключевые слова;
- знаки операций;
- разделители.
Идентификаторы (имена).
Имя не может начинаться с цифры; в начале и в конце имени подчерк недопустим; два подчерка не могут стоять подряд; строчные буквы недопустимы. Кроме того, идентификаторы не могут совпадать со служебными словами.
Ключевые слова
Этот класс лексем, как правило, описывается тем же синтаксисом, что и идентификаторы. Основное отличие состоит в том, что все ключевые слова заранее перечислены и каждое играет в языке свою особую роль. Оно не может заменяться другими ключевыми словами. Лексический анализатор должен отличать ключевые слова от обычных имен, различать между собой и возвращать для каждого из них свои (уникальные) значения.
Знаки операций.
Их особенность состоит в
том, что они могут быть одно или
двухсимвольными. В данном задании
встречаются как
Разделители.
К ним относятся специальные символы, разделяющие конструкции языка, пробелы, символы табуляции и перехода на новую строку. Они могут либо возвращаться в синтаксический анализатор в качестве лексем, либо только указывать на окончание предыдущей лексемы и пропускаться при вводе следующей. Некоторые из этих символов одновременно могут играть роль терминальных символов в грамматическом описании отдельных конструкций языка.
Границами лексем являются разделители, знаки операций, пробелы.
В процессе синтаксического анализа решаются две задачи:
В процессе перевода в программе выделяются и изменяются такие уровни или слои как алфавит, лексика, синтаксис при сохранении семантики.
Алфавит - набор допустимых символов и знаков, из которых строятся элементарные конструкции языка. Отдельные знаки объединяются в лексемы.
Лексема - отдельная неделимая
Слова (лексемы) объединяются в предложения (операторы) согласно правилам синтаксиса.
Синтаксис - описание правильных конструкций языка или правил получения правильных конструкций языка.
Компиляция состоит из этапов анализа и синтеза. В анализ
входит лексический, синтаксический и семантический анализ.
Лексический анализ состоит из распознавания лексем, их классификации и определения правильности.
Синтаксический анализ заключается в проверке правильности структур языка, таких как предложения или операторы и всей программы в целом.
Предложение считается синтаксически правильным, если оно представляет сентенциальную форму грамматики языка, т.е. может быть выведено с помощью некоторой цепочки переходов из начального символа грамматики.
В процессе синтаксического анализа
всего исходного текста в целом
и каждого предложения в
Входные данные - таблица кодов лексем, сформированная на стадии лексического анализа.
Выходные данные - сообщение об успешном завершении анализа или сообщение об имеющихся ошибках.
2. Описание языка
РАПИРА — Расширенный Адаптиров
Конструктор использует следующие подмножества набора символов кода ASCII:
- Буквы алфавита от A до Z, от a до z, от А до Я, а до я, символ подчеркивания
- Цифры - арабские от 0 до 9
- Пробелы - символ пробела (ASCII 32)
Идентификаторы выступают в качестве имен классов, переменных, процедур, функций. Идентификатор может иметь любую длину. Идентификатор должен начинаться с буквы и не должен содержать пробелов. После первого символа допускаются буквы, цифры и знак подчеркивания (ASCII 95). Как и зарезервированные слова, идентификаторы безразличны к регистру клавиатуры.
В данном задании встречаются следующие идентификаторы: ‘K’,’I’,’J’. Их следует записать в таблицу идентификаторов.
Ключевые (зарезервированные) слова: иначе, всё, кнц, до, от,.
Лексический анализатор должен различить следующие ключевые слова: ‘имена’, ‘от’, ‘до’, ‘все’, ‘кнц’ и записать их в таблицу терминальных символов.
Пример программы:
имена k,I,j;
для I от 1 до 10 ::
для j от 1 до 5 ::
к=k+i*j;
все;
все;
кнц.
Язык Рапира унаследовал
многие особенности языков Поплан и
Сетл. Так, например, в языке Рапира
используются необъявляемые бестиповые перем
3. Выбор и обоснование
Для решения поставленной задачи был выбран язык Object Pascal и, соответственно, среда программирования Delphi.
Задача создания компилятора состоит
из нескольких подзадач, которые были
рассмотрены в анализе
Данную программу можно
- модуль интерфейса –
- модуль лексического разбора
и работы с таблицами –
осуществляет разбор входного
текста на лексемы и заполняет
таблицы идентификаторов,
- модуль разбора
- модуль разбора арифметических выражений –осуществляет
синтаксический разбор сложного и простого арифметического выражения и создание промежуточной формы выражения.
Возможны два варианта реализации интерфейса данной программы: консольный или оконный.
Первый вариант подразумевает
работу пользователя программы в
командной строке. Ввод имен входных
и выходных файлов через параметры
командной строки при запуске
программы или вводе с
Данный вариант не требует больших объемов памяти и быстродействия системы.
Второй вариант обеспечивает работу
пользователя с оконным интерфейсом.
Текст, входной программы, может
быть загружен из файла в окно редактирования
или непосредственно введен в
нем. Результат работы программы
- сообщение об ошибке выводятся
в другие окна редактирования. Для
получения имен файлов применяются
стандартные диалоговые окна. Можно
также реализовать вывод
Данный вариант требует более высокой производительности системы и объема оперативной памяти, но он имеет свои преимущества по сравнению с консольным интерфейсом: большая наглядность и удобство работы.
Для реализации программы выбран второй вариант, исходя из его преимуществ, однако так как была выбрана модульная организация программы, то при необходимости, для реализации первого варианта необходимо переписать модуль интерфейса.
4. Выбор и обоснование алгоритмов
При программировании компилятора с подмножества языка Рапира были выполнены следующие основные шаги: лексический, синтаксический, семантический разборы входного текста и генерация кода.
Задачу лексического разбора следует разбить на две подзадачи:
1) Сканирование исходного текста;
2) Распознавание лексем;
3) Классификация лексем на
терминалы, идентификаторы, литералы.
- если распознанная лексема
–терминал, то необходимо
- если распознанная лексема –литерал, то необходимо произвести её поиск в таблице литералов и в случае не обнаружения –добавить;
- если распознанная лексема
–идентификатор, то необходимо произвести
её поиск в таблице