Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Курсовик / Пояснительная записка

.doc
Скачиваний:
19
Добавлен:
29.01.2015
Размер:
51.71 Кб
Скачать

Цель работы: Целью курсового проектирования является закрепление теоретического

материала и приобретение необходимого опыта разработки трансляторов

Вариант задания: (16: 4-3-1)

  1. Алфавит входного языка состоит из латинских букв;

  2. К ключевым словам относятся описания операторов безусловного перехода, описатели функции, ключевые слова, обозначающие начало и конец программы, описание типа, ввод и вывод, присваивание;

  3. Присутствует поддержка библиотечных функций sin, cos, tan, exp;

  4. К разделителям относятся +, -, *, :, _, /, (, ), {, }, =, , , ‘ , ‘,’ и пробел;

  5. Идентификаторы должны начинаться с буквы, не включать в себя разделители;

  6. Текст программы должен допускать использование комментариев.

Грамматика языка

  1. <программа> → PROGRAM ID ; <func_секция><var_секция> <тело>

  2. <func_секция> → <func> | <func_секция>

  3. <func> → FUNCTION ID (<объяв>):<тип><var_секция> <тело>

  4. <var_секция> → ε | VAR <объяв>

  5. <объяв> → <список_типа> | <список_типа><объяв>

  6. <список_типа> → <список_ид> : <тип>;

  7. <тип> → INTEGER | REAL | STRING

  8. <список_ид> → ID | ID,<список_ид>

  9. <тело> → BEGIN <конструкция>; END;

  10. <конструкция>→ READ(ID) | WRITE(<выражение>) |

ID:=<выражение> | LABEL ID: | GOTO ID: | <тело> | ε

  1. <выражение> → <терм> | <выражение> + <терм> | <выражение> - <терм>

  2. <терм> → <подтерм> | <терм> * <подтерм> | <терм> / <подтерм>

  3. <подтерм> → ID | FUNC(<выражение>) | (<выражение>)

Таким образом языка данной грамматики является подмножеством языка Pascal

Реализация транслятора

Логика работы лексического анализатора и функции подсветки построена на конечных автоматах, синтаксического – на методе рекурсивного спуска. При синтаксическом разборе части программы, оформленные в виде классов, сами “собирают” себя, так как зная свой собственный тип, они “могут догадываться” о дальнейшем содержании. Причем работа идет параллельно для нескольких классов, поэтому входная цепочка проверяется всеми автоматами на причастность ее к своему классу.

Примеры автоматов

  1. Автомат для ключевых слов (на примере begin)

  1. Автомат для идентификаторов

  1. Автомат для комментариев