Цель работы
Целью данной лабораторной работы является применение на практике алгоритма рекурсивного спуска на основе библиотеки обработки входной строки.
Инструменты
Для выполнения данной лабораторной работы Вам потребу-ется любой компилятор языка С, способный генерировать 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++
Лабораторные работы по алгоритмам и структурам данных
Стоимость: 1416 руб.
Тип: Лабораторная работа
Предмет: C/C++
Структуры и алгоритмы обработки данных в ЭВМ 040409
Стоимость: 1380 руб.
Тип: Лабораторная работа
Предмет: C/C++
Теория вычислительных процессов. ТУСУР. Романенко
Стоимость: 1416 руб.
Тип: Лабораторная работа
Предмет: C/C++
нужна лабораторная работа инженерная графика, выполнение в Dev C++ интересует стоимость построение ф
Стоимость: 1416 руб.
Компьютерная презентация – самый яркий момент в защите диплома. В недавнем прошлом выпускники должны были вручную создавать бумажные плакаты. И отнимало это почти столько же времени, сколько написание самой дипломной работы.На нашем можете почерпнуть для себя еще очень много полезной информации. Н…
Читать дальшеОформление лабораторной или практической работы по ГОСТу по физике, химии или любому другому предмету предполагает соблюдение определенных требований и рекомендаций, о которых мы нередко упоминали на нашем . Чтобы сдать работу с первого раза, нужно четко знать не только сам предмет, но и как оформи…
Читать дальше