| author | Andreas Lochbihler |
| Tue, 12 Jun 2012 15:32:14 +0200 | |
| changeset 48101 | 1b9796b7ab03 |
| parent 44375 | dfc2e722fe47 |
| child 58249 | 180f1b3508ed |
| permissions | -rw-r--r-- |
| 11376 | 1 |
(* Title: HOL/NanoJava/Term.thy |
| 41589 | 2 |
Author: David von Oheimb, Technische Universitaet Muenchen |
| 11376 | 3 |
*) |
4 |
||
5 |
header "Statements and expression emulations" |
|
6 |
||
| 16417 | 7 |
theory Term imports Main begin |
| 11376 | 8 |
|
|
11558
6539627881e8
simplified vnam/vname, introduced fname, improved comments
oheimb
parents:
11507
diff
changeset
|
9 |
typedecl cname --{* class name *}
|
|
6539627881e8
simplified vnam/vname, introduced fname, improved comments
oheimb
parents:
11507
diff
changeset
|
10 |
typedecl mname --{* method name *}
|
|
6539627881e8
simplified vnam/vname, introduced fname, improved comments
oheimb
parents:
11507
diff
changeset
|
11 |
typedecl fname --{* field name *}
|
|
6539627881e8
simplified vnam/vname, introduced fname, improved comments
oheimb
parents:
11507
diff
changeset
|
12 |
typedecl vname --{* variable name *}
|
| 11376 | 13 |
|
| 44375 | 14 |
axiomatization |
15 |
This --{* This pointer *}
|
|
16 |
Par --{* method parameter *}
|
|
|
11558
6539627881e8
simplified vnam/vname, introduced fname, improved comments
oheimb
parents:
11507
diff
changeset
|
17 |
Res :: vname --{* method result *}
|
| 44375 | 18 |
-- {* Inequality axioms are not required for the meta theory. *}
|
|
11558
6539627881e8
simplified vnam/vname, introduced fname, improved comments
oheimb
parents:
11507
diff
changeset
|
19 |
(* |
| 44375 | 20 |
where |
|
11558
6539627881e8
simplified vnam/vname, introduced fname, improved comments
oheimb
parents:
11507
diff
changeset
|
21 |
This_neq_Par [simp]: "This \<noteq> Par" |
|
6539627881e8
simplified vnam/vname, introduced fname, improved comments
oheimb
parents:
11507
diff
changeset
|
22 |
Par_neq_Res [simp]: "Par \<noteq> Res" |
|
6539627881e8
simplified vnam/vname, introduced fname, improved comments
oheimb
parents:
11507
diff
changeset
|
23 |
Res_neq_This [simp]: "Res \<noteq> This" |
|
6539627881e8
simplified vnam/vname, introduced fname, improved comments
oheimb
parents:
11507
diff
changeset
|
24 |
*) |
| 11376 | 25 |
|
26 |
datatype stmt |
|
|
11558
6539627881e8
simplified vnam/vname, introduced fname, improved comments
oheimb
parents:
11507
diff
changeset
|
27 |
= Skip --{* empty statement *}
|
| 11476 | 28 |
| Comp stmt stmt ("_;; _" [91,90 ] 90)
|
| 11565 | 29 |
| Cond expr stmt stmt ("If '(_') _ Else _" [ 3,91,91] 91)
|
30 |
| Loop vname stmt ("While '(_') _" [ 3,91 ] 91)
|
|
| 11560 | 31 |
| LAss vname expr ("_ :== _" [99, 95] 94) --{* local assignment *}
|
32 |
| FAss expr fname expr ("_.._:==_" [95,99,95] 94) --{* field assignment *}
|
|
|
11558
6539627881e8
simplified vnam/vname, introduced fname, improved comments
oheimb
parents:
11507
diff
changeset
|
33 |
| Meth "cname \<times> mname" --{* virtual method *}
|
|
6539627881e8
simplified vnam/vname, introduced fname, improved comments
oheimb
parents:
11507
diff
changeset
|
34 |
| Impl "cname \<times> mname" --{* method implementation *}
|
| 11476 | 35 |
and expr |
|
11558
6539627881e8
simplified vnam/vname, introduced fname, improved comments
oheimb
parents:
11507
diff
changeset
|
36 |
= NewC cname ("new _" [ 99] 95) --{* object creation *}
|
|
6539627881e8
simplified vnam/vname, introduced fname, improved comments
oheimb
parents:
11507
diff
changeset
|
37 |
| Cast cname expr --{* type cast *}
|
|
6539627881e8
simplified vnam/vname, introduced fname, improved comments
oheimb
parents:
11507
diff
changeset
|
38 |
| LAcc vname --{* local access *}
|
|
6539627881e8
simplified vnam/vname, introduced fname, improved comments
oheimb
parents:
11507
diff
changeset
|
39 |
| FAcc expr fname ("_.._" [95,99] 95) --{* field access *}
|
|
6539627881e8
simplified vnam/vname, introduced fname, improved comments
oheimb
parents:
11507
diff
changeset
|
40 |
| Call cname expr mname expr |
|
6539627881e8
simplified vnam/vname, introduced fname, improved comments
oheimb
parents:
11507
diff
changeset
|
41 |
("{_}_.._'(_')" [99,95,99,95] 95) --{* method call *}
|
| 11376 | 42 |
|
43 |
end |
|
44 |