
- •Комитет образования рф
- •Отчёт по курсовой работе
- •Языки программирования и методы трансляции
- •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 - синтезированный
OPS ® OP OP_
OPS ® e
OP_ ® OP OP_
OP_ ® e
KOp1 ® it1 = Vt2 {присвоить}A1, A2,A3, R KO'p2 A1 ¬ p1 A2 ¬ t1
A3 ¬ t2 p 2 ¬ p1
KO’p1 ® it1 = Vt2 {присвоить}A1, A2,A3, R KO'p2 A1 ¬ p1 A2 ¬ t1
A3 ¬ t2 p 2 ¬ p1
KO'p ® e
KOVp1, p2 ® OV p3, p4 KO_ p5, p6 p3 ¬ p1 p5 ¬ p1
p4 ¬ p2 p6 ¬ p2
KO_ p1, p2 ® e
KO_ p1, p2 ® , OV p3, p4 KO_ p5, p6 p3 ¬ p1 p5 ¬ p1
p4 ¬ p2 p6 ¬ p2
OVp1, p2 ® it1 = { Vt2 {присвоить_элементу_вектора}A1, A2, A3, A4, R OSTp3, p4, p5 }
A1 ¬ p1 // тип
A2 ¬ p2 // индекс элемента вектора
A3 ¬ t2 // значение
A4 ¬ t1 // адрес переменной вектора
p3 ¬ p1 p4 ¬ p2 p5 ¬ t1
OSTp1, p2, p3 ® , Vt1 {присвоить_элементу_вектора}A1, A2, A3, A4, R OSTp3, p4, p5
A1 ¬ p1 A2 ¬ p2 A3 ¬ t1
A4 ¬ p5 p3 ¬ p1 p4 ¬ p2
p5 ¬ p3
OST p1, p2, p3 ® e
OP ® intt KOp ; p ¬ t
OP ® fltt KOp ; p ¬ t
OP ® vctt1 [ Vt2 ] KOVp1, p2 ; p1 ¬ t1 p2 ¬ t2
OP ® cst OC
OC ® intt KOp ; p ¬ tconst
OC ® fltt KOp ; p ¬ tconst
OC ® vctt1 [ Vt2 ] KOVp1, p2 ; p1 ¬ t1cosnt p2 ¬ t2
Примечание: тип = {int, float, vector, const int, const float, const vector}
Семантические процедуры для операционных символов.
Ai - унаследованные.
{присвоить}A1, A2,A3
A1 тип
A2 адрес переменной
A3 значение
Тип переменной по адресу A2 получает значение A1.
Генерируется триада mov [A2], A3
Аномальные ситуации:
1) если тип значения и тип переменной не совпадают.
2) если переменная по адресу A2 константа.
{присвоить_элементу_вектора}A1, A2, A3, A4
A1 тип;
A2 индекс элемента вектора;
A3 значение;
A4 адрес переменной вектора;
Тип переменной по адресу A4 получает значение A1.
Генерируется триада mov [A4+A2], A3
Аномальные ситуации:
1) если тип значения не float.
2) если индекс элемента вектора превышает размерность вектора.
3) если переменная по адресу A2 константа.
Основная грамматика
Нетерминалы:
PRG |
Программа |
PR1 |
остаток 1 программы |
PO |
Последовательность операторов |
MSG |
Сообщение |
MS1 |
остаток сообщения |
OPS |
Описания |
PR2 |
остаток 2 программы |
O |
Оператор |
O1 |
остаток 1 оператора |
O2 |
остаток 2 оператора |
O3 |
остаток 3 оператора |
O’ |
остаток оператора |
P |
Переменная |
P1 |
остаток переменной |
I1 |
Остаток |
OP |
оператор присваивания |
OP1 |
остаток 1 оператора присваивания |
OP2 |
остаток 2 оператора присваивания |
OP’ |
остаток оператора присваивания |
F1 |
остаток 1 для for |
F2 |
остаток 2 для for |
F3 |
остаток 3 для for |
U |
Условие |
U1 |
остаток условия |
Правила :
1) PRG ® OPS PR1 2) OPS ® e
3) PR1 ® void main ( ) { PR2 4) PR2 ® OPS PO }
5) PO ® O O' 6) O ® ;
7) O ® { PO } 8) O ® i O1
9) O ® printf ( MSG MS1 ) ; 10) O ® scanf ( P P1 ) ;
11) O ® goto i ; 12) O ® for ( F1
13) O' ® O O' 14) O' ® e
15) O1 ® : 16) O1 ® = O2
17) O1 ® [ V ] = O2 18) O2 ® i O3
19) O2 ® V ; 20) O3 ® = O2
21) O3 ® [ V ] = O2 22) MSG ® s
23) MSG ® V 24) MS1 ® , MSG MS1
25) MS1 ® e 26) P ® i I1
27) P1 ® , P P1 28) P1 ® e
29) I1 ® [ V ] 30) I1 ® e
31) OP ® i OP1 32) OP1 ® = OP2
33) OP1 ® [ V ] = OP2 34) OP2 ® V
OP2 ® i OP1 36) F1 ® OP OP’ ; F2
37) F1 ® ; F2 38) F2 ® U ; F3
39) F2 ® ; F3 40) F3 ® OP OP’ ) O
41) F3 ® ) O 42) U ® V U1
43) U1 ® , V U1 44) U1 ® e
45) OP’ ® , OP OP’ 46) OP’ ® e
47) O ® if ( V ) O