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

Подграмматика объявления констант

DC -> con int LC ;

DC -> con flt LC1 ;

LC -> LC , idp = numq {ЦЕЛ_КОНСТ}p1,q1

p1p

q1q

LC -> idp = numq {ЦЕЛ_КОНСТ}p1,q1

q1q

p1p

LC1 -> LC1 , idq = fnmr {ВЕЩ_КОНСТ}q1,r1

q1q

r1r

LC1 -> idq = fnmr {ВЕЩ_КОНСТ}q1,r1

q1q

r1r

Операционные символы:

{ВЕЩ_КОНСТ}A1,A2

Если идентификатор A1не объявлен, то в таблицу идентификаторов записывается ссылка на таблицу вещественных константA2и задается класс – константа, иначе ошибка.

{ЦЕЛ_КОНСТ}A1,A2

Если идентификатор A1не объявлен, то в таблицу идентификаторов записывается ссылка на таблицу целых константA2и задается класс – константа, иначе ошибка.

В объявлении констант, необходимо явно указывать типы intиfloat. Т.е. вещественная лексема обязательно должна содержать точку.

Подграмматика арифметических выражений

AEXp1 -> AEXq1 + Tr1 {+}p2,q2,r

p1r2

r2НОВЭЛТ

p2q1

q2r1

AEXp1 -> AEXq1 - Tr1 {-}p2,q2,r2­

p1r2

r2НОВЭЛТ

p2q1

q2r1

AEXp -> Tq

pq

Tp -> Pq

pq

Tp1 -> Tq1 * Pr1 {*}p2,q2,r2­

r2НОВЭЛТ

q2r1

p1r2

p2q1

Tp1 -> Tq1 / Pr1 {/}p2,q2,r2­

r2НОВЭЛТ

q2r1

p1r2

p2q1

Pp -> ( AEXq )

pq

Pp -> det ( AEXq ) {det}p1,r

rНОВЭЛТ

p1q

pr

Pp -> trn ( AEXq ) {ТРАНСПОНИР}p1,r

rНОВЭЛТ

p1q

pr

Pp -> numq

pq

Pp -> fnmq

pq

Pp -> VARq

pq

Операционные символы:

{+}A1,A2,R

Взависимости от типов операндов A1иA2генерируется тетрады:ADDIA­1A2R;ADDFA­1A2R;ADDMA­1A2R; соответственно для целого типа, вещественного и матричного.

{-}A1,A2,R

Взависимости от типов операндов A1иA2генерируется тетрады:SUBIA­1A2R;SUBFA­1A2R;SUBMA­1A2R; соответственно для целого типа, вещественного и матричного.

{*}A1,A2,R

Взависимости от типов операндов A1иA2генерируется тетрады:MULIA­1A2R;MULFA­1A2R;MULMA­1A2R; соответственно для целого типа, вещественного и матричного.

{/}A1,A2,R

Взависимости от типов операндов A1иA2генерируется тетрады:DIVIA­1A2R;DIVFA­1A2R; соответственно для целого и вещественного типов.

{det}A1,A2

Если тип A1– тип матрица, то генерируется тетрада:DETMA­1-A2,

{ТРАНСПОНИР}A1,R

Если тип A1– тип матрица, то генерируется тетрада:TRANSPA­1-A2

Операционные символы арифметических операций вызывают функцию проверки совпадения типов операндов. Если тип одного операнда int, а другогоfloat, то генерируется тетрада преобразования типаintкfloat:FTYPE A _ R, гдеA– элемент типаint.

Подграмматика переменных

VARp -> idq

pq

VARp -> idq [ AEXi1 , AEXj2 ] {ЭЛ_МАТР}q1,r1,r2

r1i1

r2i2

q1q

VARp -> idq IMr {ЭМ}q1,r1,r2

p, r2НОВЭЛТ

q1q

r1r

IMp -> [ AEXi ] {ДОБ_АТРИБ}i1,r

i1i

p,rНОВ_СПИСОК_АТРИБ

IMp -> IMp1 [ AEXi ] {ДОБ_АТРИБ}i1,r

r,pp1

i1i

Операционные символы:

{ЭЛ_МАТР}A1,А2,А3

Генерируется последовательность тетрад для вычисления смещения в области данных матрицы. В таблицу переменных добавляется строка, содержащая адрес матрицы и смещение – ссылка на переменную, содержащая относительный адрес элемента матрицы.

{ДОБ_АТРИБ}A1,A2

Добавляется атрибут A1в списокA2

{ЭМ}A1,A2,A3

Генерируется последовательность тетрад для вычисления смещения в области данных массива. В таблицу переменных добавляется строка, содержащая адрес массива и смещение – ссылка на переменную, содержащая относительный адрес элемента массива.

НОВ_СПИСОК_АТРИБ– создает список атрибутов, и возвращает указатель на него.

Вычисление относительного адреса для доступа к элементу матрицы/массива:

Матрица с размером [x,y]: $addr=A3*y* 4 +A2* 4;

Массив [x][y][z], элемент [i][j][k]:

$addr = i * (y * z * sizeof(type)) + j * (z * sizeof(type)) + k * sizeof(type);

Соседние файлы в папке kurs