Скачиваний:
6
Добавлен:
01.05.2014
Размер:
61.95 Кб
Скачать

2. Описание синтаксического анализатора.

3.1. Входная грамматика анализатора.

Множеством терминальных символов языка, распознаваемого анализатором, служит множество лексем, порождаемых лексическим анализатором на предыдущем этапе.

Множество правил входной грамматики анализатора.

Множество правил входной LL(1) грамматики разбито на три подграмматики:

1) Подграмматика выражений.

Нетерминалы :

V

выражение

V’

остаток выражения

D

дизъюнкт

D’

остаток дизъюнкта

K

конъюнкт

K’

остаток конъюнкта

O

отношение

O’

остаток отношения

E

арифметическое выражение

E’

остаток арифметического выражения

T

терм

T’

остаток терма

M

множитель

M’

остаток множителя

Атрибутная грамматика.

Атрибутная грамматика для подграмматики выражений.

p - унаследованный

t - синтезированный

Vt1 ® Dt2 V'p1, t3

t1 ¬ t3

p1 ¬ t2

V'p, t ® e

t ¬ p

V'p1, t1 ® || Dt2 {дизъюнкция}A1, A2, R V'p2, t3

t1 ¬ t3

A1 ¬ p1

A2 ¬ t2

p2 ¬ R

Dt1 ® Kt2 D'p1, t3

t1 ¬ t3

p1 ¬ t2

D'p, t ® e

t ¬ p

D'p1, t1 ® && Kt2 {конъюнкция}A1, A2, R D'p2, t3

t1 ¬ t3

A1 ¬ p1

A2 ¬ t2

p2 ¬ R

Kt1 ® Ot2 K'p1, t3

t1 ¬ t3

p1 ¬ t2

K'p, t ® e

t ¬ p

K'p1, t1 ® == Ot2 {равно}A1, A2, R K' p2, t3

t1 ¬ t3

A1 ¬ p1

A2 ¬ t2

p2 ¬ R

K'p1, t1 ® != Ot2 {неравно}A1, A2, R K' p2, t3

t1 ¬ t3

A1 ¬ p1

A2 ¬ t2

p2 ¬ R

Ot1 ® Et2 O'p1, t3

t1 ¬ t3

p1 ¬ t2

O'p, t ® e

t ¬ p

O'p1, t1 ® >= Et2 {больше_или_равно}A1, A2, R O'p2, t3

t1 ¬ t3

A1 ¬ p1

A2 ¬ t2

p2 ¬ R

O'p1, t1 ® <= Et2 {меньше_или_равно}A1, A2, R O'p2, t3

t1 ¬ t3

A1 ¬ p1

A2 ¬ t2

p2 ¬ R

O'p1, t1 ® > Et2 {больше}A1, A2, R O'p2, t3

t1 ¬ t3

A1 ¬ p1

A2 ¬ t2

p2 ¬ R

O'p1, t1 ® < Et2 {меньше}A1, A2, R O'p2, t3

t1 ¬ t3

A1 ¬ p1

A2 ¬ t2

p2 ¬ R

Et1 ® Tt2 E'p1, t3

t1 ¬ t3

p1 ¬ t2

Et1 ® + Tt2 E'p1, t3

p1 ¬ t2

Et1 ® - Tt2 {унарный_минус}A1, A2, R E'p1, t3

A1 ¬ t2

p1 ¬ R

E'p, t ® e

t ¬ p

E'p1, t1 ® + Tt2 {бинарный_плюс}A1, A2, R E'p2, t3

t1 ¬ t3

A1 ¬ p1

A2 ¬ t2

p2 ¬ R

E'p1, t1 ® - Tt2 {бинарный_минус}A1, A2, R E'p2, t3

t1 ¬ t3

A1 ¬ p1

A2 ¬ t2

p2 ¬ R

Tt1 ® Mt2 T'p1, t3

t1 ¬ t3

p1 ¬ t2

T'p, t ® e

t ¬ p

T'p1, t1 ® * Mt2 {умножить}A1, A2, R T'p2, t3

t1 ¬ t3

A1 ¬ p1

A2 ¬ t2

p2 ¬ R

T'p1, t1 ® / Mt2 {разделить}A1, A2, R T'p2, t3

