2. Задание по лабораторной работе (номер варианта и полное описание своего варианта).
3. Грамматика входного языка в одном из трех возможных видов:
• форма Бэкуса—Наура;
• форма с метасимволами;
• графическая форма.
4. Описание выбранного способа организации таблицы идентификаторов с обоснованием сделанного выбора.
5. Описание лексического анализатора и выбранного метода его взаимодействия с синтаксическим анализатором.
6. Граф переходов или иное описание конечного автомата лексического анализатора.
7. Обоснование выбора класса КС-грамматик для построения синтаксического анализатора.
8. Описание синтаксического анализатора в зависимости от выбранного класса КС-грамматик (включая все необходимые управляющие таблицы и множества).
9. Выбор форм внутреннего представления программы, используемых в компиляторе с обоснованием сделанного выбора.
10. Описание используемого метода порождения результирующего кода.
11. Описание используемого метода оптимизации.
12. Информация об организации построенного компилятора, его разбиении на проходы, количество проходов в компиляторе.
13. Выводы по проделанной работе.
14. Пример входной программы и результирующей программы, построенной компилятором.
15. Текст программы компилятора.
Примеры входной и результирующей программ, а также текст программы компилятора рекомендуется оформлять в виде приложений к тексту пояснительной записки.
В качестве основы построения синтаксического анализатора допускается выбрать любой класс КС-грамматик. Описание синтаксического анализатора должно быть полным, содержать все управляющие таблицы и множества, необходимые для построения алгоритма функционирования анализатора (распознавателя).
Допускается для построения лексического и (или) синтаксического анализаторов использовать автоматизированные методы построения распознавателей (например на основе программ LEX и YACC) [2, 3, 7, 27, 35]. В этом случае не требуется приводить граф переходов конечного автомата (для лексического анализатора) и описание синтаксического анализатора.
В таком варианте соответствующие разделы пояснительной записки должны содержать следующую информацию: обоснование выбора программы, используемой в качестве средства автоматизированного построения распознавателя, и текст входного файла, созданного для выполнения автоматизированного построения лексического либо синтаксического анализатора.
Задание на курсовую работу
Компилятор должен запускаться командной строкой с несколькими входными параметрами. Первым и главным входным параметром должно быть имя входного файла, вторым параметром может быть имя результирующего файла. Требования к остальным параметрам командной строки и управляющим ключам (если они необходимы) устанавливаются исполнителем самостоятельно.
Командная строка должна быть достаточной для функционирования компилятора. Помимо интерфейса командной строки возможно наличие дополнительного интерактивного интерфейса пользователя у компилятора (в том числе и графического) по усмотрению исполнителя работы.
Входной язык компилятора должен удовлетворять следующим требованиям:
• входная программа начинается ключевым словом prog (program) и заканчивается ключевым словом end.;
• входная программа может быть разбита на строки произвольным образом, все пробелы и переводы строки должны игнорироваться компилятором;
• текст входной программы может содержать комментарии любой длины, которые должны игнорироваться компилятором (вид комментария задан в варианте задания);
• входная программа должна представлять собой единый модуль, содержащий линейную последовательность операторов, вызовы процедур и функций не предусматриваются;
• должны быть предусмотрены следующие варианты операторов входной программы:
– оператор присваивания вида <переменная>:=<выражение>;
– условный оператор вида if <выражение> then <оператор> либо if <выражение> then <оператор> else <оператор>;
– составной оператор вида begin… end;
– оператор цикла, предусмотренный вариантом задания;
• выражения в операторах могут содержать следующие операции (минимум):
– арифметические операции сложения (+) и вычитания (-);
– операции сравнения «меньше» (<), «больше» (>), «равно» (=);
– логические операции И (and), ИЛИ (or), НЕ (not);
– дополнительные арифметические операции, предусмотренные вариантом задания;
• операндами в выражениях могут выступать идентификаторы (переменные) и константы (тип допустимых констант указан в варианте задания);
• все идентификаторы, встречающиеся в исходной программе, должны восприниматься как переменные, имеющие тип, заданный в варианте задания (предварительного описания идентификаторов в исходной программе не требуется);
• должны учитываться два предопределенных идентификатора InpVar и Compi 1 eTest, смысл которых будет ясен из приводимого далее описания выходного языка.
Приоритет операций исполнитель работы должен выбрать самостоятельно (приоритет операций учитывается в грамматике входного языка). Для изменения приоритета операций должны использоваться круглые скобки.