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

Синтаксически ориентированная трансляция: общие понятия; транслятор, интерпретатор, препроцессор. Программная реализация трансляции, основанной на структуре текста; идея Н. Хомского; языковые процессоры. Заголовочные файлы, алгоритмы и функции программы.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 04.06.2013
Размер файла 734,3 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

СОДЕРЖАНИЕ

ВВЕДЕНИЕ

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

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

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

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

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

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

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

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

ЗАКЛЮЧЕНИЕ

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

ВВЕДЕНИЕ

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

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

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

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

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

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

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

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

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

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

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

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

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

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

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

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

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

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

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

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

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

Рисунок 5 Синтаксический анализатор не обнаружил ошибок

Рисунок 6. Синтаксический анализатор обнаружил ошибку

ЗАКЛЮЧЕНИЕ

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

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

1. Ю.Г Карпов Основы построения трансляторов 2005 г.

2. Библиотека MSDN

3. Основы построения компиляторов: метод. Сост. Н.H. Смирнова С.Д. Тарасов; Балт. гос. техн. ун-т. - СПб., 2007.

Размещено на Allbest.r


Подобные документы

  • Программная реализация синтаксического анализатора произвольного текста. Матрица и дерево переходов для программы. Код программы с построчным комментарием. Порядок запуска среды разработки Visual Studio. Интерфейс и номера Лихтенштейна, скриншот.

    контрольная работа [855,1 K], добавлен 13.02.2014

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

    курсовая работа [697,2 K], добавлен 06.01.2013

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

    контрольная работа [47,8 K], добавлен 14.10.2012

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

    курсовая работа [2,0 M], добавлен 14.06.2010

  • Основные концепции языков программирования, механизмы типизации данных. Описание языков программирования и методов трансляции. Конечные автоматы и преобразователи. Общие методы синтаксического анализа. Формальные методы описания языкового перевода.

    курс лекций [5,5 M], добавлен 04.12.2013

  • Проектирование лексического и синтаксического анализаторов учебного языка. Правила преобразования логических выражений в ПОЛИЗ. Формирование триад, оптимизация их списка. Логическая структура программы. Тестирование модулей транслятора-интерпретатора.

    курсовая работа [1,3 M], добавлен 28.05.2013

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

    курсовая работа [45,0 K], добавлен 13.11.2009

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

    курсовая работа [69,1 K], добавлен 11.12.2015

  • Разработка учебного транслятора на языке программирования C# в среде объектно-ориентированного программирования Visual Studio 2012. Выделение лексем и построение цепочки символов на этапе синтаксического анализа. Функциональное тестирование программы.

    курсовая работа [406,8 K], добавлен 07.08.2013

  • Изучение устройства и механизма процессов в компиляторах и интерпретаторах. Понятие трансляции как процедуры перевода программного кода с языка Паскаль на язык С++. Описание интерфейса программы и автоматизация процесса построения диаграммы классов.

    курсовая работа [536,2 K], добавлен 03.07.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.