Скачиваний:
11
Добавлен:
01.05.2014
Размер:
1.03 Mб
Скачать
      1. Основная подграмматика:

Таблица нетерминалов:

Имя нетерминала

Описание

P

Программа

PN

Имя программы

SD

Раздел описаний

SO

Раздел операторов

SDL

Раздел описания меток

LN

Имя метки

SLN

Последовательность меток

SDC

Раздел описания констант

CD

Объявление константы

SCD

Последовательность объявлений констант

SDV

Раздел описания переменных

DOT

Объявление переменных одного типа

SDO

Последовательность объявлений переменных одного типа

NL

Список имен

SDT

Раздел описания типов

TD

Описание типа

STD

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

TN

Имя типа

CNS

Константа

PPN SD SO

PNprogram id;

PN

SDSDL SD

SDSDC SD

SDSDT SD

SDSDV SD

SD

SDLlabel LN SLN ;

LNid

LNusi

SLN , LN SLN

SLN

SDCconst CD ; SCD

CDid = CNS

CNSid

CNSusi

SCDCD ; SCD

SCD

SDTtype TD ; STD

TDid = TN

STDTD ; STD

STD

SDVvar DOT ; SDO

DOTNL : TN

SDODOT ; SDO

SDO

    1. Описание перевода (атг) каждой конструкции входного языка

    1. Подграмматика для переменной:

Таблица нетерминалов:

Имя нетерминала

Описание

Тип атрибута

VARt

Переменная

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

LEn1, n2

Индексация к массиву

n1 – унаследованный, n2 - синтезированный

SXPn1, n2

Последовательность выражений

n1 – унаследованный, n2 - синтезированный

PARp, t

Обращение к подэлементам

p – унаследованный, t - синтезированный

EXPp

Выражение

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

VARt4 idp1 {переменная}p2 LE1, n1 {вычислить адрес}p3, n2, r1 PARr2, t3

p2, p3  p1

n2  n1

r2  r1

t4  t3

LEn1, n8[ EXPt1 {индекс}t1 {inc}n2, n3 SXPn4, n5 ] LEn6, n7

n2  n1

n4  n3

n6  n5

n8  n7

LEn1, n2

n2  n1

SXPn1, n6, EXPt1 {индекс}t1 {inc}n2, n3 SXPn4, n5

n2  n1

n4  n3

n6  n5

SXPn1, n2

n2  n1

PARp1, t1. PTp2, t2

p2 p1

t2  t1

PTp1, t1numerator {числитель}p2, t2

p2  p1

t1  t2

PTp1, t1denominator {знаменатель}p2, t2

p2  p1

t1  t2

PARp1, p2

p2 p1

Операционный символ { вычислить адрес }p, n, r

Тип элемента

p

t1

Значение элемента

p

a1

Значение элемента

n

a2

Тип элемента

r

t3

Значение элемента

r

a3

if (t1 – тип массив)

{ Записать на выход выражение ПОЛИЗ:

a2

@SUBS

t3  тип верхнего элемента стека

}

else {

if (a2 = 1) { t3  t1 }

else { Ошибка }

}

Операционный символ { индекс }p

Тип элемента

p

t1

Значение элемента

p

a1

if (t1 – перечислимый, ограниченный или целый тип)

{ }

else {Ошибка

}

Операционный символ { числитель }p, t

Тип элемента

p

t1

Значение элемента

p

a1

Тип элемента

t

t2

Значение элемента

t

a2

if (t1 = rational)

{ Записать на выход выражение ПОЛИЗ:

@NUMERATOR

t2  integer

}

else {Ошибка

}

Операционный символ { знаменатель }p, t

Тип элемента

p

t1

Значение элемента

p

a1

Тип элемента

t

t2

Значение элемента

t

a2

if (t1 = rational)

{ Записать на выход выражение ПОЛИЗ:

@DENOMINATOR

t2  integer

}

else {Ошибка

}

Операционный символ { переменная }p

Тип элемента

p

t1

Значение элемента

p

a1

Записать на выход выражение ПОЛИЗ:

a1

Операционный символ { inc }n1, n2

n2  n1 + 1

      1. Подграмматика для выражения:

Таблица нетерминалов:

Имя нетерминала

Описание

Тип атрибута

EXPt

Выражение

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

AEt

Слагаемое

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

MEt

Множитель

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

SAEp, t

Последовательность слагаемых

t – синтезированный, p - унаследованный

SMEt

Последовательность множителей

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

VARt

Переменная

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

EXPt2  AEp1 SAEp2, t1

p2  p1

t2  t1

SAEp1, t2 + AEq1 {сложить}p2, q2, r1 SAEr2, t1

p2  p1

q2 q1

r2  r1

t2  t1

SAEp1, t2 - AEq1 {вычесть}p2, q2, r1 SAEr2, t1

p2  p1

q2 q1

r2  r1

t2  t1

SAEp1, p2

p2  p1

AEt2  MEq1 SMEq2, t1

q2  q1

t2  t1

SMEp1, t2* MEq1 {умножить}p2, q2, r1 SMEr2, t1

p2  p1

q2  q1

r2  r1

t2  t1

SMEp1, t2/ MEq1 {делить}p2, q2, r1 SMEr2, t1

p2  p1

q2  q1

r2  r1

t2  t1

SMEp1, t2common MEq1 {общий знаменатель}p2, q2, r1 SMEr2, t1

p2  p1

q2  q1

r2  r1

t2  t1

SMEp1, p2

p2  p1

MEp2+ MEp1

p2 p1

MEr2- MEp1 {поменять знак}p2, r1

p2  p1

r2  r1

MEr2frac MEp1 {дробная часть}p2, r1

p2  p1

r2  r1

MEr2int MEp1 {целая часть}p2, r1

p2  p1

r2  r1

MEr2simplify MEp1 {простая дробь}p2, r1

p2  p1

r2  r1

MEr2irregular MEp1 {неправильная дробь}p2, r1

p2  p1

r2  r1

MEp2VARp1

p2  p1

MEp2usip1 {число}p1

p2  p1

MEp2( EXPp1 )

p2  p1

Соседние файлы в папке Бяша