АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Посторенние атрибутной транслирующей грамматики

Читайте также:
  1. A LIST OF SELECTED BIBLIOGRAPHY
  2. DER JAMMERWOCH 1 страница
  3. DER JAMMERWOCH 2 страница
  4. DER JAMMERWOCH 4 страница
  5. DER JAMMERWOCH 7 страница
  6. DER JAMMERWOCH 9 страница
  7. General requirements and rules
  8. II. Конституированная, или синтетическая, стоимость
  9. RESUMEE
  10. THE HISTORICAL DEVELOPMENT OF ENGLISH COMPOUNDS
  11. Vocabulary
  12. X. Как учиться?

 

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

 

<P> → void main(){ DVAR}

<DVAR> → DECVAR; DVAR

DVAR → DVEC

DVAR → COP

DVEC → DEVEC; DVEC

DVEC →COP

 

------------------Подграмматика операторов-------------------------

COP → SOP

SOP → OP; SOP

SOP →

OP → LABELq: ULO

OP → ULO

ULO →for(EQOname; LEXend; EQOstep) {begin_cycle} m1, m2, p1, p2, p3, p4 COP {end_cycle}p1, p2, p3, p4

 

m1 <- NewLabel // метка начала цикла

m2 <- NewLabel // метка конца цикла

p1 <- name // имя переменной цикла

p2 <- begin // начальное значение

p3 <- step // шаг цикла

p4 <- end // граничное значение

ULO → EQO

EQO →VAR q EQRS t,e {ASS} p1, p2, p3 t

p2 <- q //адрес переменной в таблице

p1<-t //тип операции присваивания

p3 <-e //адрес значения выражения в таблице

 

ULO → goto LABEL p {BRL} q

p <- q //адрес

 

LABELq → IDENTp {DEFLq,, }q

q <- p

 

ULO → IF2p OP{DEFL}m

mp

 

IF2p → if (LEXvalue) {BF}m, v

m NewLabel

p m

vvalue

 

ULO → IF2p COP IF3q1, q2 COP {DEFL}m

mq1

q2p

 

IF3q1, q2 → else{BRL}m1{DEFL}m2

m1 NewLabel

q1 m1

m2q2

 

OP ->

ULO → cin>>VAR p {CIN} m

p <- m //адрес

ULO →cout <<VAR p {COUT} m

m <- p //адрес значения переменной

EQRS t,e → =EXP p

t <- код для операции = //тип присваивания

e <- p //адрес значения выражения в таблице

EQRS t,e → +=EXP p

t <- код для операции +=

e <- p

EQRS t,e → -=EXP p

t <- код для операции -=

e <- p

EQRS t,e → *=EXP p

t <- код для операции *=

e <- p

EQRS t,e → /=EXP p

t <- код для операции.=

e <- p

 

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

 

LEXl → Cv or SCm {OR}p1, p2, r

p1<- v

p2<- m

r<- getNew

l <-r

SCm -> (LEXl)

m<- l

SCm

m<-10

LEXl→RELp

l<- p

C res →LMq and SLMy {AND}p1, p2, r

p1<- q

p2<- y

r<- getNew

res<- r

SLMy→ SLMp

y<-p

SLMy

y<- 10

LMq( LEXl )

q<-l

LMq →not LMp {NOT}p1, r

p1<- p

r<- getNew

q<- r

RELp→ EXP r REOq,res

q<- r

p<- res

REOq,res< EXP t {REL}p1, p2, p3, r

p1<-код операции <

p2<- q

p3<- t

r<- getNew

res<-r

 

REOq,res> EXP t {REL}p1, p2, p3, r

p1<-код операции >

p2<- q

p3<- t

r<- getNew

res<-r

REOq,res== EXP t {REL}p1, p2, p3, r

p1<-код операции ==

p2<- q

p3<- t

r<- getNew

res<-r

REOq,res<= EXP t {REL}p1, p2, p3, r

p1<-код операции <=

p2<- q

p3<- t

r<- getNew

res<-r

REOq,res>= EXP t {REL}p1, p2, p3, r

p1<-код операции >=

p2<- q

p3<- t

r<- getNew

res<-r

REOq,res!= EXP t {REL}p1, p2, p3, r

p1<-код операции!=

p2<- q

p3<- t

r<- getNew

res<-r

 

 

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

 

EXP r → EXPS q SAEt,type {ADD}p1, p2, p3,p4

p1<-q

p2<-t

r<-p3

p4<- type

 

SAEt,type+ AEr SAEt,type

t<- k

type<- код операции для сложения

SAEt,type → - AEr SAEt,type

SAEt,type -> (EXPr)

t<- r

type<- 10

 

EXPSq →++ AEr {++}p1

p1<- r

EXPS q → -- AEr {--}p1

p1<- r

EXPS q → AEr

EXPS q~ VEC r,t {~}p1, p2

p1<- r

p2<- getNew

q<- p2

AEr → ME t SMEq,type {MUL}p1, p2, p3,p4

r<- p3

p1<-t

p2 <-q

p4<- type

p4<- getNew

SMEq,type* ME t SME

q<- t

type<- код для *

SME q,type/ ME t SME

q<- t

type<- код для /

SME q,type → (EXP)

q<- 10

type<- 10

MEt → (EXPr)

t<-r

MEt → VAR name,type,eql

t<- eql

 

 

------------------Подграмматика переменной --------------------------------------------

 

VARname,type,eql → IDENTr

name <- адрес IDENT

type<- код типа вектор

eql<- r-значение из таблицы идентификаторов

VAR name,type,eql → [ ELEMp SELEMq,n]

name <- 10 //это будет безымянная переменная

type<- код типа вектор

eql<- n – размерность вектора

SELEMq,n →, ELEMr SELEMq1,n1

q<-q1

n<-n1+1

SELEMp

p<-10

n<-1

ELEMe → IDENTr SENDind,n,e

n<-r

SEND ind,n,e → [ CI ] {SUBS name, ind, r}

ind <- CI

e<- GetNew

SEND ind,n,e

ind <- 10

n<-10

e<-10

ELEM i → CF t

i<-t //адрес CF

VAR name,type,eql →CI t

name<-10

type<- код для int

eql<-t //адрес CI

 


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.012 сек.)