Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК по СПО.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.79 Mб
Скачать

Приложение 2. Вопросы для зачета по дисциплине “Системное программное обеспечение. Синтаксические анализаторы”

Первые вопросы билетов

  1. Функции работы со строками с ANSI C++. Практическая задача.

  2. Функции манипуляции строками ANSI C. Практическая задача.

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

  4. Принципы программирование поточного ввода вывода. Практическая задача.

  5. Работа со строками средствами Borland C++ Builder. Объектно-ориентированная концепция строчного анализа. Практическая задача.

  6. Работа со строками средствами MS Visual C++. Объектно-ориентированная концепция строчного анализа. Практическая задача.

  7. Потоки в Borland C++ Builder. Практическая задача.

  8. Стандартные потоки ввода вывода. Принципы реализации поточного ввода и вывода данных. Практическая задача.

  9. Файловый ввод вывод с использованием потоков. Практическая задача.

  10. Динамическая работа с памятью, используемая при работе со строками, порождение строчных объектов в Borland C++ Builder и MS Visual C++. Практическая задача.

Пример задачи к первому вопросу

Пример загрузки в данных из файла 4.txt в строку AnsiString типа и замена всех фрагментов "text" на фрагменты "текстового" в загруженном тексте и заполнение массива чисел, обнаруженными в тексте числами.

Вторые вопросы билетов

  1. Структура Lex программы. Практическая задача.

  2. Структура Yacc программы. Практическая задача.

  3. Принципы лексического разбора, заложенные в Yacc. Практическая задача.

  4. Принципы синтаксического разбора, реализуемые Lex.

  5. Описание грамматики языка при совместном использовании Yacc и Lex.

  6. Операторы в регулярных выражениях Lex. Практическая задача.

  7. Условные и безусловные правила Lex. Практическая задача.

  8. Литералы, терминальные и нетерминальные символы и иные объекты программы Yacc. Практическая задача.

  9. Использование в работе парсера значений произвольных типов. Практическая задача.

  10. Основные действия лексического анализатора. Практическая задача.

  11. Принципы реализации действий переноса и свертки в лексическом анализаторе Yacc. Практическая задача.

  12. Работа семантического стека лексического анализатора Yacc. Практическая задача.

  13. Конфликты перенос-свертка и свертка-свертка. Практическая задача.

  14. Создание приложений с парсером на основе Yacc. Практическая задача.

Пример задачи ко второму вопросу

Показать фрагменты программы, использующей различные типы переменных семантического стека при лексическом анализе.

Приложение 3. Методические указания к лабораторным работам по дисциплине «Системное программное обеспечение. Синтаксические анализаторы»

Введение

Данное методическое пособие предназначено для студентов специальности "Вычислительные системы и сети" по курсу "Системное программное обеспечение" (2 семестр) для выполнения лабораторных работ.

Для правильного выполнения работ необходимы знания теоретического материала по данному курсу, языков программирования (C++, Turbo Pascal) и навыки работы в средах Borland C++ Builder и Microsoft Visual Studio. Также для успешного выполнения задания необходимо изучение краткой теории к соответствующей лабораторной работе.

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

Лабораторная работа №1

Функции работы с потоками

Цель работы: освоить работу потоковыми функциями Borland C++ Builder для анализа и разбора текста.

Краткая теория:

Функции работы с потоками стандарта ANSI

Потоковые классы представляют объектно-ориентированный вариант функций ANSI-C, сгруппированных в файле-заголовке stdio.h. Источник или приемник данных определяется объектом потокового класса: для basic_ifstream связанный с объектом файл является источником, для объекта basic_ofstream он выступает в качестве приемника.

Потоковые классы делятся на три группы:

  • basic_istream, basic_ostream – общие потоковые классы;

  • basic_ifstream, basic_ofstream – потоковые классы для считывания и записи файлов;

  • basic_istringstream, basic_ostringstream – потоковые классы для объектов-строк.

Каждый потоковый класс поддерживает буферный объект для передаваемых данных. Базовым шаблонам классов basic_ios (для потоковых классов) и basic_streambuf (для буферных классов) передаются два параметра шаблона:

  • (charT) определяет символьный тип;

  • (traits) – объект типа ios_traits, в котором заданы тип и функции, специфичные для используемого символьного типа;

  • для типов char и wchar_t образованы соответствующие объекты типа ios_traits и потоковые классы.

Класс обеспечивает общие операции для ввода и вывода. Производные от него классы (istream, ostream, iostream) специализируют ввод-вывод с помощью операций форматирования высокого уровня.

Таблица 1 – Флаги формата

Флаг

Описание

Skipws

Пропускает при вводе пробелы и разделители.

left

Выравнивание вывода влево.

Right

Выравнивание вывода влево.

Internal

Дополнение после знака или указателя основания.

dec

Десятичное преобразование.

oct

Восьмеричное преобразование.

hex

Шестнадцатеричное преобразование.

showbase

Показывает в выводе индикатор основания.

showpoint

Показывает при выводе с плавающей точкой десятичную точку.

uppercase

Преобразует шестнадцатеричный вывод в верхний регистр.

showpos

Выводит с положительными числами символ '+'.

scientific

Добавляет к числам с плавающей точкой суффикс с показателем степени (E).

fixed

Для вывода чисел с плавающей точкой использует десятичную фиксированную точку.

unitbuf

После включения выводит все потоки.

stdio

После включения выводит stdout и stderr.

Таблица 2 – Функции-элементы

Функция

Описание

Constructor

Связывает данный streambuf с потоком или строит объект ios без соответствующего streambuf.

bad

Не 0 в случае ошибки.

bitalloc

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

eof

В конце файла возвращает ненулевое значение.

fail

Не 0 при неуспешном выполнении операции.

fill

Возвращает текущий символ-заполнитель или сбрасывает его, возвращает предыдущий символ.

flags

Сбрасывает текущие флаги форматирования.

good

Не 0, если биты состояния не установлены (то есть нет ошибок).

presicion

Возвращает текущую точность числа с плавающей точкой.

rdbuf

Возвращает указатель на streambuf, назначенный для данного потока.

rdstate

Устанавливает флаги в соответствии с заданным значением.

setf

Возвращает ранее установленные флаги.

sync_with_stdio

Смешивает файлы stdio и потоки iostreams. В новой программе этого использовать не следует.

tie

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

unseft

Очищает биты, соответствующие f, и возвращает значение, представляющее собой предыдущие установки.

with

Возвращает или устанавливает текущую ширину.

xalloc

Возвращает индекс в массиве ранее не используемых слов, которые можно применять как флаги форматирования.

init

Выполняет фактическую инициализацию.

selstate

Устанавливает все биты состояния.

Таблица 3 – Объекты потоковых классов

Класс

Объект

Поток данных

Устройство

istream

cin

stdin

Устройство ввода, по умолчанию –

Клавиатура.

ostream

cout

stdout

Устройство вывода, по умолчанию –

Дисплей.

ostream

cerr

stderr

Стандартное устройство вывода ошибок, по умолчанию – дисплей.

ostream

clog

stderr

Стандартное устройство вывода ошибок, по умолчанию – дисплей.

Вся необходимая дополнительная информация приводится в пунктах 11.1, 11.2, 11.3 настоящего УМК.

Задания:

В Borland C++ Builder разработать программу анализа текста и вывода его на экран.