Пояснительная записка к курсовой работе по курсу «Теория языков программирования и методы трансляции» Выполнил студент гр. 230661




Скачать 126.71 Kb.
НазваниеПояснительная записка к курсовой работе по курсу «Теория языков программирования и методы трансляции» Выполнил студент гр. 230661
Дата публикации08.04.2013
Размер126.71 Kb.
ТипПояснительная записка
www.vbibl.ru > Информатика > Пояснительная записка
Федеральное агентство по образованию

Государственное общеобразовательное учреждение высшего образования

Тульский государственный университет

Кафедра АТМ

Пояснительная записка к курсовой работе

по курсу «Теория языков программирования и методы трансляции»

Выполнил студент гр. 230661

Сафронов Д. А.
Проверил профессор кафедры АТМ доктор ф.- м. наук Двоенко С. Д.

Тула 2010

Содержание
Введение 3

  1. Постановка задачи 4

  2. Теоретическая справка 4

  3. Решение поставленной задачи 4

    1. Описание алгоритма 4

    2. Описание программы 5

    3. Текст программы 6

    4. Инструкция пользователю 13

    5. Тестовый пример 13

Заключение 15

Список использованных источников 16

Введение
С помощью языков программирования осуществляется описание процесса тех или иных вычислений. Современные языки высокого уровня удобны для конкретного и однозначного описания алгоритма и сравнительно близки к естественным языкам, что делает их удобными для разработчика. В тоже время ни одна программа написанная на ЯП не может быть непосредственно выполнена машиной – перед этим необходимо выполнить преобразование текста программы в специальный машинный код. Именно это и является задачей программ специального класса – компиляторов.

В данной курсовой работе рассматривается процесс создания программы такого рода. Получив в качестве исходных данных текст программы на заданном языке, она должна будет преобразовать его в некоторый промежуточный код, который может быть выполнен на абстрактной вычислительной платформе.



  1. Постановка задачи


Разработать программу-транслятор, которая будет осуществлять преобразование текста программы, написанной на некотором условном языке программирования в промежуточное внутреннее представление пригодное для выполнения на стековой машине. Обеспечить интерфейс взаимодействия с пользователем, выдачу диагностических сообщений в процессе трансляции и сообщений об ошибках.


    1. Описание условного языка программирования


Используемый условный язык программирования зададим списком ключевых слов, операторов, правилами построения идентификаторов и грамматикой данного языка.
Ключевые слова: ^ If, Else, While, Do, Include, Float, Long, Bgn, End;

Операторы языка: + -, *, /, (, ), :=, <, >, =, <>;

Логические операторы: &&, ||, !;

Идентификаторы: ( лат. буква | _ )( лат. буква | _ | цифра );

Комментарии: {…} или (*…*).
Грамматика языка: G = { T, N, S, P }, Т – терминальные символы;

N – нетерминальные символы;

S – стартовый символ;

P – система продукций.
^ Т = { Ключевые слова, Операторы, Логические операторы, Идентификаторы, Цифры };

N = { program, decs, std_type, cmp_stmnt, stmnt_sq, stmnt, assume, expt, term, factor, string_e }

S = program;

P:

::= "" |
::= "Bgn" "End"
::= "" |
::= "&&" | "||" | "!" | ">" | "<" | "="

| "<>" | "+" | "-" |
::= "*" | "/" |
::= | | "(" ")"
::= "+" |
::= ":=" | ":="
::= "" |
::= "Float" | "Long"
::= | "Include" | "If" "(" ")" "Else" | "While" "Do"


    1. Описание вычислительной задачи


На представленном условном языке программирования необходимо написать программу вычисления скорости свободно падающего тела с некоторой высоты и обеспечить ее выполнение на абстрактной стековой машине.


  1. Теоретические сведения


Текст на исходном ЯП не может быть непосредственно выполнен на вычислительной машине и должен быть сперва преобразован в некоторое внутренне представление. Этот процесс носит название трансляции. Общая схема трансляции (рисунок 1) состоит из следующих этапов:

  • Анализ – этап разбора представленного исходного текста на составляющие его лексемы (лексический анализ), проверки корректности составленных из лексем конструкций (синтаксический анализ), выявляется структура программы, осуществляется построение таблицы идентификаторов.

  • Синтез – выделение памяти, размещение пространств данных и кода, сборка кода программы на основе полученных на этапе анализа структур данных: внутреннего представления текста программы и таблицы символов.

Исходная программа

Лексический анализ

Синтаксический анализ

Семантический анализ

Внутреннее представление

Фаза анализа

Подготовка к генерации

Генерация кода

Фаза синтеза

Объектный код

Таблицы идентификаторов

Локализация ошибок

и генерация

диагностических сообщений
Рисунок 1 – Общая схема этапов трансляции

