Цель работы
Целью данной лабораторной работы является применение на практике алгоритма рекурсивного спуска на основе библиотеки обработки входной строки.
Инструменты
Для выполнения данной лабораторной работы Вам потребу-ется любой компилятор языка С, способный генерировать 32-раз-рядные программы для той ОС, с которой Вы работаете. Для ОС Windows рекомендуется использовать бесплатную среду разра-ботки Microsoft Visual C++ Express. Основная Ваша работа будет заключаться в формировании программы перевода выражения в постфиксную запись, которая была разобрана на лекции. Для первичной обработки строк пред-лагается использовать модуль match.
Процедура рекурсивного спуска prim() { int s; if (match("(")) { if (expr()==0) return 0; if (!match(")")) { cerror(E_RIGHT_BRACKET); return 0; } } else if (a=numb(&s)) { printf(”%d ”, s); } else { cerror(E_EXPRESS_SINTAX); return 0; } return 1; } mult() { if (prim()==0) return 0; while (1) { if (match("")) { if (prim()==0) return 0; printf(” ”); } else if (match("/")) { if (prim()==0) return 0; printf(”/ ”); } else break; } return 1; } add() { if (mult()==0) return 0; while (1) { if (match("+")) { if (mult()==0) return 0; printf(”+ ”); } else if (match("-")) { if (mult()==0) return 0; printf(”- ”); } else break; } return 1; }
Модуль match Данный модуль предназначен для первичной обработки строк и позволяет выделять из строки лексемы. Здесь описаны интерфейсные функции модуля match.
void match_init(char* line); Процедура инициализации. Разбор строки всегда начинается с вызова этой функции. В качестве параметра передается входная строка.
void match_done(void); Процедура деинициализации. После разбора строки необхо-димо вызвать данную функцию.
int match(char *lit); Поиск указанной подстроки в начале входной строки. Если есть, то найденная подстрока удаляется и функция возвращает 1.
int amatch(char *lit, int len); Аналогично предыдущему, но дополнительно указывается длина подстроки. Это используется для того, чтобы различать выражения типа ’for’ и ’formula’, где первое, это ключевое слова, а второе — идентификатор.
int symname(char *sname); Ищет идентификатор (метку) во входной строке. Метка на-чинается с подчеркивания или буквы, далее следуют буквы, под-черкивание или цифры.
int number(int val[]); Ищет целое знаковое число во входной строке
void skipblanks(void); Пропускает последовательность пробельных символов (пробел, табуляция) во входной строке.
skipchars(void); Пропускает лексемы и следующие пустые символы. Ис-пользуется для обработки ошибок.
Задание
Вариант 3. Строки. Обеспечить поддержку строки. Строки записываются в кавычках. Дополнительно необходимо обеспечить ввод кавычки в виде последовательности из двух кавычек. На выходе строки выдавать в следующем формате:
string("")
где строка есть последовательность символов. Кавычка, если она была в исходной строке, должна быть заменена последовательностью символов \".
Например
"Hello World!" на выходе string("Hello World!") "Hello "
Тип: Лабораторная работа
Предмет: C/C++
Разработка программу с использование win api
Стоимость: 4400 руб.
Тип: Лабораторная работа
Предмет: C/C++
Лабораторная работ по дисциплине Структуры данных
Стоимость: 1140 руб.
При написании любой студенческой работы нужно правильно оформлять список использованной литературы. В статье рассказываем, какое значение у списка использованных источников в студенческих работах, и какие правила оформления списков литературы по ГОСТу в 2026 году. А в конце делимся примерами, как оф...
Читать дальшеЛитературный обзор — важная часть научного исследования. В статье рассказываем, какое значение имеет литобзор, и как писать литературный обзор по разным темам: медицине, менеджменту.Кстати, мы уже писали о том, . Еще больше полезных материалов из мира образования ищите на нашем . И не забывайте след...
Читать дальшеПредложение актуально на 16.10.2026