24
D. Lucanu – Programare Algebrica Curs 4 Aplicatie: semantica algebrica a programelor sintaxa l.p. (in Maude) cod Maude asociat unui program sursa – semantica operationala

Curs 4 - profs.info.uaic.rodlucanu/cursuri/progalg/resurse/curs4.pdfD. Lucanu – Programare Algebrica Curs 4 • Aplicatie: semantica algebrica a programelor – sintaxa l.p. (in

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Curs 4 - profs.info.uaic.rodlucanu/cursuri/progalg/resurse/curs4.pdfD. Lucanu – Programare Algebrica Curs 4 • Aplicatie: semantica algebrica a programelor – sintaxa l.p. (in

D. Lucanu – Programare Algebrica

Curs 4• Aplicatie: semantica algebrica a programelor

– sintaxa l.p. (in Maude)– cod Maude asociat unui program sursa– semantica operationala

Page 2: Curs 4 - profs.info.uaic.rodlucanu/cursuri/progalg/resurse/curs4.pdfD. Lucanu – Programare Algebrica Curs 4 • Aplicatie: semantica algebrica a programelor – sintaxa l.p. (in

D. Lucanu – Programare Algebrica

Limbajul de programare

• tipurile int si bool• variabile simple de tip int• tablouri de int-uri• expresii aritmetice:

+ - * / %

• expresii booleene: < <= > >= == != && || !

• instructiuni: atribuirea, if, if-else, while, {...}• sintaxa l.p. poate fi precizata in Maude

– Maude este utilizata ca metalimbaj– cu sistemul Maude obtinem un analizor sintactic pe

gratis

Page 3: Curs 4 - profs.info.uaic.rodlucanu/cursuri/progalg/resurse/curs4.pdfD. Lucanu – Programare Algebrica Curs 4 • Aplicatie: semantica algebrica a programelor – sintaxa l.p. (in

D. Lucanu – Programare Algebrica

Definitia limbajului: ierarhia modulelor

INT IDENT

DECL

EXPR

TST

INSTR

PGM

Page 4: Curs 4 - profs.info.uaic.rodlucanu/cursuri/progalg/resurse/curs4.pdfD. Lucanu – Programare Algebrica Curs 4 • Aplicatie: semantica algebrica a programelor – sintaxa l.p. (in

D. Lucanu – Programare Algebrica

Precizarea sintaxei l.p. in Maude: identificatorifth IDENT is

sort Ident .ops a b c d : -> Ident .ops A B C D : -> Ident .*** etc

endfth

Page 5: Curs 4 - profs.info.uaic.rodlucanu/cursuri/progalg/resurse/curs4.pdfD. Lucanu – Programare Algebrica Curs 4 • Aplicatie: semantica algebrica a programelor – sintaxa l.p. (in

D. Lucanu – Programare Algebrica

Precizarea sintaxei l.p. in Maude: declaratii

fth DECL isinc INT .inc IDENT .sorts IdentList VarDecl ArrDecl Decl .subsorts VarDecl ArrDecl < Decl .subsort Ident < IdentList .

op _,_ : IdentList IdentList -> IdentList[assoc].

op int_; : IdentList -> VarDecl .op int_[_] ; : Ident Nat -> ArrDecl

[strat (1 2 0)].op _ _ : Decl Decl -> Decl [assoc] .

endfth

Page 6: Curs 4 - profs.info.uaic.rodlucanu/cursuri/progalg/resurse/curs4.pdfD. Lucanu – Programare Algebrica Curs 4 • Aplicatie: semantica algebrica a programelor – sintaxa l.p. (in

D. Lucanu – Programare Algebrica

Precizarea sintaxei l.p. in Maude: expresiiaritmetice

fth EXP is inc DECL .sort Exp ArrComp .subsorts Int Ident ArrComp < Exp .

*** array componentop (_[_]) : Ident Exp -> ArrComp

[strat (1 2 0)] .op _+_ : Exp Exp -> Exp [ ditto ] .op _-_ : Exp Exp -> Exp [ ditto ] .op _*_ : Exp Exp -> Exp [ ditto ] .op _/_ : Exp Exp -> Exp [ prec 31 ] .op _%_ : Exp Exp -> Exp [ prec 31 ] .

endfth

Page 7: Curs 4 - profs.info.uaic.rodlucanu/cursuri/progalg/resurse/curs4.pdfD. Lucanu – Programare Algebrica Curs 4 • Aplicatie: semantica algebrica a programelor – sintaxa l.p. (in

D. Lucanu – Programare Algebrica

Precizarea sintaxei l.p. in Maude: expresii booleene

fth TST is inc EXP .sort Tst .subsort Bool < Tst .op _==_ : Exp Exp -> Tst [ prec 34 ] .op _!=_ : Exp Exp -> Tst [ prec 34 ] .op _<_ : Exp Exp -> Tst [ ctor ditto ] .op _<=_ : Exp Exp -> Tst [ ctor ditto ] .op _>_ : Exp Exp -> Tst [ ctor ditto ] .op _>=_ : Exp Exp -> Tst [ ctor ditto ] .op _&&_ : Tst Tst -> Tst [assoc comm prec 35] .op _||_ : Tst Tst -> Tst [assoc comm prec 36] .op !_ : Tst -> Tst .

endfth

Page 8: Curs 4 - profs.info.uaic.rodlucanu/cursuri/progalg/resurse/curs4.pdfD. Lucanu – Programare Algebrica Curs 4 • Aplicatie: semantica algebrica a programelor – sintaxa l.p. (in

D. Lucanu – Programare Algebrica

Precizarea sintaxei l.p. in Maude: instructiuni

fth INSTR is inc TST .sorts Instr InstrSeq .subsort Instr < InstrSeq .op _=_; : Ident Exp -> Instr [prec 20] .op _=_; : ArrComp Exp -> Instr [prec 20] .op if (_)_ : Tst Instr -> Instr .op while (_)_ : Tst Instr -> Instr .op skip ; : -> Instr .op _ _ : InstrSeq InstrSeq -> InstrSeq .op {_} : InstrSeq -> Instr .

endfth

Page 9: Curs 4 - profs.info.uaic.rodlucanu/cursuri/progalg/resurse/curs4.pdfD. Lucanu – Programare Algebrica Curs 4 • Aplicatie: semantica algebrica a programelor – sintaxa l.p. (in

D. Lucanu – Programare Algebrica

Precizarea sintaxei l.p. in Maude: programefth PGM is

inc INSTR .sorts Pgm .op __ : Decl Instr -> Pgm .

endfth

Page 10: Curs 4 - profs.info.uaic.rodlucanu/cursuri/progalg/resurse/curs4.pdfD. Lucanu – Programare Algebrica Curs 4 • Aplicatie: semantica algebrica a programelor – sintaxa l.p. (in

D. Lucanu – Programare Algebrica

Verificarea sintaxei unui programfth EX is

inc PGM .op PTEST : -> [Pgm] .eq PTEST =

int x ;int a[10] ; {

x = 1 ; (a[1]) = 10 ;

} .endfth

Maude> red PTEST .reduce in EX : PTEST .rewrites: ...result Pgm: (int x ; int a[10] ;)

{x = 1 ; (a[1]) = 10 ;}

Page 11: Curs 4 - profs.info.uaic.rodlucanu/cursuri/progalg/resurse/curs4.pdfD. Lucanu – Programare Algebrica Curs 4 • Aplicatie: semantica algebrica a programelor – sintaxa l.p. (in

D. Lucanu – Programare Algebrica

Codul Maude a unui program sursa

cod Maudecod sursa

fth SWAP-OBJ isinc OBJCODE .op x y t : -> SimVar .op body : InstrSeq .eq body = (t <- x;

x <- y;y <- t;) .

enfth

// SWAPint x, y, t;{

t = x;x = y;y = t;

}

Page 12: Curs 4 - profs.info.uaic.rodlucanu/cursuri/progalg/resurse/curs4.pdfD. Lucanu – Programare Algebrica Curs 4 • Aplicatie: semantica algebrica a programelor – sintaxa l.p. (in

D. Lucanu – Programare Algebrica

Cod Maude: ierarhia modulelor

VAR

OBJEXPR

OBJTST

OBJINSTR

OBJCODE

Page 13: Curs 4 - profs.info.uaic.rodlucanu/cursuri/progalg/resurse/curs4.pdfD. Lucanu – Programare Algebrica Curs 4 • Aplicatie: semantica algebrica a programelor – sintaxa l.p. (in

D. Lucanu – Programare Algebrica

Limbajul cod-Maudefth VAR is

sorts SimVar ArrVar .endfth

fmod OBJEXP{X :: VAR} is *** ...

endfm

fmod OBJTST{X :: VAR} isinc OBJEXP{X} .*** ...*** obs. == este codat cu ===

endfm

Page 14: Curs 4 - profs.info.uaic.rodlucanu/cursuri/progalg/resurse/curs4.pdfD. Lucanu – Programare Algebrica Curs 4 • Aplicatie: semantica algebrica a programelor – sintaxa l.p. (in

D. Lucanu – Programare Algebrica

Limbajul cod-Maude (continuare)fmod OBJINSTR{X :: VAR} is

*** ...*** obs. op de atrib = este codat cu <-

endfm

fmod OBJCODE{X :: VAR} is*** ...*** obs. == este codat cu ===

endfm

Page 15: Curs 4 - profs.info.uaic.rodlucanu/cursuri/progalg/resurse/curs4.pdfD. Lucanu – Programare Algebrica Curs 4 • Aplicatie: semantica algebrica a programelor – sintaxa l.p. (in

D. Lucanu – Programare Algebrica

Compilarea sursei in cod Maude

op a : -> SimVar .

int a;

op b : -> ArrVar .eq size(b) = n .

int b[n];

op Instrn : -> ObjInstr .eq Instrn = x <- obj(expr) .nume(x = expr;) = Instrn

x = expr;

Page 16: Curs 4 - profs.info.uaic.rodlucanu/cursuri/progalg/resurse/curs4.pdfD. Lucanu – Programare Algebrica Curs 4 • Aplicatie: semantica algebrica a programelor – sintaxa l.p. (in

D. Lucanu – Programare Algebrica

Compilarea sursei in cod Maude (continuare)

obj(Instrucţiune1)op Instrn : -> ObjInstr .eq Instrn = if (obj(expr))

{nume(obj(Instrucţiune1)) }nume(if ...) = Instrn

if (expr) Instrucţiune1

obj(Instrucţiune1)op Instrn : -> ObjInstr .

eq Instrn = while (obj(expr)) {nume(obj(Instrucţiune1)) }

nume(while ...) = Instrn

while (expr) Instrucţiune1

Page 17: Curs 4 - profs.info.uaic.rodlucanu/cursuri/progalg/resurse/curs4.pdfD. Lucanu – Programare Algebrica Curs 4 • Aplicatie: semantica algebrica a programelor – sintaxa l.p. (in

D. Lucanu – Programare Algebrica

Semantica operationala algebrica - memoria

sorts Store EStore .subsort Store < EStore .op _[[_]] : Store SimVar -> Int .op _[[_]] : Store ArrComp -> Int .

Page 18: Curs 4 - profs.info.uaic.rodlucanu/cursuri/progalg/resurse/curs4.pdfD. Lucanu – Programare Algebrica Curs 4 • Aplicatie: semantica algebrica a programelor – sintaxa l.p. (in

D. Lucanu – Programare Algebrica

Semantica operationala algebrica - evaluare expresii

op _[[_]] : Store ObjExp -> Int .*** ...eq S[[N]] = N .eq S[[E1 + E2]] = S[[E1]] + S[[E2]] .eq S[[E1 - E2]] = S[[E1]] - S[[E2]] .eq S[[E1 * E2]] = S[[E1]] * S[[E2]] .eq S[[E1 / E2]] = S[[E1]] quo S[[E2]] .eq S[[E1 % E2]] = S[[E1]] rem S[[E2]] .

Page 19: Curs 4 - profs.info.uaic.rodlucanu/cursuri/progalg/resurse/curs4.pdfD. Lucanu – Programare Algebrica Curs 4 • Aplicatie: semantica algebrica a programelor – sintaxa l.p. (in

D. Lucanu – Programare Algebrica

Semantica operationala algebrica - evaluare teste

op _[[_]] : Store ObjTst -> Bool .eq S[[TB]] = TB .eq S[[E1 === E2]] = (S[[E1]] is S[[E2]]) .eq S[[E1 != E2]] = not (S[[E1]] is S[[E2]]) .eq S[[E1 <= E2]] = (S[[E1]] <= S[[E2]]) .eq S[[E1 < E2]] = (S[[E1]] < S[[E2]]) .eq S[[E1 >= E2]] = (S[[E1]] >= S[[E2]]) .eq S[[E1 > E2]] = (S[[E1]] > S[[E2]]) .eq S[[T1 || T2]] = S[[T1]] or S[[T2]] .eq S[[T1 && T2]] = S[[T1]] and S[[T2]] .eq S[[! T]] = (not S[[T]]) .

Page 20: Curs 4 - profs.info.uaic.rodlucanu/cursuri/progalg/resurse/curs4.pdfD. Lucanu – Programare Algebrica Curs 4 • Aplicatie: semantica algebrica a programelor – sintaxa l.p. (in

D. Lucanu – Programare Algebrica

Semantica operationala algebrica – instr. de atribuire

op _[[_]] : Store ObjInstr -> Store .op _[[_]] : Store ObjInstrSeq -> Store .

eq (S[[ X <- E; ]])[[ Y ]] = if (X == Y)then S[[ E ]]else S[[ Y ]]

fi .eq (S[[ X <- E; ]]) [[ A[I] ]] = S[[ A[I] ]] . eq (S[[ A[E1] <- E2; ]])[[ B[I] ]] =

if (A == B)then if (S[[ E1 ]] is I)

then S[[ E2 ]]else S[[ A[I] ]]

fielse S[[ B[I] ]]

fi .eq (S[[ A[E1] <- E2; ]]) [[ Y ]] = S[[ Y ]] .

Page 21: Curs 4 - profs.info.uaic.rodlucanu/cursuri/progalg/resurse/curs4.pdfD. Lucanu – Programare Algebrica Curs 4 • Aplicatie: semantica algebrica a programelor – sintaxa l.p. (in

D. Lucanu – Programare Algebrica

Semantica operationala algebrica – compunerea secventiala

eq (S[[ P1 P2 ]]) [[ X ]] = ((S[[ P1 ]])[[ P2 ]])[[ X ]] .

eq (S[[ P1 P2 ]])[[ A[I] ]] = ((S[[ P1 ]])[[ P2 ]])[[ A[I] ]] .

Page 22: Curs 4 - profs.info.uaic.rodlucanu/cursuri/progalg/resurse/curs4.pdfD. Lucanu – Programare Algebrica Curs 4 • Aplicatie: semantica algebrica a programelor – sintaxa l.p. (in

D. Lucanu – Programare Algebrica

Semantica operationala algebrica – instr. if-else

eq (S[[if T INSTR1 else INSTR2 ]]) [[ X ]] =if (S[[ T ]])

then (S[[ INSTR1 ]])[[ X ]]else (S[[ INSTR2 ]])[[ X ]]

fi .eq (S[[if T INSTR1 else INSTR2]])[[ A[I] ]] =

if (S[[ T ]])then (S[[ INSTR1 ]])[[ A[I] ]]else (S[[ INSTR2 ]])[[ A[I] ]]

fi .

Page 23: Curs 4 - profs.info.uaic.rodlucanu/cursuri/progalg/resurse/curs4.pdfD. Lucanu – Programare Algebrica Curs 4 • Aplicatie: semantica algebrica a programelor – sintaxa l.p. (in

D. Lucanu – Programare Algebrica

Semantica operationala algebrica – instr. while

eq (S[[while T INSTR1]]) [[ X ]] =if (S [[ T ]])

then (S [[ INSTR1 while T INSTR1 ]])[[ X ]]else S [[ X ]]

fi .eq (S[[ while T INSTR1]])[[ A[I] ]] =

if (S[[ T ]])then (S[[ INSTR1 while T INSTR1 ]])[[ A[I] ]]else S[[ A[I] ]]

fi .

Page 24: Curs 4 - profs.info.uaic.rodlucanu/cursuri/progalg/resurse/curs4.pdfD. Lucanu – Programare Algebrica Curs 4 • Aplicatie: semantica algebrica a programelor – sintaxa l.p. (in

D. Lucanu – Programare Algebrica

Memorie nedefinita

• programulwhile (true)i = i+1;

• nu are proprietatea de terminare• ... decis[[while (true) i = i+1;]] =s[[i = i+1; while (true) i = i+1;]] =s[[i = i+1; i = i+1; while (true) i = i+1;]] = ...

este nedefinita• notam

s[[while (true) do i = i+1;]] = ⊥