| 
11376
 | 
     1  | 
(*  Title:      HOL/NanoJava/Term.thy
  | 
| 
 | 
     2  | 
    ID:         $Id$
  | 
| 
 | 
     3  | 
    Author:     David von Oheimb
  | 
| 
 | 
     4  | 
    Copyright   2001 Technische Universitaet Muenchen
  | 
| 
 | 
     5  | 
*)
  | 
| 
 | 
     6  | 
  | 
| 
 | 
     7  | 
header "Statements and expression emulations"
  | 
| 
 | 
     8  | 
  | 
| 
 | 
     9  | 
theory Term = Main:
  | 
| 
 | 
    10  | 
  | 
| 
 | 
    11  | 
typedecl cname  (* class name *)
  | 
| 
 | 
    12  | 
typedecl vnam   (* variable or field name *)
  | 
| 
 | 
    13  | 
typedecl mname  (* method name *)
  | 
| 
 | 
    14  | 
  | 
| 
 | 
    15  | 
datatype vname  (* variable for special names *)
  | 
| 
 | 
    16  | 
  = This        (* This pointer *)
  | 
| 
 | 
    17  | 
  | Param       (* method parameter *)
  | 
| 
 | 
    18  | 
  | Res         (* method result *)
  | 
| 
 | 
    19  | 
  | VName vnam 
  | 
| 
 | 
    20  | 
  | 
| 
 | 
    21  | 
datatype stmt
  | 
| 
 | 
    22  | 
  = Skip                   (* empty statement *)
  | 
| 
11476
 | 
    23  | 
  | Comp       stmt stmt   ("_;; _"             [91,90   ] 90)
 | 
| 
 | 
    24  | 
  | Cond expr  stmt stmt   ("If '(_') _ Else _" [99,91,91] 91)
 | 
| 
11376
 | 
    25  | 
  | Loop vname stmt        ("While '(_') _"     [99,91   ] 91)
 | 
| 
11476
 | 
    26  | 
  | LAss vname expr        ("_ :== _"           [99,   95] 94) (* local ass. *)
 | 
| 
 | 
    27  | 
  | FAss expr  vnam expr   ("_.._:==_"          [95,99,95] 94) (* field ass. *)
 | 
| 
11507
 | 
    28  | 
  | Meth "cname \<times> mname"   (* virtual method *)
  | 
| 
 | 
    29  | 
  | Impl "cname \<times> mname"   (* method implementation *)
  | 
| 
11476
 | 
    30  | 
and expr
  | 
| 
 | 
    31  | 
  = NewC cname       ("new _"        [   99] 95) (* object creation  *)
 | 
| 
 | 
    32  | 
  | Cast cname expr                              (* type cast        *)
  | 
| 
 | 
    33  | 
  | LAcc vname                                   (* local access     *)
  | 
| 
 | 
    34  | 
  | FAcc expr  vnam  ("_.._"         [95,99] 95) (* field access     *)
 | 
| 
 | 
    35  | 
  | Call cname expr mname expr                   (* method call      *)
  | 
| 
 | 
    36  | 
                     ("{_}_.._'(_')" [99,95,99,95] 95)
 | 
| 
11376
 | 
    37  | 
  | 
| 
 | 
    38  | 
end
  | 
| 
 | 
    39  | 
  |