src/HOL/NanoJava/Term.thy
author oheimb
Sat, 16 Jun 2001 20:06:42 +0200
changeset 11376 bf98ad1c22c6
child 11476 06c1998340a8
permissions -rw-r--r--
added NanoJava
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11376
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
     1
(*  Title:      HOL/NanoJava/Term.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 "Statements and expression emulations"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
     8
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
     9
theory Term = Main:
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    10
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    11
typedecl cname  (* class name *)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    12
typedecl vnam   (* variable or field name *)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    13
typedecl mname  (* method name *)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    14
arities  cname :: "term"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    15
         vnam  :: "term"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    16
         mname :: "term"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    17
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    18
datatype vname  (* variable for special names *)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    19
  = This        (* This pointer *)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    20
  | Param       (* method parameter *)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    21
  | Res         (* method result *)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    22
  | VName vnam 
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    23
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    24
datatype stmt
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    25
  = Skip                   (* empty statement *)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    26
  | Comp       stmt stmt   ("_;; _"             [91,90]    90)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    27
  | Cond vname stmt stmt   ("If '(_') _ Else _" [99,91,91] 91)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    28
  | Loop vname stmt        ("While '(_') _"     [99,91   ] 91)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    29
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    30
  | NewC vname cname       ("_:=new _"  [99,   99] 95) (* object creation  *)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    31
  | Cast vname cname vname ("_:='(_')_" [99,99,99] 95) (* assignment, cast *)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    32
  | FAcc vname vname vnam  ("_:=_.._"   [99,99,99] 95) (* field access     *)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    33
  | FAss vname vnam  vname ("_.._:=_"   [99,99,99] 95) (* field assigment  *)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    34
  | Call vname cname vname mname vname                 (* method call      *)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    35
                           ("_:={_}_.._'(_')" [99,99,99,99,99] 95)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    36
  | Meth cname mname       (* virtual method *)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    37
  | Impl cname mname       (* method implementation *)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    38
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    39
(*###TO Product_Type_lemmas.ML*)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    40
lemma pair_imageI [intro]: "(a, b) \<in> A ==> f a b : (%(a, b). f a b) ` A"
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    41
apply (rule_tac x = "(a,b)" in image_eqI)
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    42
apply  auto
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    43
done
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    44
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    45
end
bf98ad1c22c6 added NanoJava
oheimb
parents:
diff changeset
    46