classdecl c com , classdecl c > com classdecl , classdecl (prog) Il programma
c ’ c ” c ’ c ” <ClassDecl ClassDecList, c c ” <ClassDecl ClassDecList, c c ” istdecl s istdecl mdl m istdecl s istdecl mdl m / c] c [ / c] Definizioni: Classi (classdecl) (classdeclList)
s [ /m] s [ /m] s ’ s ” s ’ s ” < MetDef MetDefList, s s ” istdecl [ /x] istdecl [ /x] ” ’ ” ” ” (instdecl) Definizioni: Variabili d’istanza e metodi d’istanza (instdeclist) (MetDef) (MDL)
s [ /m] s [ /m] s ’ s ” s ’ s ” < StaticMetDef StaticMetDefList, s s ” < StaticMetDef StaticMetDefList, s s ” (SMD) (SMDLl) Definizioni: Metodi statici
Statments: StmtList e Blocco com > com com com > com com com > com > (Block) (StmtList)
Dichiarazioni: variabili ” ’ [ /x] ” ’ [ /x] dcl > dcl = . ’ > exp > exp ” ’ [v/x] ” dcl > dcl (var1) (var2) (var1obj)
> exp (x)≠ > com (o)= l ’ ( l )= ’ = [v/x] > (o)= l ’ ( l )= ’ = [v/x] > (o.x=) Comandi: Assegnamento (=)
exp cmd > exp > cmd com > com exp cmd > exp > cmd com com (if-tt) (if-ff) Comandi: if
exp > exp com > com com exp > com com com > com (W-ff) (W-tt) Comandi: while
c (ideC)= s (m)= > c (ideC)= s (m)= > Comandi: invocazione di un metodo statico invocazione di un metodo statico (non calcola un valore) invoc
> (o)=l (l)= c (c)= m (m)= c (c)= m (m)= > Comandi: invocazione di un metodo d’istanza (non calcola un valore) invoc
> > [v/retVal], ’> (return) Comandi: return
> exp > exp v [op] v’ = v” > exp > exp op v=v’ > exp (x)= b > exp > exp (B Ide ) (B | ) (BE op ) (B const ) Espressioni
c (c) = l = newloc ( ) c (c) = l = newloc ( ) > /l ]> (o)=l (l)= (o)=l (l)= > new Espressioni : oggetti o.x
s (m)= > c (ideC)= s (m)= > > [v/retVal], ’> (return) Espressioni : invocazione di un metodo statico (che calcola un valore) invoc (Exp)
> (o)=l ’(l)= c (ideC)= m (m)= c (ideC)= m (m)= > Espressioni: invocazione di un metodo d’istanza (che calcola un valore, no exp per oggetto) invoc (Exp)
> > ”(l)= c (ideC)= m (m)= ”(l)= c (ideC)= m (m)= > Espressioni: invocazione di un metodo d’istanza (che calcola un valore, con oggetto espressione) invoc (Exp)
> ’(l)= > Espressioni : oggetti (con oggetto espressione) o.x
> > ”’(l)= c (c)= m (m)= ”’(l)= c (c)= m (m)= > Comandi: invocazione di un metodo d’istanza (non calcola un valore con oggetto espressione ) invoc
Esempio e uso di this prog{class Foo{ public int x; public int y; public boolean equal (Foo o) { return ((this.x==o.x)&(this.y==o.y)} public Foo copy(){ Foo og =new Foo(); og.x=this.x; og.y=this.y;} {Foo og1=new Foo(); og1.x=6; og1.y=0; Foo og2=og1.copy(); }}