- •Комитет образования рф
- •Отчёт по курсовой работе
- •Языки программирования и методы трансляции
- •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) Атрибутная грамматика для подграмматики описаний.
- •Атрибутная грамматика.
- •Семантические процедуры для операционных символов.
- •Основная грамматика
- •Атрибутная грамматика.
- •Семантические процедуры для операционных символов.
Атрибутная грамматика.
1) Атрибутная грамматика для основной программы.
p - унаследованный
t - синтезированный
PRG ® OPS PR1
OPS ® e
PR1 ® void main ( ) { PR2
PR2 ® OPS PO }
PO ® O O'
O ® ;
O ® { PO }
O ® it1 O1p1 p1 ¬ t1
O ® printf ( MSG MS1 ) ;
O ® scanf ( P P1 ) ;
O ® goto it1 {перейти}A1 ; A1 ¬ t1
O ® for ( F1
O' ® O O'
O' ® e
O1p1 ® : {метка}A1
A1 ¬ p1
O1p1 ® = O2t1 {присвоить}A1, A2
A1 ¬ p1
A2 ¬ t1
O1p1 ® [ Vt1 ] {смещение}A1, A2, R = O2t2 {присвоить}A3, A4
A1 ¬ p1
A2 ¬ t1
A3 ¬ R
A4 ¬ t2
O2t1 ® it2 O3p1, t3
p1 ¬ t2
t1 ¬ t3
O2t1 ® Vt2 ;
t1 ¬ t2
O3p1, t1 ® = O2t2 {присвоить}A1, A2
A1 ¬ p1
A2 ¬ t2
t1 ¬ t2
O3p1, t1 ® [ Vt2 ] {смещение}A1, A2, R = O2t3 {присвоить}A3, A4
A1 ¬ p1
A2 ¬ t2
A3 ¬ R
A4 ¬ t3
t1 ¬ t3
MSG ® st1 {печатать}A1
A1 ¬ t1
MSG ® Vt1 {печатать}А1
A1 ¬ t1
MS1 ® , MSG MS1
MS1 ® e
P ® it1 I1p1
p1 ¬ t1
P1 ® , P P1
P1 ® e
I1p1 ® [ Vt2 ] {считать}A1, A2
A1 ¬ p1
A2 ¬ t2
I1p1 ® e {считать}A1
A1 ¬ p1
OP ® it1 OP1p1, t1
p1 ¬ t1
OP1p1, t1 ® = OP2t2 {присвоить}A1, A2
t1 ¬ t2
A1 ¬ p1
A2 ¬ t2
OP1p1, t1 ® [ Vt2 ] {смещение}A1, A2, R = OP2t3 {присвоить}A3, A4
t1 ¬ t3
A1 ¬ p1
A2 ¬ t2
A3 ¬ R
A4 ¬ t3
OP2t1 ® Vt2
t1 ¬ t2
OP2t1 ® it2 OP1p2, t3
p1 ¬ t2
t1 ¬ t3
F1 ® OP OP’ ; F2
F1 ® ; F2
F2 ® {L1:} U {условие} ; F3
F2 ® {L1:}{условие} ; F3
F3 ® {L2:} OP OP’ {L3:} ) O {конец итерации} {L4:}
F3 ® {L2:} {L3:} ) O {конец итерации} {L4:}
U ® Vt1 {проверка}A1 U1
A1 ¬ t1
U1 ® , V t1{проверка}A1 U1
A1 ¬ t1
U1 ® e
OP’ ® , OP OP’
OP’ ® e
O ® if ( V ) O {else}
Семантические процедуры для операционных символов.
{перейти}A1
Генерируется триада jmp label, A Параметр A фиктивный. Управление передается триаде по адресу label.
{метка}A1
В таблицу меток заносится сгенерированная метка с уникальным именем, хранящая адрес следующей за ней триады.
{присвоить}A1, A2
Переменной по адресу A1 присваивается выражение A2. Если тип A1 - int а тип A2 - float или наоборот, то автоматически происходит преобразование типов.
Аномальные ситуации:
1) если тип A1 - vector а тип A2 - int или float.
2) если тип A2 - vector а тип A1 - int или float.
3) если тип A1 и A2 - vector и их размерности не совпадают.
{смещение}A1, A2, R
Результат есть адрес ячейки под номером А2 вектора по адресу А1.
{печатать}А1
На экран выводится значение переменной или строка по адресу A1.
Генерируется триада prn A1 , fict .
{считать}A1, A2
Информация считывается с клавиатуры в ячейку под номером A2 вектора по адресу A1 .
Генерируется триада scn A1, A2 .
{считать}A1
Информация считывается с клавиатуры и заносится в память по адресу A1 .
Генерируется триада scn A1, fict .
{конец итерации}
Генерируется триада
jmp L2
{условие}
Генерируется триада
jmp L3
{проверка}A1
Проверяется условие выхода из цикла while - генерируется следующая последовательность триад:
cmp A1, 1
jne L4
то есть при несоблюдении условий продолжения цикла его выполнение завершается.
{Li:}
В таблицу меток заносится сгенерированная метка с уникальным именем, хранящая адрес следующей за ней триады. Информация о данной метке будет доступна на всем протяжении действия данного цикла for.
{else}
Просматривается следующая лексема на входной цепочке и если это ключевое слово else, то рассматривается следующее продолжение правила для оператора if : else O. Соответственно в стек заносится операционный символ О и разбор продолжается.