Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовик по ТЯП.DOC
Скачиваний:
10
Добавлен:
01.05.2014
Размер:
240.13 Кб
Скачать

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

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

PRG

программа

RL

раздел меток

RC

раздел констант

RT

раздел типов

RV

раздел переменных

RO

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

OM

определение метки

OM`

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

OC

определение константы

OC`

остаток определения константы

ICp

имя константы

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

CNSp

константа

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

CNSNp

константа без знака

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

OT

определение типа

OT`

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

ITp

имя типа

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

TYPP

тип

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

OV

определение переменной

OV`

остаток определения переменной

LIp

список имен

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

OPS

составной оператор

PRG ® RL RC RT RV RO .

RL ® lab OM ; OM`

RL ® e

OM` ® OM ; OM`

OM` ® e

OM ® lblp1 {:метка}r,p2

r¬НОВМЕТ

p2¬p1

RC ® con OC ; OC`

RC ® e

OC` ® OC ; OC`

OC` ® e

OC ® ICp1 = CNSq1 {константа}p2,q2,r

r¬НОВКОН

p2¬p1

q2¬q1

CNSp2 ® + CNSNSp1

p2¬p1

CNSp2 ® - CNSNSp1

p2¬p1

CNSp2 ® CNSNSp1

p2¬p1

CNSNSp2 ® nump1

p2¬p1

CNSNSp2 ® ICp1

p2¬p1

ICp2 ® idp1

p2¬p1

RT ® typ OT ; OT`

RT ® e

OT` ® OT ; OT`

OT` ® e

OT ® ITp1 = TYPq1 {тип}p2,q2,r

r¬НОВТИП

p2¬p1

q2¬q1

ITp2 ® idp1

p2¬p1

RV ® var OV ; OV`

RV ® e

OV` ® OV ; OV`

OV` ® e

OV ® LIp1 : TYPq1 {переменная}p2,q2,r

r¬НОВПЕР

p2¬p1

q2¬q1

RO ® beg OPS end

НОВМЕТ - процедура, которая выдает значение указателя на свободную позицию таблицы меток.

НОВКОН - процедура, которая выдает значение указателя на свободную позицию таблицы констант.

НОВТИП - процедура, которая выдает значение указателя на свободную позицию таблицы типов.

НОВПЕР - процедура, которая выдает значение указателя на свободную позицию таблицы идентификаторов.

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

{:метка}A1,A2

Сопоставляет имя метки А1 с номером позиции в таблице меток.

{константа}A1,A2,A3

Записывает имя А1 и значение А2 константы в таблицу констант по адресу A3.

{тип}A1,A2,A3

Записывает имя А1 и значение А2 типа в таблицу типов по адресу A3.

{переменная}A1,A2,A3

Записывает имя А1 и тип А2 переменной в таблицу идентификаторов по адресу A3.

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

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

Et

выражение

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

E`p,t

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

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

EARt

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

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

Tt

терм

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

T`p,t

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

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

Pt

произведение

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

P`p,t

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

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

Ft

фактор

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

VARt

переменная

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

Et2 ® EARp1 E`p2,t1

p2¬p1

t2¬t1

E`p1,t2 ® = EARq1 {равно}p2,q2,r2 E`r2,t1

r1,r2¬НОВЭЛТ

p2¬p1

q2¬q1

t2¬t1

E`p1,t2 ® < EARq1 {меньше}p2,q2,r2 E`r2,t1

r1,r2¬НОВЭЛТ

p2¬p1

q2¬q1

t2¬t1

E`p1,t2 ® > EARq1 {больше}p2,q2,r2 E`r2,t1

r1,r2¬НОВЭЛТ

p2¬p1

q2¬q1

t2¬t1

E`p1,p2 ® e

p2¬p1

EARt2 ® + Tt1

t2¬t1

EARt2 ® - Tt1 {поменять_знак}t1

t2¬t1

EARt2 ® Tt1

t2¬t1

Tt2 ® Pp1 T`p2,t1

p2¬p1

t2¬t1

T`p1,t2 ® + Pq1 {сложить}p2,q2,r2 T`r2,t1

r1,r2¬НОВЭЛТ

p2¬p1

q2¬q1

t2¬t1

T`p1,t2 ® - Pq1 {вычесть}p2,q2,r2 T`r2,t1

r1,r2¬НОВЭЛТ

p2¬p1

q2¬q1

t2¬t1

T`p1,p2 ® e

p2¬p1

Pt2 ® Fp1 P`p2,t1

p2¬p1

t2¬t1

P`p1,t2 ® * Fq1 {умножить}p2,q2,r1 P`

r1,r2¬НОВЭЛТ

p2¬p1

q2¬q1

t2¬t1

P`p1,t2 ® / Fq1 {делить}p2,q2,r1 P`r2,t1

r1,r2¬НОВЭЛТ

p2¬p1

q2¬q1

t2¬t1

P`p1,p2 ® e

p2¬p1

Ft2 ® cnst1

t2¬t1

Ft2 ® ( EARt1 )

t2¬t1

Ft2 ® VARt1

t2¬t1

НОВЭЛТ - процедура, которая выдает значение указателя на свободную позицию таблицы, используемой для запоминания результата.

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

{равно}A1,А2,R

R = адрес триады, сгенерированной

в соответствии с таблицей 1

{меньше}A1,А2,R

R = адрес триады, сгенерированной

в соответствии с таблицей 2

{больше}A1,А2,R

R = адрес триады, сгенерированной

в соответствии с таблицей 3

{поменять_знак}A

Генерируется триада в соответствии с таблицей 4

{сложить}A1,А2,R

R = адрес триады, сгенерированной

в соответствии с таблицей 5

{вычесть}A1,А2,R

R = адрес триады, сгенерированной

в соответствии с таблицей 6

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

R = адрес триады, сгенерированной

в соответствии с таблицей 7

{делить}A1,А2,R

R = адрес триады, сгенерированной

в соответствии с таблицей 8

Таблица 1:

==

integer

real

complex

boolean

integer

==I A1,A2

real

==R A1,A2

complex

==C A1,A2

boolean

==B A1,A2

Таблица 2:

<

integer

real

complex

boolean

integer

<I A1,A2

real

<R A1,A2

complex

<C A1,A2

boolean

<B A1,A2

Таблица 3:

>

integer

real

complex

boolean

integer

>I A1,A2

real

>R A1,A2

complex

>C A1,A2

boolean

>B A1,A2

Таблица 4:

- (бинарный)

integer

real

complex

boolean

integer

negI A1,A2

real

negR A1,A2

complex

negC A1,A2

boolean

Таблица 5:

+

integer

real

complex

boolean

integer

addI A1,A2

real

addR A1,A2

complex

addC A1,A2

boolean

Таблица 6:

-

integer

real

complex

boolean

integer

subI A1,A2

real

subR A1,A2

complex

subC A1,A2

boolean

Таблица 7:

*

integer

real

complex

boolean

integer

mulI A1,A2

real

mulR A1,A2

complex

mulC A1,A2

boolean

Таблица 8:

/

integer

real

complex

boolean

integer

divI A1,A2

real

divR A1,A2

complex

divC A1,A2

boolean

Соседние файлы в предмете Теория языков программирования