Theory Term
section "Statements and expression emulations"
theory Term imports Main begin
typedecl cname
typedecl mname
typedecl fname
typedecl vname
axiomatization
This
Par
Res :: vname
datatype stmt
= Skip
| Comp stmt stmt ("_;; _" [91,90 ] 90)
| Cond expr stmt stmt ("If '(_') _ Else _" [ 3,91,91] 91)
| Loop vname stmt ("While '(_') _" [ 3,91 ] 91)
| LAss vname expr ("_ :== _" [99, 95] 94)
| FAss expr fname expr ("_.._:==_" [95,99,95] 94)
| Meth "cname × mname"
| Impl "cname × mname"
and expr
= NewC cname ("new _" [ 99] 95)
| Cast cname expr
| LAcc vname
| FAcc expr fname ("_.._" [95,99] 95)
| Call cname expr mname expr
("{_}_.._'(_')" [99,95,99,95] 95)
end