src/HOL/Bali/Term.thy
changeset 12925 99131847fb93
parent 12858 6214f03d6d27
child 13337 f75dfc606ac7
equal deleted inserted replaced
12924:02eb40cde931 12925:99131847fb93
    76         | Cont label  (* continue *)
    76         | Cont label  (* continue *)
    77         | Ret         (* return from method *)
    77         | Ret         (* return from method *)
    78 
    78 
    79 datatype var
    79 datatype var
    80 	= LVar                  lname(* local variable (incl. parameters) *)
    80 	= LVar                  lname(* local variable (incl. parameters) *)
    81         | FVar qtname bool expr vname(*class field*)("{_,_}_.._"[10,10,85,99]90)
    81         | FVar qtname qtname bool expr vname
       
    82                                 (*class field*)("{_,_,_}_.._"[10,10,10,85,99]90)
    82 	| AVar        expr expr      (* array component *) ("_.[_]"[90,10   ]90)
    83 	| AVar        expr expr      (* array component *) ("_.[_]"[90,10   ]90)
    83 
    84 
    84 and expr
    85 and expr
    85 	= NewC qtname              (* class instance creation *)
    86 	= NewC qtname              (* class instance creation *)
    86 	| NewA ty expr             (* array creation *) ("New _[_]"[99,10   ]85)
    87 	| NewA ty expr             (* array creation *) ("New _[_]"[99,10   ]85)
    89 	| Lit  val                 (* literal value, references not allowed *)
    90 	| Lit  val                 (* literal value, references not allowed *)
    90 	| Super                    (* special Super keyword *)
    91 	| Super                    (* special Super keyword *)
    91 	| Acc  var                 (* variable access *)
    92 	| Acc  var                 (* variable access *)
    92 	| Ass  var expr            (* variable assign *) ("_:=_"   [90,85   ]85)
    93 	| Ass  var expr            (* variable assign *) ("_:=_"   [90,85   ]85)
    93 	| Cond expr expr expr      (* conditional *)  ("_ ? _ : _" [85,85,80]80)
    94 	| Cond expr expr expr      (* conditional *)  ("_ ? _ : _" [85,85,80]80)
    94         | Call ref_ty inv_mode expr mname "(ty list)" (* method call *)
    95         | Call qtname ref_ty inv_mode expr mname "(ty list)" (* method call *)
    95                   "(expr list)" ("{_,_}_\<cdot>_'( {_}_')"[10,10,85,99,10,10]85)
    96                   "(expr list)" ("{_,_,_}_\<cdot>_'( {_}_')"[10,10,10,85,99,10,10]85)
    96         | Methd qtname sig          (*   (folded) method (see below) *)
    97         | Methd qtname sig          (*   (folded) method (see below) *)
    97         | Body qtname stmt          (* (unfolded) method body *)
    98         | Body qtname stmt          (* (unfolded) method body *)
    98 and  stmt
    99 and  stmt
    99 	= Skip                     (* empty      statement *)
   100 	= Skip                     (* empty      statement *)
   100 	| Expr  expr               (* expression statement *)
   101 	| Expr  expr               (* expression statement *)
   155 ML {*
   156 ML {*
   156 bind_thms ("is_stmt_rews", sum3_instantiate (thm "is_stmt_def"));
   157 bind_thms ("is_stmt_rews", sum3_instantiate (thm "is_stmt_def"));
   157 *}
   158 *}
   158 
   159 
   159 declare is_stmt_rews [simp]
   160 declare is_stmt_rews [simp]
   160 
       
   161 
       
   162 (* ############# Just testing syntax *)
       
   163 (** unfortunately cannot simply instantiate tnam **)
       
   164 (*
       
   165 datatype tnam_  = HasFoo_ | Base_ | Ext_
       
   166 datatype vnam_  = arr_ | vee_ | z_ | e_
       
   167 datatype label_ = lab1_
       
   168 
       
   169 consts
       
   170 
       
   171   tnam_ :: "tnam_  \<Rightarrow> tnam"
       
   172   vnam_ :: "vnam_  \<Rightarrow> vname"
       
   173   label_:: "label_ \<Rightarrow> label"
       
   174 axioms  
       
   175 
       
   176   inj_tnam_  [simp]: "(tnam_  x = tnam_  y) = (x = y)"
       
   177   inj_vnam_  [simp]: "(vnam_  x = vnam_  y) = (x = y)"
       
   178   inj_label_ [simp]: "(label_ x = label_ y) = (x = y)"
       
   179   
       
   180   
       
   181   surj_tnam_:  "\<exists>m. n = tnam_  m"
       
   182   surj_vnam_:  "\<exists>m. n = vnam_  m"
       
   183   surj_label_:" \<exists>m. n = label_ m"
       
   184 
       
   185 syntax
       
   186 
       
   187   HasFoo :: qtname
       
   188   Base   :: qtname
       
   189   Ext    :: qtname
       
   190   arr :: ename
       
   191   vee :: ename
       
   192   z   :: ename
       
   193   e   :: ename
       
   194   lab1:: label
       
   195 
       
   196 consts
       
   197   
       
   198   foo    :: mname
       
   199 translations
       
   200 
       
   201   "HasFoo" == "\<lparr>pid=java_lang,tid=TName (tnam_ HasFoo_)\<rparr>"
       
   202   "Base"   == "\<lparr>pid=java_lang,tid=TName (tnam_ Base_)\<rparr>"
       
   203   "Ext"    == "\<lparr>pid=java_lang,tid=TName (tnam_ Ext_)\<rparr>"
       
   204   "arr"    ==        "(vnam_ arr_)"
       
   205   "vee"    ==        "(vnam_ vee_)"
       
   206   "z"      ==        "(vnam_ z_)"
       
   207   "e"      ==        "(vnam_ e_)"
       
   208   "lab1"   ==        "label_ lab1_"
       
   209 
       
   210 constdefs test::stmt
       
   211 "test \<equiv>
       
   212 (lab1@ While(Acc  
       
   213       (Acc ({Base,True}StatRef (ClassT Object).arr).[Lit (Intg #2)])) Skip)"
       
   214 
       
   215 consts
       
   216  pTs :: "ty list"
       
   217    
       
   218 constdefs 
       
   219 
       
   220 test1::stmt
       
   221 "test1 \<equiv> 
       
   222   Expr({ClassT Base,IntVir}!!e\<cdot>foo({pTs}[Lit Null]))"
       
   223 
       
   224 
       
   225 
       
   226 constdefs test::stmt
       
   227 "test \<equiv>
       
   228 (lab1\<cdot> While(Acc 
       
   229       (Acc ({Base,True}StatRef (ClassT Object)..arr).[Lit (Intg #2)])) Skip)"
       
   230 *)
       
   231 end
   161 end