Студенческий сайт КФУ - ex ТНУ » Учебный раздел » Учебные файлы »ПРОГРАММИРОВАНИЕ

Условные операторы и описание простых типов языка Си. Предиктивный анализатор

Тип: курсовая работа
Категория: ПРОГРАММИРОВАНИЕ
Скачать
Купить
Конструкции условных операторов if-else и простые типы языка Си. Общая схема работы компилятора. Алгоритм построения дерева разбора, строки вывода синтаксического разбора. Построение обратной польской записи как формы внутреннего представления программы.
Краткое сожержание материала:

Размещено на

АННОТАЦИЯ

Целью курсовой работы является:

- овладение и закрепление навыков построения лексического анализатора;

- овладение и закрепление навыков построения синтаксического анализатора;

- исследование принципов работы компилятора на каждом этапе обработки входной последовательности;

- овладение и закрепление навыков оформления документации;

- овладение и закрепление навыков трансляции в форму внутреннего представления: обратную польскую запись.

Перечень терминов:

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

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

ОПД - Обратная польская запись

ЯВУ - Язык высокого уровня

МП-автомат - автомат с магазинной памятью

ВВЕДЕНИЕ

Данный документ содержит описание и характеристику программы, написанной на основе задания на курсовую работу по теме «Условные операторы описание простых типов языка Си. Предиктивный анализатор».

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

В приложении 1 приведено техническое задание на курсовую работу.

В приложении 2 содержатся блок-схемы алгоритмов программы.

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

Приложение 4 содержит граф конечного автомата

Приложение 5 содержит листинг программы.

Данный программный продукт является программной реализацией компонентов транслятора (таких как лексический и синтаксический анализ) для некоторых конструкций языка программирования Си.

Использование этого программного средства направлено на:

- изучение принципов работы лексического анализатора,

- изучение принципов работы синтаксического анализатора,

- анализ принадлежности входных строк искомой грамматике,

- трансляцию заданной инструкции в форму внутреннего представления,

- оценку и исправление возможных ошибок,

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

1. Общие сведения

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

1).. Программа позволяет:

? считать введенную пользователем конструкцию языка и провести лексический анализ этой конструкции, результатом которого является псевдокод;

? на основе построенной грамматики провести синтаксический анализ, результатом которого являются цепочка вывода и дерево вывода;

? транслировать инструкции в одну из форм внутреннего представления: обратную польскую запись.

Для работы программы необходима операционная система Windows 9x / Me / NT /XR. Программа также предусматривает работу с нестандартным компонентом dxOrgChart (производится вывод деревьев в удобной для просмотра форме), для чего потребуется установить в Delphi палитру компонентов ExpressOrgChart.

1.1 Функциональное назначение

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

· Перевод исходной программы на внутренний язык компилятора, т. е. лексическая обработка;

· Синтаксический анализ входной последовательности на соответствие грамматике;

· Построение дерева разбора, строки вывода синтаксического разбора;

· Построение обратной польской записи как формы внутреннего представления программы.

1.2 Описание логической структуры

1.2.1 Общая схема работы компилятора

Компиляторы составляют существенную часть программного обеспечения ЭВМ. Это связано с тем, что ЯВУ стали основными средствами разработки программ.

Общая схема работы компилятора показана на рис.1, из неё видно, что процесс компиляции состоит из двух основных этапов - анализа и синтеза.

Рис.1 Общая схема работы компилятора

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

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

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

Эти этапы, в свою очередь, состоят из более мелких этапов, называемых фазами компиляции.

Фазы компиляции.

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

a) Лексический анализ:

Это основная часть компилятора, которая читает литеры программы на исходном языке и строит из них слова (лексемы) исходного языка. На вход лексического анализатора поступает текст исходной программы, а выходная информация передаётся для дальнейшей обработки компилятором на этапе синтаксического разбора.

б) Синтаксический разбор

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

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

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

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

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

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

Это фаза, непосредственно связанная с порождением команд, составляющих предложения выходного языка и в целом текст результирующей программы. Это основная фаза на этапе синтеза результирующей программы. Кроме того, генерация обычно включает в себя также оптимизацию - процесс, связанный с обработкой уже порождённого текста. Иногда оптимизацию выделяют в отдельную фазу компиляции, так как она оказывает существенное влияние на качество и эффективность результирующей программы.

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

1.2.2 Описание предметной области

Предметной областью являются конструкции условных операторов if-else и ?: и простые типы языка Си.

Данные операторы имеют следующий вид:

1) if условие оператор_1;

2) if условие оператор_1;

else оператор_2;

3) условие ? оператор_1;

4) условие ? оператор_1 : оператор_2;

Простые типы в языке Си объявляются так:

тип переменная_1, переменная_2, … переменная_n;

Рассмотрим элементы этих конструкций. Можно выделить следующие зарезервированные слова: if, else, ?, :.. После if находится выражение условие. Это выражение должно быть логического типа, т.е однозначно определяться как «истина» или «ложь». Если логическое выражение принимает значение «истина», то выполняется оператор оператор_1. Иначе, если есть зарезервированное слово else, то выполняется оператор оператор_2. В конструкции с оператором ?: перед зарезервированным словом ? находится выражение условие, которое также должно быть логического типа. Если это выражение принимает значение «истина», то выполняется оператор оператор_1. Иначе, если есть зарезервированное слово :, то выполняется оператор оператор_2. В описании переменных переменная_1, переменная_2, … переменная_n - список переменных в которых имена переменных разделены запятыми, тип - задает тип переменных из данного списка и является идентификатором типа.

1.2.3 Фаза компиляции «Лексический анализатор»

Лексический анализатор - это часть компилятора...

Другие файлы:

Синтаксический анализатор
Описание синтаксиса и семантики входного языка. Описание типов лексем, определение их синтаксиса. Построение диаграммы лексического анализатора, а так...

Язык программирования Pascal
История языка Pascal, его основные концепции. Линейный и циклический алгоритмы, типы данных. Условные операторы, операторы цикла. Программа вычисления...

Вводный курс в PHP
Синтаксис языка РНР, его переменные и чувствительность их имен к регистру. Гибкость в отношении типов переменных, преобразование типов. Набор основных...

Основы алгоритмизации и программирования
История развития языка программирования Pascal, его основные концепции. Вычисления в математических задачах. Изменение порядка выполнения инструкций п...

Структура языка SQL
Изучение и анализ функциональных возможностей СУБД. Структура языка реляционных БД SQL (Structured Query Language). Типы данных SQL. Операторы DDL - о...