Курсовая работа: Конструирование модели лексического и синтаксического анализа

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

# include <iostream> # include <string> # include <ctime> using namespace std ; Void opF (int *ar , int * gogo){* gogo +=*id;}int main (){srand (time (NULL));intm =0 ; int arr [3] = { 3,4,2} ;string mas=”awd”;for (int i=0; I < 2; I ++){opF(& arr [i], &mmm)} float*m1=new float[m1]; for (int y=0; y < m; y ++){m1[y]=rand()%10;V}}=>

# include <iostream> # include <string> # include <ctime> using namespace std ; Void opF (int *ar , int * gogo){* gogo +=*id;}int main (){srand (time (NULL));intm =0 ; int arr [3] = { 3,4,2} ;string mas=”awd”;for (int i=0; I < 2; I ++){opF(& arr [i], &mmm)} float*m1=new float[m1]; for (int y=0; y < m; y ++){m1[y]=rand()%10;HV}}=>

# include <iostream> # include <string> # include <ctime> using namespace std ; Void opF (int *ar , int * gogo){* gogo +=*id;}int main (){srand (time (NULL));intm =0 ; int arr [3] = { 3,4,2} ;string mas=”awd”;for (int i=0; I < 2; I ++){opF(& arr [i], &mmm)} float*m1=new float[m1]; for (int y=0; y < m; y ++){m1[y]=rand()%10; A<<”_”<<I V}}=>

# include <iostream> # include <string> # include <ctime> using namespace std ; Void opF (int *ar , int * gogo){* gogo +=*id;}int main (){srand (time (NULL));intm =0 ; int arr [3] = { 3,4,2} ;string mas=”awd”;for (int i=0; I < 2; I ++){opF(& arr [i], &mmm)} float*m1=new float[m1]; for (int y=0; y < m; y ++){m1[y]=rand()%10; cout<<”_”<<I V}}=>

# include <iostream> # include <string> # include <ctime> using namespace std ; Void opF (int *ar , int * gogo){* gogo +=*id;}int main (){srand (time (NULL));intm =0 ; int arr [3] = { 3,4,2} ;string mas=”awd”;for (int i=0; I < 2; I ++){opF(& arr [i], &mmm)} float*m1=new float[m1]; for (int y=0; y < m; y ++){m1[y]=rand()%10; cout<<”_”<<id [const] V}}=>

# include <iostream> # include <string> # include <ctime> using namespace std ; Void opF (int *ar , int * gogo){* gogo +=*id;}int main (){srand (time (NULL));intm =0 ; int arr [3] = { 3,4,2} ;string mas=”awd”;for (int i=0; I < 2; I ++){opF(& arr [i], &mmm)} float*m1=new float[m1]; for (int y=0; y < m; y ++){m1[y]=rand()%10; cout<<”_”<<m1 [const] V}}=>

# include <iostream> # include <string> # include <ctime> using namespace std ; Void opF (int *ar , int * gogo){* gogo +=*id;}int main (){srand (time (NULL));intm =0 ; int arr [3] = { 3,4,2} ;string mas=”awd”;for (int i=0; I < 2; I ++){opF(& arr [i], &mmm)} float*m1=new float[m1]; for (int y=0; y < m; y ++){m1[y]=rand()%10; cout<<”_”<<m1 [y] V}}=>

# include <iostream> # include <string> # include <ctime> using namespace std ; Void opF (int *ar , int * gogo){* gogo +=*id;}int main (){srand (time (NULL));intm =0 ; int arr [3] = { 3,4,2} ;string mas=”awd”;for (int i=0; I < 2; I ++){opF(& arr [i], &mmm)} float*m1=new float[m1]; for (int y=0; y < m; y ++){m1[y]=rand()%10; cout<<”_”<<m1 [y] B}}=>

# include <iostream> # include <string> # include <ctime> using namespace std ; Void opF (int *ar , int * gogo){* gogo +=*id;}int main (){srand (time (NULL));intm =0 ; int arr [3] = { 3,4,2} ;string mas=”awd”;for (int i=0; I < 2; I ++){opF(& arr [i], &mmm)} float*m1=new float[m1]; for (int y=0; y < m; y ++){m1[y]=rand()%10; cout<<”_”<<m1 [y] Y}}=>

# include <iostream> # include <string> # include <ctime> using namespace std ; Void opF (int *ar , int * gogo){* gogo +=*id;}int main (){srand (time (NULL));intm =0 ; int arr [3] = { 3,4,2} ;string mas=”awd”;for (int i=0; I < 2; I ++){opF(& arr [i], &mmm)} float*m1=new float[m1]; for (int y=0; y < m; y ++){m1[y]=rand()%10; cout<<”_”<<m1 [y]

Заключение

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

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

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

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

Список литературы

1. «Теория автоматов», Карпов Ю. Г.;

2. «Основы построения трансляторов», Карпов Ю. Г.;

3. «Компиляторы: принципы, технологии и инструментарий», Альфред В. Ахо, Моника С. Лам, Рави Сети, Джеффри Д. Ульман;

4. «Теория языков программирования и методы трансляции», Ганичева О. Г.;

5. «Введение в теорию автоматов, языков и вычислений», Джон Хопкрофт, Раджив Мотвани, Джеффри Ульман;

6. Першиков В. И., Савинков В. М. Толковый словарь по информатике;

7. Вычислительная техника. Терминология.

Приложения

Приложение 1

МИНОБРАНАУКИ РОССИИ

федеральное государственное бюджетное

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

ЧЕРЕПОВЕЦКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

Институт информационных технологий

Математическое и программное обеспечение ЭВМ

Теория автоматов и формальных языков

УТВЕРЖДАЮ

