Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа по ТЯП(РЯП)1.doc
Скачиваний:
12
Добавлен:
01.05.2014
Размер:
1.87 Mб
Скачать

Представление основных операторов в полиз

Оператор

Код

Операнды

Семантика оператора

Вычисление адреса элемента массива

@SUBS

A, i1, …, in, k

Вычисление адреса элемента массива A; i1, …, in – индексные выражения,

k = n+1 – число операндов операции

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

@SET

R, E

Оператор присваивания R := E

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

@DEFL

m

Определение метки m

Переход по метке

@JMP

m

Переход на метку m (m – идентификатор метки)

Переход по условию

@JMPT

(не используется)

m, Flag

Переход на m (m – метка или номер элемента ПОЛИЗ) при Flag = TRUE

Переход по условию

@JMPF

m, Flag

Переход на m (m – метка или номер элемента ПОЛИЗ) при Flag = FALSE

Преобразование целого к рациональному

@ITOR

A

Преобразование целого A к рациональному

Преобразование рационального к целому

@RTOI

(не используется)

A

Преобразование рационального A к целому

Преобразование целого к вещественному

@ITOR2

A, _

Преобразование целого A к вещественному

Преобразование вещественного к целому

@RTOI2

(не используется)

A, _

Преобразование вещественного A к целому

Ввод

@INPUT

A

Ввод со входного потока согласно типу A

Вывод

@OUTPUT

A

Вывод во входной поток согласно типу A

Операции отношения «равно» для целых чисел

@=INT

A1, A2

Бинарная операция для целых, возвращает результат типа boolean

Операции отношения «равно» для рациональных чисел

@=RAT

A1, A2

Бинарная операция для рациональных, возвращает результат типа boolean

Операции отношения «не равно» для целых чисел

@<>INT

A1, A2

Бинарная операция для рациональных, возвращает результат типа boolean

Операции отношения «не равно» для рациональных чисел

@<>RAT

A1, A2

Бинарная операция для целых, возвращает результат типа boolean

Операции отношения «меньше» для целых чисел

@<INT

A1, A2

Бинарная операция для целых, возвращает результат типа boolean

Операции отношения «меньше» для рациональных чисел

@<RAT

A1, A2

Бинарная операция для рациональных, возвращает результат типа boolean

Операции отношения «меньше либо равно» для целых чисел

@<=INT

A1, A2

Бинарная операция для целых, возвращает результат типа boolean

Операции отношения «меньше либо равно» для рациональных чисел

@<=RAT

A1, A2

Бинарная операция для рациональных, возвращает результат типа boolean

Операции отношения «больше» для целых чисел

@>INT

A1, A2

Бинарная операция для целых, возвращает результат типа boolean

Операции отношения «больше» для рациональных чисел

@>RAT

A1, A2

Бинарная операция для рациональных, возвращает результат типа boolean

Операции отношения «больше либо равно» для целых чисел

@>=INT

A1, A2

Бинарная операция для целых, возвращает результат типа boolean

Операции отношения «больше либо равно» для рациональных чисел

@>=RAT

A1, A2

Бинарная операция для рациональных, возвращает результат типа boolean

Логическая операция

“и”

@AND

A1, A2

Бинарная операция для переменных типа boolean, возвращает результат типа boolean

Логическая операция

“или”

@OR

A1, A2

Бинарная операция для переменных типа boolean, возвращает результат типа boolean

Логическая операция

“не”

@NOT

A

Унарная операция для переменных типа boolean, возвращает результат типа boolean

Операции изменения знака на противоположный для целых чисел

@NEGINT

A

Унарная операция для целых,

возвращает результат типа boolean

Операции изменения знака на противоположный для рациональных чисел

@NEGRAT

A

Унарная операция для рациональных,

возвращает результат типа boolean

Операции вычитания для целых чисел

@SUBINT

A1, A2

Бинарная операция для целых, возвращает результат типа integer

Операции вычитания для рациональных чисел

@SUBRAT

A1, A2

Бинарная операция для рациональных, возвращает результат типа rational

Операция инкремент для целых чисел

@INC

A

Унарная операция для целых чисел возвращает результат типа integer

Операция декремент для целых чисел

@DEC

A

Унарная операция для целых чисел возвращает результат типа integer

Операции сложения для целых чисел

@ADDINT

A1, A2

Бинарная операция для целых, возвращает результат типа integer

Операции сложения для рациональных чисел

@ADDRAT

A1, A2

Бинарная операция для рациональных, возвращает результат типа rational

Операции умножения для целых чисел

@MULINT

A1, A2

Бинарная операция для целых, возвращает результат типа integer

Операции умножения для рациональных чисел

@MULRAT

A1, A2

Бинарная операция для рациональных, возвращает результат типа rational

Операции деления для целых чисел

@DIVINT

A1, A2

Бинарная операция для целых, возвращает результат типа integer

Операции деления для рациональных чисел

@DIVRAT

A1, A2

Бинарная операция для рациональных, возвращает результат типа rational

Общий знаменатель для рациональных чисел

@COMMON

A1, A2

Бинарная операция для рациональных, возвращает результат типа integer

Дробная часть рационального числа

@FRAC

A