t1 ¬ t3

A1 ¬ p1

A2 ¬ t2

p2 ¬ R

Mt1 ® ( Vt2 )

t1 ¬ t2

Mt1 ® it2 M'p1, t3

p1 ¬ t2

t1 ¬ t3

Mt1 ® ct2

t1 ¬ t2

Mt1 ® len ( Vt2 ) {длина_вектора}A1, A2, R

A1 ¬ t2

t1 ¬ R

M'p, t ® e

t ¬ p

M'p1, t1 ® [ Vt2 ] {элемент_вектора}A1, A2, R

A1 ¬ p1

A2 ¬ t2

t1 ¬ R

Семантические процедуры для операционных символов.

Примечание: везде А1, А2 - унаследованные, R - синтезированный.

{дизъюнкция}A1, A2, R

Аномальные ситуации:

1) тип оператора А1, А2 не int.

R = адрес триады or А1, А2

{конъюнкция}A1, A2, R

Аномальные ситуации:

1) тип оператора А1, А2 не int.

R = адрес триады and А1, А2

{равно}A1, A2, R

Аномальные ситуации:

1) тип оператора А1, А2 - vector.

R = адрес триады equ А1, А2

{неравно}A1, A2, R

Аномальные ситуации:

1) тип оператора А1, А2 - vector.

R = адрес триады neq А1, А2

{больше_или_равно}A1, A2, R

Аномальные ситуации:

1) тип оператора А1, А2 - vector.

R = адрес триады geq А1, А2

{меньше_или_равно}A1, A2, R

Аномальные ситуации:

1) тип оператора А1, А2 - vector.

R = адрес триады leq А1, А2

{больше}A1, A2, R

Аномальные ситуации:

1) тип оператора А1, А2 - vector.

R = адрес триады grt А1, А2

{меньше}A1, A2, R

Аномальные ситуации:

1) тип оператора А1, А2 - vector.

R = адрес триады low А1, А2

{унарный_минус}A1, A2, R (параметр А2 фиктивный)

Аномальные ситуации:

1) нет.

R = адрес триады neg А1, А2

{бинарный_плюс}A1, A2, R

Аномальные ситуации:

1) если тип параметров vector и их размерности не совпадают.

2) если один из параметров имеет тип vector а второй int или float.

R = адрес триады add А1, А2

{бинарный_минус}A1, A2, R

Аномальные ситуации:

1) если тип параметров vector и их размерности не совпадают.

2) если один из параметров имеет тип vector а второй int или float.

R = адрес триады sub А1, А2

{умножить}A1, A2, R

Аномальные ситуации:

1) если тип параметров vector и их размерности не совпадают.

R = адрес триады mul А1, А2

{разделить}A1, A2, R

Аномальные ситуации:

1) если тип параметров vector и их размерности не совпадают.

R = адрес триады div А1, А2

{длина_вектора}A1, A2, R (параметр А2 фиктивный)

Аномальные ситуации:

1) если тип параметрa А1 не vector.

R = адрес триады len А1, А2

{элемент_вектора}A1, A2, R

Аномальные ситуации:

1) если тип параметрa А1 не vector.

2) если значение параметра А2 больше, чем размерность вектора.

R = адрес триады elm А1, А2

2) Атрибутная грамматика для подграмматики описаний.

Нетерминалы :

OPS

последовательность описаний

OP_

остаток последовательности описаний

KO

конкретное описание

KO’

остаток конкретного описания

KOV

конкретное описание вектора

KO_

остаток конкретного описания вектора

OV

описание вектора

OV’

остаток описания вектора

OP

описание

OST

остаток описания

OC

описание константы

Атрибутная грамматика.

1) Атрибутная грамматика для подграмматики описаний.

p - унаследованный

t - синтезированный

OPS ® OP OP_

OPS ® e

OP_ ® OP OP_

OP_ ® e

KOp1 ® i­t1 = Vt2 {присвоить}A1, A2,A3, R KO'p2

A1 ¬ p1

A2 ¬ t1

A3 ¬ t2

p 2 ¬ p1

KO’p1 ® i­t1 = 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 тип

2 адрес переменной

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

Соседние файлы в папке Курсовая работа2