Зав. кафедрой МПО ЭВМ

д. т.н. _________ Ершов Е.В.

«____» ___________2019г.

Конструирование модели лексического и

синтаксического анализа

Техническое задание на курсовую работу

Листов 9

Руководитель: доцент к.т.н., Ганичева О.Г.

Исполнитель: студент гр. 1ИСб-00-21оп

Фурсссов Г.А.

2020

1 Введение

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

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

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

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

2 Основания для разработки

Разработка продукта ведётся с задания преподавателя кафедры Математического и программного обеспечения ЭВМ по дисциплине «Теория автоматов и формальных языков» Ганичевой Оксаны Георгиевны.

Задание:

I. Построить лексический анализатор, который решает следующие задачи:

1) выделяет из текста входной программы все лексемы, входящие в заданную языковую конструкцию (согласно варианту);

2) идентификацию распознанных лексем;

3) выполняет дополнительные функции: удаление лишних пробелов, комментариев, подсчет количества строк в программе;

4) выявляет ошибки в написании лексем, выдает сообщения об ошибке (с указанием позиции ошибки и типа ошибки).

II. Построение лексического анализатора выполнить на основе конечного автомата.

III. По конечному автомату построить соответствующую ему регулярную грамматику.

IV. Построить КС-грамматику для заданного варианта задания.

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

VI. Записать формальное определение грамматики с использованием формы Бэкуса-Наура и синтаксических диаграмм в графическом виде.

VII. В работе программы предусмотреть диагностику и локализацию лексических ошибок.

3 Назначение разработки

Целью разработки является создание программного продукта - учебной программы для изучения принципов работы лексического и синтаксического анализаторов с целью закрепить материал, полученный в ходе изучения дисциплины «Теория автоматов и формальных языков». Назначение программного продукта - выделение из текста входной программы всех лексем, входящих в заданную языковую конструкцию; идентификация распознанных лексем; удаление лишних пробелов, комментариев; подсчет количества строк в программе; выявление ошибок в написании лексем и сообщение об этом (с указанием позиции ошибки и типа ошибки).

4 Требование к программе

1.1 Требования к функциональным характеристикам

1) Выделение из текста входной программы все лексемы, входящие в заданные языковые конструкции;

2) идентификация распознанных лексем;

3) выполнение дополнительных функций:

a. Удаление лишних комментариев, пробелов и знаков табуляции;

b. Подсчет количества строк в программе.

4) Выявление ошибки в написании лексем и информирование пользователя об ошибке с указанием её позиции и типа.

4.2 Требования к надежности

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

4.3 Условия эксплуатации

Требования устанавливаются исходя из условий хранения CD-диска.

Не следует:

1) Наносить на поверхность дисков различные жидкости;

2) брать компакт-диск за поверхность, предназначенную для записи;

3) подвергать воздействию загрязняющих веществ и агрессивных сред;

4) ронять, деформировать или подвергать механическому воздействию;

5) наносить на поверхность диска наклейки или различные материалы;

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

7) рисовать или делать записи на дисках не предназначенными для этого пишущими предметами;

8) оставлять диск после окончания работы с ним в приводе;

9) оставлять диск в выключенном компьютере.

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

4.4 Требования к составу и параметрам технических средств

Требования к параметрам технических средств определяются системными требования программного обеспечения Microsoft Visual Studio 2015:

-процессор с тактовой частотой 1,6 ГГц или большей;

- минимум 1 ГБ ОЗУ;

- 4 ГБ доступного пространства на жестком диске;

4.5 Требования к информационной и программной совместимости

1) Операционная система не ниже Windows 7 с пакетом обновления 1 (SP1);

2) наличие Microsoft Visual Studio 2015 и выше.

4.6 Требования к маркировке и упаковке

Требования не предъявляются.

4.7 Требования к транспортированию и хранению

Требования не предъявляются.

4.8 Специальные требования

Требования не предъявляются.

2. Требования к программной документации

Наличие пояснительной записки с приложениями:

1) техническое задание;

2) руководство пользователя (процесс запуска);

3) код программы.

6. Технико-экономические показатели

Не рассчитывается.

7. Стадии и этапы разработки

Стадии и этапы разработки программного обеспечения представлены в таблице (табл. П1.1).

Таблица П1.1 Стадии и этапы разработки ПО

Наименование этапа разработки

Сроки разработки

Результат выполнения

Отметка о выполнении

Создание обрабатываемого кода программы

14.02.2020

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

Выполнено

Разработка программного кода для обработки комментариев, пробелов и пустых строк

20.02.2020

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

Выполнено

Создание автоматной модели промежуточного представления

05.03.2020

Создание автоматной модели, выявляющая идентификаторы

Выполнено

Программирование конечного автомата (КА)

22.03.2020

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

Выполнено

Дополнение созданной ранее программы формированием таблиц с классами лексем.

07.04.2020

Программа помимо функций, выполняемых КА, выполняет формирование таблиц с классами лексем

Выполнено

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

15.04.2020

Программа строит дескрипторный код и псевдокод

Выполнено

Написать части лексического анализатора по обработке лексических ошибок

20.05.2020

Программа обрабатывает лексемы по имеющимся шаблонам и, в зависимости от неточности написания, обрабатывает ошибки

Выполнено

Составление КС-грамматики для синтаксического анализа

28.05.2020

Создана КС-грамматика и построены порождение и дерево разбора для заданной языковой конструкции (цикл for в языке С++)

Выполнено

Подготовка расчётно-пояснительной записки

05.06.2020

Расчётно-пояснительная записка по работе готова к сдаче

Выполнено

8 Порядок приемки и контроля

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

Источник: https://otherreferats.allbest.ru/download/1282040/