
- •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 константа.