Объектный код – это структура данных, включающая в себя код, данные и вспомогательные структуры. Код является последовательностью команд целевой вычислительной платформы. Для того чтобы создаваемые трансляторы обладали большей гибкостью принято разделять их на две части: универсальный анализатор, подготавливающий внутреннее представление программы и генератор исполняемого кода, который формирует исполняемый код выбранной платформы. При изменении целевой платформы достаточно будет заменить эту вторую часть транслятора, для того чтобы получить исполняемые файлы программы для новой платформы.

  1. Выполнение поставленной задачи


Разработку транслятора для решения поставленной задачи будем вести последовательно реализуя вышеописанные этапы трансляции. Т.е. необходимо создать анализатор, состоящий из сканера и синтаксического анализатора, и генератора исполняемого кода для абстрактной стековой машины.
3.1 Создание сканера
Логика работы сканера очень хорошо описывается с помощью конечного автомата, который выполняет распознавание символьных цепочек – лексем исходного языка. Распознав очередной токен, сканер добавляет его в последовательность символов представляющих собой промежуточное представление исходной программы. На рисунке 2 приведена схема такого автомата.

Работа автомата заключается в последовательном чтении символов входного текстового потока и выбора варианта перехода в новое состояние согласно поступившему на вход символу. Часть состояний помечена как особенные: достижение одного из таких состояний означает, что на вход была подана цепочка, которая представляет собой определенный токен языка программирования и его необходимо поместить в список уже найденных лексем. После этого продолжается поиск новых токенов до тех пор, пока на входе автомата не появится символ конца файла, означающий, что весь текстовый файл был обработан.

Необходимо отметить, что если представленный очередной символ входного текста не совпадает ни с одним из возможных символов перехода из текущего состояния, считается, что в исходном тексте содержится ошибка и текущий токен не может быть распознан. В этом случае осуществляется сброс состояния сканера путем поиска во входном потоке первого символа-разделителя с которого будет продолжен разбор, а в отчете создается запись об обнаруженной ошибке.

В результате работы сканера анализатор получает последовательность токенов языка составляющих программу. Каждый токен относится к определенному типу: идентификатор, ключевое слово, число, оператор и т.д. и обладает списком присущих данному типу свойств. Эта последовательность и является промежуточным внутренним представлением программы в трансляторе и передается для проведения разбора и проверки на корректность на вход синтаксического анализатора.
Переход, не убирающий символ из потока.
Состояние, попадание в которое означает, что распознан токен.
Безусловный переход в начальное состояние Start.
Переход в состояние Getident по символам letters, digits.

0

letters

letters ˅ digits

_ ˅ small

Ident
capital

E

l

s

e

n

d

n

g

B

I,W,D,F,L

… … …

spacers

Keyw
spacers

spacers

spacers

0

0

GenSymb

GetIdent

W84Keyword

(

!*

*

{

}

0

0

*

)

simplespecs
Op
:
Lop
0

0

GenSpecs

=
<
>
&
&
|
|
!
W84>

W84=

W84&

W84|

W84!*

!>
Skip1

Skip2

ComEnd1

ComEnd2

W84)

specs
digits

digits

.

digits

spacers

spacers

Rnum
Inum
spacers

eof

0

0

0

Start

DotedNum

GenNum

Stop

letters = { A..Z, a..z, _ }

capital = { A..Z }

small= { a..z }

digits = { 0..9, }

specs = { +, -, *, /, (, ), =, !, &, |, {, } , <, > }

spacers = { whitespace, tab, eol }


3.2 Создание синтаксического анализатора
Выделенные сканером лексемы языка должны образовывать правильные фразы языка. Синтаксически правильные конструкции распознаются как оператор или блок операторов языка, последовательность которых образует тело программы. Задача синтаксического анализатора состоит в том, чтобы распознавать конструкции языка в тексте программы, представленном в виде последовательности токенов. В случае, если в каком-то месте данной последовательности нарушаются правила грамматического построения, то возникает ошибка, о которой анализатор должен сообщить пользователю.

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

Приведём исходную леворекурсивную грамматику к праворекурсивному виду.


::= "" |
::= "Bgn" "End"
::=

::= | ε
::= "!" |

::= "&&" | "||" | ">" | "<" | "=" | "<>" | "+" | "-" | ε
::=

::= "*" | "/" | ε
::= | | "(" ")"
::=

::= "+" | ε
::= ":="

::= |
::=

::= | ε
::= "Float" | "Long"
::= | "Include" | "If" "(" ")" "Else" | "While" "Do"

На следующем шаге определим значения функций First и Follow для каждого нетерминального символа грамматики (таблица 1), а также составим саму таблицу

A

First(A)

Follow(A)

program

{“”, First(decs)} = {“”, Float, Long, ε}




decs

{First(d)}

{Bgn}

d

{First(std_type),ε} = {Flat, Long, ε}