Унарная операция для рациональных, возвращает результат типа rational

Целая часть рационального числа

@INT

A

Унарная операция для рациональных, возвращает результат типа integer

Приведение к простой дроби

@SIMPLIFY

A

Унарная операция для рациональных, возвращает результат типа rational

Приведение к неправильной дроби

@IRREGULAR

(операция была исключена)

A

Унарная операция для рациональных, возвращает результат типа rational

Замечание: для всех бинарных операций, подразумевающих A op B, где A и B операнды, в стек исполнения ПОЛИЗ операнды кладутся в прямом порядке, то есть сначала A, а затем B, а извлекаются в обратном.

Неформальное описание

Перевод обращения к переменной

Входная конструкция

Перевод в ПОЛИЗ

A[x1, x2,,..xn]

A

x1

x2

xn

n + 1

@SUBS

Пример

A[x + 5, y - 1][z] . numerator

A

x

5

+

y

1

-

z

4

@SUBS

@NUMERATOR

Перевод условного оператора

Входная конструкция

Перевод в ПОЛИЗ

IF

Логическое выражение

THEN

Операторы

ELSE

Операторы

Перевод логического выражения в ПОЛИЗ

m1

@JMPF

Перевод операторов

m2

@JMP

m1

@DEFL

Перевод операторов

m2

@DEFL

Пример

if 1 > 10 + i then A[ i ] := 5

else i := 1

1

10

i

+

@>INT

m1

@JMPF

A

I

2

@SUBS

5

@SET

m2

@JMP

m1

@DEFL

i

1

@SET

m2

@DEFL

Перевод цикла с параметром

Входная конструкция

Перевод в ПОЛИЗ

for i := выражение1 to выражение2 do

оператор

i

выражение1 в ПОЛИЗЕ

@SET

создать временную переменную R типа integer и записать на выходную ленту

выражение2 в ПОЛИЗЕ

@SET

m1

@DEFL

i

R

@<=INT

m2

@JMPF

Перевод оператора

i

@INC

m1

@JMP

m2

@DEFL

Разобьем исходную грамматику на подграмматики:

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

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

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

Описание

VAR

Переменная

LE

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

SXP

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

PAR

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

EXP

Выражение

VARid LE PAR

LE[ EXP SXP ] LE

LE

SXP, EXP SXP

SXP

PAR . PT

PTnumerator

PTdenominator

PAR

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

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

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

Описание

EXP

Выражение

AE

Слагаемое

ME

Множитель

SAE

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

SME

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

VAR

Переменная

EXPAE SAE

SAE+ AE SAE

SAE- AE SAE

SAE

AEME SME

SME* ME SME

SME/ ME SME

SMEcommon ME SME

SME

ME+ ME

ME- ME

MEfrac ME

MEint ME

MEsimplify ME

MEirregular ME

MEVAR

MEusi

ME( EXP )

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

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

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

Описание

LEX

Логическое выражеие

EXP

Выражение

С

Конъюнкция

SC

Последовательность конъюнкций

REL

Отношение

LM

Логический множитель

SLM

Последовательность логических множителей

REO

Операция отношения

LEXC SC

SCor C SC

SC

LEXREL

CLM SLM

SLMand LM SLM

SLM

LM( LEX )

LMnot LM

RELEXP REO EXP

REO<

REO>

REO=

REO<=

REO>=

REO<>

Подграмматика для операторов:

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

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

Описание

SO

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

COP

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

OP

Оператор

ULO

Непомеченный оператор

EXP

Выражение

VAR

Переменная

LN

Имя метки

LPR

Оператор цикла с параметром

DIR

Направление изменения переменной цикла

IFO

Условный оператор

OPR

Необязательная условного оператора

EQO

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

NOP

Пустой оператор

IOP

Оператор ввода

OOP

Оператор вывода

JMP

Опереатор безусловного перехода

SOP

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

SVR

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

SXP

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

SOCOP .

COPbegin OP SOP end

SOP; OP SOP

SOP

OPLN : ULO

OPULO

ULOLPR

ULOEQO

ULONOP

ULOCOP

ULOJMP

ULOIFO

ULOIOP

ULOOOP

LPRfor id := EXP DIR EXP do OP

DIRto

DIRdownto

EQOVAR := EXP

NOP

JMPgoto LN

IFOif LEX then OP OPR

OPRelse OP

OPR

IOPread ( VAR SVR )

OOPwrite ( EXP SXP )

SVR, VAR SVR

SVR

SXP, EXP SXP

SXP

LNid

LNusi

Подграмматика для списка имён:

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

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

Описание

NL

Список имен

SN

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

NLid SN

SN , id SN

SN

Подграмматика для типов:

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

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

Описание

TN

Имя типа

INT

Внутренний тип

AT

Тип-массив

ET

Перечислимый тип

RT

Ограниченный тип

IT

Индекс

SIT

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

NL

Список имен

TNINT

TNAT

TNET

TNRT

TNid

INTinteger

INTrational

ATarray [ IT SIT ] of TN

ITET

ITRT

ITid

SIT, IT SIT

SIT

ET( NL )

RTusi .. usi

Основная подграмматика:

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

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

Описание

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

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

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

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

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

Описание

Тип атрибута

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