Петрова Елена Александровна: Контрольные

Последнее изменение: 27/09/2018 17:21:37

== ЛОИ 4 курс ==
Требования к программе по грамматикам предшествования
Программа должна строить по заданной грамматике таблицу отношений предшествования, определять тип грамматики и производить восходящий анализ цепочек при подходящем типе. Исполняемый файл .exe должен иметь два параметра - пути к входному и выходному файлам. Архив .zip с исполняемым файлом, исходниками и readme нужно прислать до 1 декабря мне на почту elena.petrova@urfu.ru.

Формат входного файла:
Первая часть файла - описание грамматики, одна строка на одно правило вывода. Левая часть первого правила считается аксиомой. Нетерминалы - заглавные латинские буквы, терминалы - строчные латинские буквы. Формат строки:
<Нетерминал><пробел><Правая часть>

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

Формат выходного файла:
Первая часть - таблица отношений предшествования. Левый болт обозначается как ^, правый как $. Индексация в следующем порядке: нетерминалы в порядке появления в описании грамматики, терминалы в алфавитном порядке, болты. Столбцы отделены друг от друга пробелами и выровнены, т.е. ширина столбца равна наибольшему количеству отношений в этом столбце (см. пример). Отношения перечисляются в следующем порядке: <,>,=. Если между парой символов не выполняется ни одного отношения, на пересечении соответствующих строки и столбца ставится точка (.). В следующей строке после таблицы содержится тип грамматики - одна буква: S для простого предшествования, W для слабого, N если ни то, ни другое. Вторая часть отделена пустой строкой и содержит протоколы разбора строк из входного файла, если грамматика поддаётся анализу (т.е. её тип не N). Протокол состоит из строк вида
<содержимое стека без знаков отношений><пробел><остаток входной строки>
Начинаем с первого такта, т.е. первая строка протокола имеет вид:
^<пробел><входная строка>$
Последняя строка протокола в случае успешного разбора равна ^S$, в случае ошибки error.

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