{Bgn, Float, Long}

std_type

{Float, Long}

{ identifier }

cmp_stmnt

{Bgn}

{identifier, number, (, !, If, Else, While, Include}

stmnt_sq

{First(ss), ε}

{End}

ss

{First(stmnt)}

{End}

stmnt

{First(assume), Include, If, While }

{End, identifer, Include, If, While}

assume

{identifier}

Follow(stmnt)

as_what

{First(exp),First(string_e)} = {!,identifier, number, C, string}

Folow(stmnt)

exp

{!,First(term)} = {!,identifier, number, (}

{), Do, Follow(stmt)}

e

{&&, ||, <, >, =, <>, +, -, ε}

Follow(exp)

term

First(factor)

{&&, ||, <, >, =, <>, +, -, Follow(e)}

t

{*, /, ε}

{*, /, ), Follow(term)}

factor

{identifier, number, (}

{&&, ||, <, >, =, <>, +, -, *, /}

string_e

{string}

Follow(as_what)

str

{+, ε}

Follow(string_e)




Таблица 1 – Функции First и Follow грамматики языка





3.3 Текст программы
Ниже представлен
3.4 Инструкция программиста
Программисту
3.5 Инструкция пользователя
Пользователю
3.6 Текстовый пример

В качестве
Заключение
Реализация


Список использованных источников


  1. И. Братко «Программирование на языке Пролог», Мир, 1990;

  2. http://e-maxx.ru/algo/euler_path - алгоритмы дискретной математики;

http://ru.wikipedia.org - Свободная энциклопедия Википедия. Статья «Эйлеров цикл»;

Аннотация
ыаыа

Добавить документ в свой блог или на сайт

Похожие:

Пояснительная записка к курсовой работе по курсу «Теория языков программирования и методы трансляции» Выполнил студент гр. 230661 iconПояснительная записка к курсовой работе по курсу «Теория языков программирования...
Язык программирования — формальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет...

Пояснительная записка к курсовой работе по курсу «Теория языков программирования и методы трансляции» Выполнил студент гр. 230661 iconПояснительная записка к курсовой работе по дисциплине «Теория языков...
Представление основных операторов(описанных в разделе семантики) с помощью тетрад 34

Пояснительная записка к курсовой работе по курсу «Теория языков программирования и методы трансляции» Выполнил студент гр. 230661 iconПояснительная записка к курсовой работе по дисциплине «Интеллектуальные подсистемы сапр»
Пояснительная записка к курсовой работе 10 страниц, 2 рисунка, 1 таблица, 3 источника

Пояснительная записка к курсовой работе по курсу «Теория языков программирования и методы трансляции» Выполнил студент гр. 230661 iconПояснительная записка к курсовой работе по дисциплине «Алгоритмизация...
Сеть книжных магазинов. – Челябинск: юурГУ, ЭиП-208, 2012. – 50 с., 13 ил., 1 прил

Пояснительная записка к курсовой работе по курсу «Теория языков программирования и методы трансляции» Выполнил студент гр. 230661 iconПояснительная записка к курсовой работе по дисциплине «технологии программирования»
Государственного образовательного учреждения высшего профессионального образования Российский химико-технологический университет

Пояснительная записка к курсовой работе по курсу «Теория языков программирования и методы трансляции» Выполнил студент гр. 230661 iconПояснительная записка к курсовой работе по дисциплине «Теория электрической связи»
Целью курсовой работы является получение навыков по вычислению параметров системы связи, анализу полученных результатов, а также...

Пояснительная записка к курсовой работе по курсу «Теория языков программирования и методы трансляции» Выполнил студент гр. 230661 iconОтчет по лабораторной работе №2 по курсу «Моделирование систем» студент гр. 230661
Изучение объектно-ориентированного моделирования и исследование процесса построения диаграмм использования и диаграмм взаимодействий...

Пояснительная записка к курсовой работе по курсу «Теория языков программирования и методы трансляции» Выполнил студент гр. 230661 iconПояснительная записка к контрольно-курсовой работе по курсу «Человеко-машинное взаимодействие»
...

Пояснительная записка к курсовой работе по курсу «Теория языков программирования и методы трансляции» Выполнил студент гр. 230661 iconПояснительная записка к курсовой работе по дисциплине «Теория автоматов»
Курсовая работа по теории автоматов выполняется с целью закрепления ранее полученных знаний, приобретения навыков и умений самостоятельного...

Пояснительная записка к курсовой работе по курсу «Теория языков программирования и методы трансляции» Выполнил студент гр. 230661 iconПояснительная записка к курсовой работе по дисциплине «Теория автоматов»
Ученик может исправить полученную оценку. Завуч может добавить информацию о новом учителе или ученике, а также удалить о выбывших....

Вы можете разместить ссылку на наш сайт:
Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
www.vbibl.ru
Главная страница