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

Разработка синтаксического анализатора для заданного фрагмента кода

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

Размещено на

Размещено на

СОДЕРЖАНИЕ

ВВЕДЕНИЕ

1. СИНТАКСИЧЕСКИ ОРИЕНТИРОВАННАЯ ТРАНСЛЯЦИЯ

1.1 Общие понятия

1.2 Транслятор, интерпретатор, препроцессор

1.3 Трансляция, основанная на структуре текста. Идея Н. Хомского

2. ПРОГРАММНАЯ РЕАЛИЗАЦИЯ

2.1 Описание заголовочных файлов

2.2 Организация программы

2.3 Реализация программы

ЗАКЛЮЧЕНИЕ

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

ВВЕДЕНИЕ

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

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

1. СИНТАКСИЧЕСКИ ОРИЕНТИРОВАННАЯ ТРАНСЛЯЦИЯ

1.1 Общие понятия

Транслятор - это программа, которая переводит входной текст в некоторый выход. Например, входом транслятора может быть программа, написанная на языке программирования высокого уровня, таком как Паскаль или C, или каком-нибудь специализированном языке. Выходом транслятора может быть целевая программа на языке ассемблера, промежуточном языке или машинном языке, либо просто последовательность некоторых действий, предписанных входным предложением. Основной мыслью является, что для любых преобразований <вход-выход> современные трансляторы используют идею синтаксически ориентированной трансляции, состоящую в том, что для любого преобразования предложения входного языка транслятор должен использовать структуру этого предложения. Такой подход является обычным в науке: анализ и понимание сложной системы всегда явно или неявно опирается на структуру этой системы.

1.2 Транслятор, интерпретатор, препроцессор

Задачей транслятора является выполнить перевод, преобразования текста, написанного на некотором языке L, в некоторый выход. Если входной язык - алгоритмический, то входной текст называют входной программой.

Размещено на

Размещено на

Рисунок 1. Метод работы транслятора

При трансляции языков программирования, от транслятора может требоваться выполнение разных задач. Если задачей транслятора является трансляция в язык низкого уровня, например в машинный язык, или язык ассемблера, то такой транслятор называется компилятором. Другая возможная задача при трансляции программы на алгоритмический язык - непосредственное выполнение транслятором операторов исходного кода. В этом случае транслятор называется интерпретатором. Интерпретация используется для “командных языков”, каждый оператор которых - это вызов некоторой программы, например редактора исходного текста. Отличие компилятора от интерпретатора в том, что интерпретатор непосредственно выполняет последовательность команд, а компилятор построит и выдаст последовательность команд объектного языка, осуществляющих непосредственно вычисление значения.

1.3 Трансляция, основанная на структуре текста. Идея Н. Хомского

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

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

синтаксический трансляция языковый процессор

2. ПРОГРАММНАЯ РЕАЛИЗАЦИЯ

2.1 Описание заголовочных файлов.

Программа написана на языке С++ и разбита на несколько модулей. Каждый модуль отвечает за конкретный этап анализа входного текста:

1. “fail.h” - данный заголовочный файл отвечает за открытие исходного файла с кодом программы, исходного куска программы который нам надо проанализировать.

2. “leksik.h” - в данном заголовочном файле реализован лексический анализ, и присутствуют задатки синтаксического анализа.

3. “sintaksis.h” - в данном заголовочном файле реализован синтаксический анализ.

4. “prototype.h” - в данном заголовочном файле хранится функция, реализующая проверку на корректность содержимого файла.

2.2 Организация программы

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

Размещено на

Размещено на

Рисунок 2. Структура организации программы

Рисунок 2 полностью отражает все организацию программы и последовательность выполнения.

2.3 Реализация программы

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

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

Рисунок 3. Удачно законченный первый этап

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

Все символы или их последовательность заносятся в контейнер “list”, и при работе синтаксического анализатора, чтение даны будет осуществляться именно из этого контейнера. При помещении в него элементов, все пробелы и табуляции удаляются, в виду ненадобности.

Если же, в ходе проверке будет выявлена ошибка, недопустимая последовательность символов, то пользователь увидит соответствующее уведомление об ошибке. Уведомление состоит из номера строки, в котором произошла ошибка (номер строки мы получаем из счетчика, счетчик отдельная структура в которой хранится номер строки и текст ошибки).

Данная программа распознает, как лексическую ошибку неправильное расположение символ, в имени переменной. Имя переменной не может начинаться с цифры. Именно это является лексической ошибкой.

Рисунок 4. Ошибка во время лексического анализа

Третий этап это синтаксический анализ. Здесь происходит проверка на корректность данных считанных с контейнера. Каждый считанный элемент из list'а обрабатывается с помощью функции, которая работает по принципу автомата. С помощью набора условий и флагов, которые имеют только два состояния 0 и 1, программа методом рекурсивного спуска с возвратом определяет возможную правильную комбинацию элементов, при этом изменяются состояния флагов.

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

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

Разработка алгоритма работы синтаксического анализатора текста, а также базы данных синтаксических правил русского языка
Фундамент синтаксического анализа. Словоизменительные морфологические средства. Структура системы синтаксического анализатора текста и используемая ме...

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

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

Лексический и синтаксический анализатор языка высокого уровня
Проектирование программы-анализатора, состоящей из двух частей: лексического анализатора, разбивающего исходный текст программы на лексемы и заполняющ...

Разработка учебного транслятора с упрощенного текстового языка высокого уровня
Методы грамматического разбора при разработке учебного транслятора. Проектирование лексического анализатора и магазинного автомата. Программная реализ...