
Курсовик / Пояснительная записка
.docЦель работы: Целью курсового проектирования является закрепление теоретического
материала и приобретение необходимого опыта разработки трансляторов
Вариант задания: (16: 4-3-1)
-
Алфавит входного языка состоит из латинских букв;
-
К ключевым словам относятся описания операторов безусловного перехода, описатели функции, ключевые слова, обозначающие начало и конец программы, описание типа, ввод и вывод, присваивание;
-
Присутствует поддержка библиотечных функций sin, cos, tan, exp;
-
К разделителям относятся +, -, *, :, _, /, (, ), {, }, =, , , ‘ , ‘,’ и пробел;
-
Идентификаторы должны начинаться с буквы, не включать в себя разделители;
-
Текст программы должен допускать использование комментариев.
Грамматика языка
-
<программа> → PROGRAM ID ; <func_секция><var_секция> <тело>
-
<func_секция> → <func> | <func_секция>
-
<func> → FUNCTION ID (<объяв>):<тип><var_секция> <тело>
-
<var_секция> → ε | VAR <объяв>
-
<объяв> → <список_типа> | <список_типа><объяв>
-
<список_типа> → <список_ид> : <тип>;
-
<тип> → INTEGER | REAL | STRING
-
<список_ид> → ID | ID,<список_ид>
-
<тело> → BEGIN <конструкция>; END;
-
<конструкция>→ READ(ID) | WRITE(<выражение>) |
ID:=<выражение> | LABEL ID: | GOTO ID: | <тело> | ε
-
<выражение> → <терм> | <выражение> + <терм> | <выражение> - <терм>
-
<терм> → <подтерм> | <терм> * <подтерм> | <терм> / <подтерм>
-
<подтерм> → ID | FUNC(<выражение>) | (<выражение>)
Таким образом языка данной грамматики является подмножеством языка Pascal
Реализация транслятора
Логика работы лексического анализатора и функции подсветки построена на конечных автоматах, синтаксического – на методе рекурсивного спуска. При синтаксическом разборе части программы, оформленные в виде классов, сами “собирают” себя, так как зная свой собственный тип, они “могут догадываться” о дальнейшем содержании. Причем работа идет параллельно для нескольких классов, поэтому входная цепочка проверяется всеми автоматами на причастность ее к своему классу.
Примеры автоматов
-
Автомат для ключевых слов (на примере begin)
-
Автомат для идентификаторов
-
Автомат для комментариев