- •Комитет образования рф
- •Отчёт по курсовой работе
- •Языки программирования и методы трансляции
- •1. Описание входного языка.
- •1.2. Формализм для описания синтаксиса.
- •1.3.4. Идентификаторы.
- •1.3.5. Константы.
- •1.4.2. Выражения.
- •1.4.3. Описания.
- •Приложение 1. Полный синтаксис языка в форме Бэкуса-Наура.
- •2. Описание лексического анализатора.
- •2.1. Классы литер.
- •2.2. Классы лексем.
- •2. Описание синтаксического анализатора.
- •3.1. Входная грамматика анализатора.
- •Множество правил входной грамматики анализатора.
- •Атрибутная грамматика.
- •Семантические процедуры для операционных символов.
- •2) Атрибутная грамматика для подграмматики описаний.
- •Атрибутная грамматика.
- •Семантические процедуры для операционных символов.
- •Основная грамматика
- •Атрибутная грамматика.
- •Семантические процедуры для операционных символов.
2. Описание лексического анализатора.
Вход лексического анализатора: последовательность литер.
Выход лексического анализатора: последовательность лексем. Каждая лексема состоит из двух полей:
поле, хранящее класс лексемы.
поле, хранящее номер лексемы внутри класса.
2.1. Классы литер.
Разделим множество литер на следующие классы:
Класс 0 |
неопознанный символ |
Класс 1 |
заглавные и строчные буквы латинского алфавита, кроме E, e |
Класс 2 |
цифра |
Класс 3 |
/ |
Класс 4 |
* |
Класс 5 |
> |
Класс 6 |
< |
Класс 7 |
= |
Класс 8 |
! |
Класс 9 |
& |
Класс 10 |
| |
Класс 11 |
E, e |
Класс 12 |
. |
Класс 13 |
( ) , { } [ ] ; : |
Класс 14 |
\n \t \v \32 - знаки пробел, перевод каретки, горизонтальная и вертикальная табуляция |
Класс 15 |
“ |
Класс 16 |
+ |
Класс 17 |
- |
2.2. Классы лексем.
Все лексемы разделены на следующие классы:
Ключевые слова.
Идентификаторы переменных и констант.
Идентификаторы меток.
Однолитерные разделители.
Двулитерные разделители.
Константы.
Строки.
В конечном состоянии Q0 выполняются следующие действия в зависимости от номера предыдущего состояния.
Номер предыдущего состояние |
выполняемые действия |
|
Записываем полученную строку символов в таблицу идентификаторов, (если данного идентификатора раньше не было в таблице) если следующий символ на входной цепочке ‘:’, то этот идентификатор имеет тип метки. На выходную цепочку записываем соответствующую лексему типа идентификатор. |
2 |
Производится поиск в таблице ключевых слов. Если поиск заканчивается успешно, то это ключевое слово а иначе записываем полученную строку символов в таблицу идентификаторов, (если данного идентификатора раньше не было в таблице). На выходную цепочку записываем соответствующую лексему типа ключевое слово или типа идентификатор. |
9, 11, 13, 15, 23, 17 |
На выходную цепочку записываем соответствующую лексему типа однолитерный разделитель. |
12, 14, 16, 18, 20, 22, 10 |
На выходную цепочку записываем соответствующую лексему типа двулитерный разделитель. |
19, 21, 25 |
Ошибка |
4, 6, 26, 27, 28, 5 |
Производится поиск в таблице констант. Если поиск заканчивается неуспешно, то записываем полученную строку символов в таблицу констант. На выходную цепочку записываем соответствующую лексему типа константа. |
29 |
Строки. Записываем полученную строку символов в таблицу строк. |
2. Описание синтаксического анализатора.
3.1. Входная грамматика анализатора.
Множеством терминальных символов языка, распознаваемого анализатором, служит множество лексем, порождаемых лексическим анализатором на предыдущем этапе.
Множество правил входной грамматики анализатора.
Множество правил входной LL(1) грамматики разбито на три подграмматики:
1) Подграмматика выражений.
Нетерминалы :
V |
Выражение |
V’ |
остаток выражения |
D |
Дизъюнкт |
D’ |
остаток дизъюнкта |
K |
Конъюнкт |
K’ |
остаток конъюнкта |
O |
Отношение |
O’ |
остаток отношения |
E |
Арифметическое выражение |
E’ |
остаток арифметического выражения |
T |
Терм |
T’ |
остаток терма |
M |
Множитель |
M’ |
остаток множителя |
Правила :
1) V ® D V' 2) V' ® e 3) V' ® || D V'
4) D ® K D' 5) D' ® e 6) D' ® && K D'
7) K ® O K' 8) K' ® e 9) K' ® == O K'
10) K' ® != O K' 11) O ® E O' 12) O' ® e
13) O' ® >= E O' 14) O' ® <= E O' 15) O' ® > E O'
16) O' ® < E O' 17) E ® T E' 18) E ® + T E'
19) E ® - T E' 20) E' ® e 21) E' ® + T E'
22) E' ® - T E' 23) T ® M T' 24) T' ® e
25) T' ® * M T' 26) T' ® / M T' 27) M ® ( V )
28) M ® i M' 29) M ® c 30) M ® length ( V )
31) M' ® e 32) M' ® [ V ]