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

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




































Главная

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

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


посмотреть текст работы


скачать работу можно здесь


полная информация о работе


весь список подобных работ


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

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

Разработка программного приложения для решения информационно-логических задач
1. Разработка технического задания на проектирование
1.2 Определение требований к программе
1.3 Предварительный выбор метода решения задачи
1.4 Определение требований к системе
1.4.2 Требования к техническому и программному обеспечению
2. Проектирование программного приложения
2.1 Разработка технологии обработки информации
2.2 Разработка структуры и формы представления данных
2.3 Разработка алгоритма решения задачи
2.4 Разработка программы решения задачи
2.4.1 Выбор инструментальных средств
2.4.2 Разработка структуры программы
2.4.3 Проектирование программных модулей
2.4.4 Проектирование программного интерфейса
2.4.5 Обеспечение надежности программы
2.5 Определение конфигурации технических средств
2.6.2 Процесс тестирования программы
В настоящее время, с развитием информационных технологий, происходит их интеграция в все сферы жизни общества. Развитие телекоммуникаций и глобальной сети Internet ускорили этот процесс. Различные технологические процессы управляются при помощи информационных технологий. Глобальная сеть позволила связать воедино множество компьютеров по всему миру, что позволило обмениваться различной информацией.
Появление мультимедиа технологий позволило улучшить и ускорить процесс обучения человека, путём создания наглядных моделей изучаемого объекта.
Но все возможности информационных технологий реализуются при помощи программного обеспечения(ПО). Именно оно определяет весь спектр выполняемых задач при применении информационных технологий. Поэтому качество ПО влияет на надёжность информационных систем, а также на скорость выполнения задачи и на результативность. Поэтому проектированию ПО уделяется должное внимание, так как правильно спроектированное ПО залог безотказной работы оборудования, что актуально на сложных технологических объектах, например, атомные электростанции, системы управления дорожным движением и движением поездов, системы управления космическими кораблями.
Но программное обеспечение должно быть ещё создано, поэтому существует на сегодняшний день достаточное количество средств разработки ПО. Они помогают программистам в разработке тем, что позволяют ускорить процесс разработки, а также облегчить его, а также автоматизировать некоторые стадии процесса разработки. Одна из особенностей средств разработки -- это проведение синтаксического анализа набираемого программистом кода. Система вылавливает синтаксические и логические ошибки, допущенные программистом, и указывает причину ошибки.
В настоящей курсовой работе изложено о решении задачи синтаксического анализа простой программы, нахождение синтаксических ошибок в тексте программы и выводе данных о местоположении ошибки в тексте.
Также рассмотрена программа анализа арифметического выражения, и проверка его на сумму или разность. Текст данной программы используется в качестве тестового образца для программы синтаксического анализа.
Рассмотрена технология создания программных приложений синтаксического анализа, алгоритмы решения задачи, требования к аппаратному и программному обеспечению, а также структура обработки и хранения информации.
1. Разработка технического задания на проектирование
В данном курсовом проекте требуется проверить, является ли заданное арифметическое выражение суммой(разностью). Также необходимо разработать приложение, осуществляющее синтаксический анализ простой программы, содержащей следующие элементы: типы float, операторы if...goto, if...else, switch, описание библиотек, описание переменных, арифметические и логические выражения, функции ввода и вывода. В процессе синтаксического анализа требуется проверить разделение операторов символом ”;”, парность скобок ”(…)”, ”[…]”, ”{…}”, правильность оформления комментариев вида ”/*...*/”, переменные должны соответствовать заданному типу и состоять из одного символа латинского алфавита, расположить все операторы на отдельных строках с соблюдением правил отступа.
Решение этой задачи требует знаний синтаксиса и семантики языка C, а также знаний по обработке текстовых строк и файлового ввода и вывода. Сложность задачи состоит в правильности и оптимальности построения алгоритма решения задачи. Необходимо организовать проверку парности скобок в текстовом документе, а также контроль объявления переменных. Также в процессе решения задачи синтаксического анализа необходимо организовать вывод диагностических сообщений о причине ошибки, что влияет на сложность решения задачи.
Несмотря на то, что эта задача уже давно решена в средах разработки, в рамках данного курсового проекта это абсолютно новая и актуальная задача. Можно создать программу обработки арифметических выражений.
Сложность решения задачи анализа арифметического выражения состоит в том, что надо грамотно определить парность скобок и правильность расстановки знаков арифметических операций.
1.2 Определение требований к программе
Для нормального и надёжного функционирования программы должны быть выполнены ряд требований, определённых используемой программной средой и обрабатываемыми данными.
Программа анализа арифметического выражения должна анализировать арифметические выражения длинной не более, чем 256 символов. Это ограничение связано с выделением места в оперативной памяти под строку, состоящей из 256 символов, и с тем, что ввод данных программы производиться из консоли, а так как консоли не поддерживают команды длиной более 256 символов, то вводиться это ограничение. Во вводимых данных должны быть правильно расставлены скобки, иначе программа анализа выражения выдаст сообщение об ошибке с сообщением, что неправильно расставлены скобки. Должны быть правильно расставлены знаки арифметических операций. На неправильно поставленные знаки программа реагирует выдачей сответствующего сообщения о ошибке. Не должно быть вложенных друг в друга скобок более, чем в три раза. Это усложняет процесс анализа выражения на непарность скобок. Арифметическое выражение не должно быть вложено в скобки, если это не изменяет смысл выражения. Допустимые для ввода символы: “+“, “-“, “*“, “/“, “(“, “)”. При вводе иных символов будет выведено сообщение об ошибке.
Требования к программе синтаксического анализа текста простой программы состоят в следующих условиях. Длина строки кода программы не должна превышать 80 символов. Использование длинных строк усложняет процесс чтения текста программы, а также процесс отладки, так как программа синтаксического анализа выводит причину ошибки и номер строки с ошибкой. Если записать несколько операторов в одну строку, то найти причину ошибки будет трудно, поэтому и вводиться данное ограничение. Описание всех библиотек и инициализация переменных должны производиться строго в начале программы. Простая программа не должна содержать вызовов других функций, кроме функций ввода и вывода, находящихся в библиотеках. При открытии блока с использованием символа “{” и при закрытии “}”, данные символы должны находиться на отдельных строках, и ничего не должно также присутствовать на них. Операторы заканчиваются символами “;“ и “:“, и последующий код должен быть перенесен на новую строку.
В функциях ввода и вывода должны правильно указываться типы данных, наименование переменных должно соответствовать условиям задачи. Комментарии не могут располагаться внутри операторов. Многострочные комментарии во избежание неправильной работы программы нельзя располагать в пределах функции main. Максимально возможное число инициализируемых переменных равно четырем.
Использование неинициализированных переменных не допускается. При инициализации имя переменной должно быль не более одного символа. Присваивание значения переменной во время её инициализации запрещается. Инициализация должна завершаться символом «;».
Использование операторов должно завершаться символом «;». При использовании оператора «goto» не должна использоваться больше, чем одна метка. При использовании оператора switch, оператор «case» должен в качестве аргументов иметь константу, а завершаться символом «:». Не должно использоваться вложенных друг в друга конструкций «switch». При использовании оператора «if» обязательно должен ставиться в соответствие оператор «else». Не должно использоваться вложенных операторов «if» во избежание выдачи некорректных результатов.
Что касается надёжности программ, то программа должна уметь обрабатывать любые правильные входные данные, и сигнализировать о введении неправильных данных. Программа должна быть устойчива от намеренного ввода ошибок таких как: установка многострочного комментария в операторы, непарность скобок при операциях с массивами, блоками, функциями, арифметическими выражениями. Программа должна точно и корректно возвращать результат ошибки и строку, содержащую ошибку.
В программе синтаксического анализа исследуемый файл с кодом простой программы должен находиться в том же каталоге, что и исполняемый файл программы синтаксического анализа.
Средства разработки данных программ должны поддерживать язык C и иметь возможность компиляции исходного кода программ под описанные выше платформы.
1.3 Предварительный выбор метода решения задачи
При решении задачи анализа арифметического выражения и синтаксического анализа нам понадобиться выработать метод, которого необходимо придерживаться при разработке программного обеспечения.
Так как эта задача уже решена в компиляторах, то рассмотрим некоторые существующие методы решения задач. После этого осуществим описание предварительного метода решения задачи.
При решении задачи анализа арифметического выражения необходимо первоначально проанализировать, чтобы не было знаков на концах арифметического выражения. Исключение составляет только знак “-“, который может находиться только в начале выражения. Суммой считается выражение, где все слагаемые соединены между собой знаком сложения “+“. Разностью считается аналогично, только со знаком “-“. Если все знаки одинаковы, то происходит определение принадлежности к сумме или к разности. Также помимо знаков сложения и вычитания будут попадаться другие знаки, такие как: “*“, “/“, “»“. Они будут игнорироваться, а результат анализа будет считаться по преобладанию в выражении знаков сложения или вычитания.
Следующий шаг - это избавление от скобок. Так как скобки можно считать как слагаемое, то находящимся внутри них содержимым можно пренебречь. Поэтому производиться проверка на парность скобок. Если будет обнаружено несоответствие парности скобок - будет выведено сообщение о неправильности введенного арифметического выражения. Выражение, содержащееся в скобках не анализируется, проверяется только наличие запрещённых знаков. Избавление от скобок реализуется путем подсчета количества открываемых и закрываемых скобок.
В программе синтаксического анализа текста простой программы метод решения следующий. Загрузка из файла строк посимвольно и хранение их в массиве. Это облегчает доступ, а также вывод местоположения ошибки. В первую очередь проверяются одно строчные и многострочные комментарии, чтобы сузить диапазон анализа. Проверка наличия функции «main», а также проверка парности скобок “(…)“, “[…]“, “{…}“, а также проверка парности кавычек и оформления комментариев вида “/*…*/“. Поиск вызова функций ввода и вывода и сопоставление с подключенными библиотеками. Далее следует анализ операторов, входящих в текст программы. На этом этапе происходит анализ на инициализацию используемых в строке кода переменных, проверку использования переменных в этих операторах. Если используется не инициализированная переменная - выводится сообщение об ошибке. Проверка нахождения операторов в пределах функции main. Также производиться поиск переменных и операторов, определенных в условии задания.
При форматировании текста программы убираются повторяющиеся пробелы и выставляются правильные отступы во время проверки на парность фигурных скобок. Комментарии сохраняются, но входящий в них текст не проверяется. В коде операторов ставятся необходимые пробелы.
Так как программа позволяет использовать внешние файлы с любым расширением, то во избежание неправильной работы программы запрещается вводить нетекстовые и пустые (размер которых равен нулю) файлы.
Использование вышеперечисленного метода решения задачи позволит обрабатывать любые тексты простых программ, согласованные по содержанию с условием данной курсовой работы, несмотря на введённые ограничения.
В следующих разделах настоящего курсового проекта следует подробное описание создания программ на основе данного метода решения задачи.
Для описания анализируемых конструкций языка используются расширенные синтаксические формы Бэкуса-Наура (РБНФ). Опишем с их помощью синтаксические конструкции для анализируемого арифметического выражения.
Рисунок 1 - РБНФ инициализации алфавита
Опишем процесс анализа суммы или разности.
Рисунок 2 - Анализ арифметического выражения
Изучив диаграммы, можно получить полное представление о том, как происходит анализ синтаксиса в программе анализа арифметического выражения. Запишем диаграммы в виде металингвистических формул. Для диаграммы на рисунке 1 она будет выглядеть следующим образом:
<Буква> ::= “a” | “b” | “c” | “d” | “e” | “f” | “g” | “h” | “i" | “j” | “k” | “l” | “m” | “n” | “o” | “p” | “r” | “s” | “t” | “u” | “v” | “w” | “x” | “y” | “z” | “A” | “B” | “C” | “D” | ”E” | “F” | “G” | “H” | “I” | “J” | “K” | “L” | “M” | “N” | “O” | “P” | “R” | “S” | “T” | “U” | “V” | “W” | “X” | “Y” | “Z” | “0” | “1” | “2” | “3” | “4” | “5” | “6” | “7” | “8” | “9” | “/” | “*” | “-“ | “+”.
В данном случае перечисляются все разрешенные для написания выражения символы.
Запишем металингвистическую формулу для диаграммы, указанной на рисунке 2.
<Множитель> ::= <Константа> | “(” <Выражение> “)”.
<Арифметическое выражение> ::= <Множитель> {(“+” | “-”) <Множитель>}.
1.4 Определение требований к системе
1.4.1 Определение требований к системе в целом
При эксплуатации программы должны соблюдаться требования к программе, описанные в пункте 1.2 настоящего курсового проекта. Поэтому работающий с программой пользователь должен предварительно ознакомиться с ограничениями на область применения программы, чтобы программа возвращала требуемый результат.
Также пользователь должен корректно завершать работу программы для того, чтобы избежать потерь информации, а именно исследуемых файлов для синтаксического анализа. В результате некорректного завершения программы возможна не только потеря результатов форматирования текста, но и потеря содержимого файла с исходной программой.
Разработанная программа имеет интерфейс командной строки. Следовательно, ввод и вывод информации происходит через терминал. Это сделано для того, чтобы уменьшить количество необходимых библиотек, необходимых для функционирования программы. Поэтому теоретически программа может быть скомпилирована на разные операционные системы, но в качестве целевой ОС используется Microsoft Windows.
1.4.2 Требования к техническому и программному обеспечению
Для запуска программы требуется IBM - совместимый компьютер с установленной на него 32-х разрядной операционной системой Microsoft Windows XP или старше. Компиляция осуществляется с помощью свободного компилятора MinGW 3.4.2, распространяемого по свободной лицензии GNU GPL. Это обеспечит патентную чистоту проектного решения, так как выбор компилятора довольно важен для выполнения курсовой работы. Нет зависимостей, от каких либо сторонних библиотек, так как MinGW -- это версия компилятора GCC для Windows. Необходимый для работы код помещается в исполняемый файл. В программе используется язык С стандарта С 89. В программе синтаксического анализа происходит анализ программ на языках С и С++. В силу своей похожести есть возможность анализа языков стандартов С 89 и С 99, так как не используются дополнительные функции, содержащиеся в языке С++.
2. Проектирование программного приложения
2.1 Разработка технологии обработки информации
В процессе своего функционирования программа производит ввод информации и вывод результатов преобразований во внешние файлы. Для корректного ввода и функционирования программы, необходимо соблюдать требования к программе, описанные в пункте 1.3.
Программа работает с двумя файлами, в первом находиться введенный заранее текст простой программы на языке С. Во втором файле находиться результат форматирования текста, содержащегося в первом файле. Пользователю предоставляется возможность выбрать файл для анализа путем ввода его имени и расширения, а затем ввести имя сохраняемого файла.
При вводе данных используется пакетный режим. По сравнению с интерактивным режимом он имеет ряд преимуществ и недостатков.
- Файл для анализа полностью считывается в начале работы программы и далее не используется, что уменьшает вероятность потери данных при сбое программы, а файл с форматированным тестом записывается в конце работы программы;
- Защита от несанкционированного изменения текста файлов в процессе работы программы, так как введенные данные хранятся в оперативной памяти.
- Пакетная запись, в отличие от интерактивной, реже обращается к постоянным запоминающим устройствам (ПЗУ), то актуально при использовании в качестве ПЗУ накопителей на основе Flash-памяти.
- В оперативной памяти приходится хранить большой объем данных, что актуально при анализе текстов больших программ.
- При сбое в процессе работы программы теряются промежуточные результаты работы программы.
При обработке данных в оперативной памяти обработка данных разделяется на операции обработки данных. Кроме операции ввода или чтения данных используются операции сдвига символов, поиск необходимого фрагмента текста в строке. На основе этих трех операций реализуются операции обработки синтаксиса, такие как: исключение лишних пробелов, проверка правильности расположения скобок, обработка комментариев, обработка операторов, выравнивание текста программы в соответствии с правилами.
Ввод данных из файла реализуется посимвольным считыванием данных из файла и их запись во внутреннее хранилище информации в строку. При обнаружении символа, финализирующего строку, данных начинают считываться в следующую строку во внутренне памяти.
Операция ввода и чтения данных - базовая операция, позволяющая работать с данными, указывая координаты ячейки.
Смысл операции сдвига символов заключается в сдвиге, относительно указанного курсора, всех символов на N позиций вправо либо влево. Используя эту операцию, реализуется исключение лишних пробелов, выравнивание текста программы, освобождение места для записи какого-либо символа.
Операция поиска текста в строке используется для упрощения поиска синтаксических конструкций в тексте. На базе этой операции реализованы операции обработки операторов, требующие локализовать место, где встретился оператор.
Операция проверки скобок позволяет предотвратить некорректную работу программы в случае введенных неправильно данных.
Обработка комментариев позволяет сделать текст в теле комментариев “невидимым“ для операций обработки операторов и скобок.
Обработка операторов - наиболее важная операция, позволяющая осуществить синтаксический анализ текста программы и вывод сообщений об ошибках, если они имеются.
Выравнивание текста программы подготавливает информацию к выводу в файл на основе входной и внутренней информации, и реализует правила отступа и переноса в тексте.
Все вышеописанные операции, кроме операции обработки операторов, являются подготовительными, так как подготавливают считанную из файла информацию, для синтаксического анализа, представляя ее в более удобной для анализа форме. После выполнения всех операций, и особенно операции выравнивания текста, информация готова к выводу. Её вывод осуществляется посимвольным считыванием текста внутренней информации. Если встречается конец строки, то начинает записываться следующая строка.
Структура технологического процесса обработки информации заключается в исполнении заданных операций над данными в соответствии с алгоритмом решения задачи, который более подробно описан в следующих пунктах пояснительной записки.
2.2 Разработка структуры и формы представления данных
Внешние данные программы представляются пользователем заранее. Программа синтаксического анализа читает и записывает файлы в кодировке Windows CP=1251. Использование кодировок, отличных от используемой в настоящем курсовом проекте, не разрешается.
Внутренние данные программы, где происходит основная обработка программы, хранятся в массиве, число столбцов которого равно 80 (определено требованиями программы), а количество строк зависит от размера файла. Перед считыванием файла программа производит анализ файла и устанавливает необходимое количество строк в массиве, после чего происходит посимвольное копирование в него информации из файла.
В качестве внутреннего хранилища данных, далее упоминается как внутренняя память, используется символьный массив, в каждый элемент которого можно записать только один символ.
Для хранения инициализированных переменных применяется структура, состоящая из полей: название переменной, ее тип, номер строки инициализации, номер столбца инициализации.
Перед считыванием внутренняя память заполняется нулями. Так как символ, имеющий в таблице ASCII символов нулевой код, является символом завершения строки, упрощается процесс обработки данных и вывод информации в файл, так как не требуется использовать специальный символ для завершения строки. Также можно запретить выполнение операции, записав в первый символ строки нуль. Подобный подход реализуется в операции обработки комментариев.
Процесс экспорта данных аналогичен считыванию из файла. В файл записываются байты, содержащие ASCII коды, которые интерпретируются текстовым редактором как символы. Поэтому, записав после конца оператора код перехода на новую строку, можно реализовать перенос операторов и фигурных скобок на новые строки, что используется операцией выравнивания. Использование такого подхода позволяет упростить программу, избежать резервирования строк и перемещения всех нижележащих строк на N позиций вниз.
Ввиду описанных выше преимуществ, использование во внутренней памяти массива символов позволяет более гибко работать с текстом, нежели если работать с представлением в виде массива строк.
Что касается программы анализа арифметического выражения, то все данные хранятся в массиве символов с количеством элементов равным 255. Запись в массив происходит из консоли при вводе текста пользователем. Среди операций обработки данных используется поиск необходимого символа в массиве. На базе этой операции реализована операция проверки парности скобок.
2.3 Разработка алгоритма решения задачи
Алгоритмом считается формальное описание конечной последовательности однозначно определенных действий, которые приводят к решению поставленной задачи, и переводят совокупность исходных данных в конечный результат, однозначно определяемый этими данными. Для разработки программного продукта необходимо составить алгоритм решения задачи, чтобы определиться с выбором действий для достижения поставленной цели, а также для получения требуемых результатов работы программы.
Разработаем алгоритм решения задачи анализа арифметического выражения.
Первоначально необходимо предусмотреть вариант ввода пользователем некорректных данных. Для этого будем использовать цикл «do{ }while()» в котором будем проверять введенное выражение на ошибки, а условием выхода из цикла будет считаться переменная «flag» (имеющая по умолчанию ложное значение) которой будет присваиваться истинное значение в случае обнаружения ошибки. После цикла находиться проверка выражения на сумму или разность.
Рассмотрим подробно тело цикла do. В его начале происходит обнуление переменной, используемой для выхода из цикла и ввод строки пользователем. После этого проверка - ввел ли пользователь пустую строку или нет. Далее происходит преобразование символов латинского алфавита из прописных в строчные, и проверка на случай ввода пользователем выражения, содержащего “()“. Проверка на наличие во введенной строке символов, удовлетворяющих алфавиту, и проверка парности скобок. Цикл будет повторяться, пока пользователь не введет корректные данные. При вводе корректных данных подсчитывается количество знаков “+“ и количество знаков “-“. Также программа следит, чтобы подсчет не происходил в скобках. После подсчета если преобладает больше знаков “+“, то выражение считается суммой, если “-“, то разностью, если нет арифметических знаков или количество плюсов и минусов совпадает, то выражение не содержит ни суммы, ни разности.
Алгоритм решения данной задачи представлен в виде блок-схемы в Приложении А;
Теперь разработаем алгоритм решения задачи синтаксического анализа текста простой программы на языке С.
Так как обработка данных во внутренней памяти происходит при помощи отдельных операций, то разумно рассмотреть отдельно алгоритм каждой операции, а под конец рассмотреть решение задачи используя рассмотренные алгоритмы операций.
Рассмотрим операцию сдвига символов. Она состоит из цикла, число повторов в котором равно количеству сдвигаемых символов. В теле цикла находится условие, по которому определяется направление сдвига. Если сдвигаем символы влево, то в цикле перебираются все элементы массива, начиная с того, где установлен курсор, в текущий элемент приравнивается следующий. Если сдвиг происходит вправо, то происходит аналогичный перебор, но в обратном порядке, а символ, где установлен курсор, записывается пробел.
Рассмотрим операцию поиска текста в строке. Эта операция будет возвращать результат. Если функция возвратит результат минус 1, введенное слово не найдено. Если слово найдено, то будет возвращаться индекс элемента строки, где произошло совпадение. Операция реализована циклом, где еще одним вложенным циклом проверяется наличие совпадений, и если есть совпадение - переменная-счетчик увеличивается на единицу. Если количество совпадений равно длине искомого слова - возвращается индекс строки, иначе минус 1.
В операции удаления пробелов в цикле проверяется - равен ли следующий элемент текущему, если равны, то проверяется на равенство пробелу, если равно - происходит сдвиг на один символ влево.
В операции поверки парности скобок проверяется парность скобок вида «( … )», «[ … ]», «{ … }», а также проверка парности кавычек «”». Подсчитывается в цикле количество открывающих и закрывающих скобок. Открывающая скобка увеличивает значение счетчика на единицу, закрывающая уменьшает на единицу. После тела цикла проверяется отличие счетчиков от нуля. Если оно найдено, то детально обрабатывается каждая строка и выводится индекс строки, где нарушена парность скобок.
В операции организуется поиск ячеек, содержащих символы «;» или «:», и, если они найдены, производится сдвиг на один символ вправо и запись в следующую ячейку символа перехода на новую строку. Также организуется поиск открывающих и закрывающих фигурных скобок. Если они найдены - происходит сдвиг вправо, на кратное двум, число пробелов, в зависимости от уровня вложенности.
В операции обработки библиотек организуется поиск ключевого слова, соответствующего наименованию библиотеки, в данном случае «stdio.h». Если библиотека найдена, то в найденной строке ищется директива «#include» и проверяется порядок их следования в тексте.
Операция сохранения в файл представляет передачу в цикле каждого ненулевого символа в файл.
Функция предварительной подготовки текста программы проверяет в цикле преобразование прописных букв в строчные, если таковые имеются, и проверку на допустимые знаки.
Операция обработки синтаксиса программы включает в себя несколько операций: обработку функции «main», обработку инициализации переменных, обработку функций ввода-вывода, обработку оператора «goto», «if», «switch», обработку арифметических выражений.
Рассмотрим подробнее эти под операции. Обработчик функции main ищет в тексте функцию «main», проверяет случай отсутствия её в тексте и многократную инициализацию. Если найдена функция main, то строка, где она обнаружена, запоминается в глобальной переменной для последующего использования.
Обработчик инициализации переменных следит за тем, чтобы длина имени переменной не превышала одного символа, а инициализация переменной завершалась пустым оператором. В структуру переменной также записывается имя переменной, ее тип, и местоположение в тексте.
Обработка функций ввода-вывода проверяет правильность их использования. Если используется функция ввода-вывода, но не объявлена соответствующая библиотека, то программа выдаст сообщение об ошибке. Также проверяется правильность вводимого отображаемого типов данных, правильность записи, и проверка на соответствие используемому типу данных.
Обработка оператора «goto» организует поиск в тексте этого оператора, при нахождении которого ищет метку, если метка не найдена или находится не в функции main, то выводится сообщение об ошибке.
Обработка оператора «if» организует поиск его в строке, проверку правильности условия: парность скобок, использование инициализированных констант, наличия в условии только арифметических и логических знаков. Также проверяется местоположение оператора «else», если он объявлен перед оператором «if» выводится сообщение об ошибке.
Обработка оператора «switch» организует поиск названия этого оператора в тексте, также проверяется наличие операторов «case» если «switch» не найден. При нахождении искомого оператора проверяется местонахождение оператора «case» перед «switch». Проверяется наличие констант после «case» и финализация оператора двоеточием.
Обработка арифметического выражения заключается в поиске в строке знаков, использующихся в арифметических выражениях. Производится проверка соединения констант или переменных арифметическими знаками.
Алгоритм решения данной задачи представлен в виде блок-схем в приложении Б.
2.4 Разработка программы решения задачи
2.4.1 Выбор инструментальных средств
Разработка программного приложения производилась с использованием языка С стандарта С89. Несмотря на то, что язык С устарел и вытеснен языком С++,
Проектирование приложения, осуществляющего синтаксический анализ программы курсовая работа. Программирование, компьютеры и кибернетика.
Учебное пособие: Денежное обращение в Российской Федерации
Реферат по теме Беларусь в составе Российской империи
Реферат На Тему Строение, Типы И Способы Удаления Волос
Судейство Соревнований В Баскетболе Жесты Судей Реферат
Шпаргалка: Концепции современного естествознания Шпаргалки Филин
Реферат На Тему Жизнь Чехова В Таганроге
Курсовая работа по теме Якісні прикметники в 'Енеїді' І. Котляревського: лексико-семантичний аспект
Творческий Путь Рахманинова Реферат
Лабораторная работа: Работа со следами ног, с инструментами (орудиями взлома). Изъятие образцов пальцев рук человека
Реферат На Тему Расчет Аэродинамических Характеристик Несущего Винта
Дипломная работа по теме Средневековая арабская письменность в Казахстане в X-XVII в.
Курсовая работа по теме Тактика допроса обвиняемого
Курсовая работа: Изучение памяти школьников разного уровня успеваемости
Мордкович 10 Профильный Контрольные Работы
Реферат Пословицы И Поговорки В Русском Языке
Курсовая работа по теме Ответственность в сфере рекламы
Эссе My Dream Job
Структура Характера Реферат По Психологии
Курсовая работа по теме Анализ труда и затрат рабочего времени персонала компании
Письма Эссе Интервью Купить
Аудит валютных средств и валютных операций - Бухгалтерский учет и аудит курсовая работа
Программирование в среде MathCad - Программирование, компьютеры и кибернетика контрольная работа
Игровой аспект культуры и искусства - Культура и искусство реферат


Report Page