|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Посторенние атрибутной транслирующей грамматики
------------------Основная подграмматика----------------------------
<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
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.012 сек.) |