Задание По Грамматикам (1119584)
Текст из файла
Задание по грамматикам
ПЕРВЫЙ стандартный ВАРИАНТ (3 – 5)
На вход программе подаётся Си-программа. Задачи:
-
отформатировать текст программы согласно “общему принципу красоты”;
-
все конструкции вида “if (0) <тело>” удалить из текста;
-
все конструкции вида “if (<любая ненулевая константа>) { … }” или “if (<любая ненулевая константа>) <одна команда>” преобразовать, выкинув ненужный ‘if (<любая ненулевая константа>)”
Например, операция вида:
if (10) a =9;
должна быть преобразована к виду:
a = 9;
-
все циклы вида “for (I = 0; I < <любая константа>; I++) <тело цикла>” преобразовать к эквивалентному циклу вида: «for (I = 0; I < <какая-то константа>; I+=2) <тело цикла>», с добавлением по окончании цикла (по необходимости) конструкции «if». Например, цикл вида:
for (I = 0; I < 10; I++) {
a[2*I] = 0;
}
должен быть преобразован к виду:
for (I = 0; I < 10; I+=2) {
a[I] = 0;
a[2*(I+1)] = 0;
}
-
[на “5” дополнительно] Вычислять константные арифметические выражения.
Пример:
int x = (4 + 5) * 2;
заменить на:
int x = 18;
Преобразуемая и преобразованная Си-программы на выходе и на входе должны работать идентично.
Замечания:
1) Оценки проставляются из расчёта.
«4» или «5» – программа сдана ДО зачётной недели.
«3» - программа сдана до зачёта, но с мелкими огрехами. Либо программа сдана в зачёт.
2) Можно писать программу на любом языке программирования: С/C++, Pascal, Asm, ит.д.
3) Совет: использовать языки программирования Coco/R или bison и flex. Изучение данных языков займёт часа четыре, сократит время написания программы на 30 часов.
4) Для описания синтаксиса языка Си можно использовать внешние источники.
Ссылки по теме:
http://ru.wikipedia.org/wiki/Coco/R - Coco/R описание с ссылками;
ftp://ftp.gnu.org/gnu/bison/ - bison;
ftp://ftp.gnu.org/non-gnu/flex/ - flex;
http://www.lib.ru/MAN/DEMOS210/lex.txt - документация;
http://www.lib.ru/MAN/DEMOS210/yacc.txt - документация;
http://docs.rinet.ru./YACC/yacc.html - документация.
Смежные ссылки:
http://www.techno.edu.ru/db/msg/16771/Lex-16.htm - лекция «Lex и yacc».
ВТОРОЙ аналитический/творческий ВАРИАНТ (на 5)
Придумать свой язык описания любой предметной области (далее – Язык).
Реализовать программу, которая сможет разбирать файл, написанный на Языке, и предпринимать соответствующие (придуманные Вами) действия.
Требования к Языку:
- не менее 20 лексических единиц (слов);
- не менее 15 синтаксических правил;
- представить не менее 5 примеров файлов на Вашем языке.
Требования к программе:
- лексический и синтаксический анализатор должны быть выделены в отдельные модули (библиотеки);
- для лексического и синтаксического анализаторов не рекомендуется использовать программные языки, не предназначенные для этого (Pascal, С/С++, java, c#, и т.д.). Изучите за 3 часа Coco-R/flex/bison/любой другой язык для анализа текста;
- функциональная часть программы должны быть написана на С++.
Требования к документации:
-
Должен быть написан документ «Описание Языка» (по ГОСТ 19.506-79), обязательно включающий пункты: «Описание лексики», «Описание синтаксиса».
-
Должен быть написан документ «Описание программы» (по ГОСТ 19.402-78).
Замечание: можно использовать принципы языка XML.
Ссылки, которые могут пригодиться:
-
http://ru.wikipedia.org/wiki/XML - самый распространённый язык разметки;
-
https://code.google.com/p/yaxx/ - проект Google, помимо всего прочего, содержащий лексические и синтаксические анализаторы для многих языков программирования.
Пример предметной области:
- язык должен описывать процесс передачи взятки: объекты Взятка, Соблазнитель, Взяточник, Проплаченное решение.
- программа должна по файлу, написанному на Языке, подсчитывать размеры сроков уголовного наказания для Соблазнителя и Взяточника.
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.