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 |