src/HOL/NanoJava/Decl.thy
author oheimb
Thu, 09 Aug 2001 20:48:57 +0200
changeset 11497 0e66e0114d9a
parent 11486 8f32860eac3a
child 11558 6539627881e8
permissions -rw-r--r--
corrected initialization of locals, streamlined Impl
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11376
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
     1
(*  Title:      HOL/NanoJava/Decl.thy
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
     2
    ID:         $Id$
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
     3
    Author:     David von Oheimb
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
     4
    Copyright   2001 Technische Universitaet Muenchen
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
     5
*)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
     6
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
     7
header "Types, class Declarations, and whole programs"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
     8
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
     9
theory Decl = Term:
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    10
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    11
datatype ty
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    12
  = NT           (* null type  *)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    13
  | Class cname  (* class type *)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    14
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    15
types	fdecl		(* field declaration *)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    16
	= "vnam \<times> ty"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    17
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    18
record  methd		(* method declaration *)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    19
	= par :: ty 
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    20
          res :: ty 
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    21
          lcl ::"(vname \<times> ty) list"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    22
          bdy :: stmt
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    23
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    24
types	mdecl    	(* method declaration *)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    25
        = "mname \<times> methd"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    26
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    27
record	class		(* class *)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    28
	= super   :: cname
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    29
          fields  ::"fdecl list"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    30
          methods ::"mdecl list"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    31
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    32
types	cdecl		(* class declaration *)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    33
	= "cname \<times> class"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    34
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    35
types   prog
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    36
        = "cdecl list"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    37
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    38
translations
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    39
  "fdecl" \<leftharpoondown> (type)"vname \<times> ty"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    40
  "mdecl" \<leftharpoondown> (type)"mname \<times> ty \<times> ty \<times> stmt"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    41
  "class" \<leftharpoondown> (type)"cname \<times> fdecl list \<times> mdecl list"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    42
  "cdecl" \<leftharpoondown> (type)"cname \<times> class"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    43
  "prog " \<leftharpoondown> (type)"cdecl list"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    44
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    45
consts
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    46
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    47
  Prog    :: prog	(* program as a global value *)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    48
  Object  :: cname	(* name of root class *)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    49
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    50
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    51
constdefs
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    52
  class	     :: "cname \<leadsto> class"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    53
 "class      \<equiv> map_of Prog"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    54
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    55
  is_class   :: "cname => bool"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    56
 "is_class C \<equiv> class C \<noteq> None"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    57
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    58
lemma finite_is_class: "finite {C. is_class C}"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    59
apply (unfold is_class_def class_def)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    60
apply (fold dom_def)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    61
apply (rule finite_dom_map_of)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    62
done
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    63
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    64
end