(* ********************************************************************** *)
include "string/string.ma".
-include "compiler/utility.ma".
-include "freescale/word32.ma".
include "compiler/ast_type.ma".
(* ****************** *)
| PREAST_EXPR_DIV: preast_expr → preast_expr → preast_expr
| PREAST_EXPR_SHR: preast_expr → preast_expr → preast_expr
| PREAST_EXPR_SHL: preast_expr → preast_expr → preast_expr
+| PREAST_EXPR_AND: preast_expr → preast_expr → preast_expr
+| PREAST_EXPR_OR: preast_expr → preast_expr → preast_expr
+| PREAST_EXPR_XOR: preast_expr → preast_expr → preast_expr
| PREAST_EXPR_GT : preast_expr → preast_expr → preast_expr
| PREAST_EXPR_GTE: preast_expr → preast_expr → preast_expr
(* -------------------------- *)
+(* inizializzatori: ... valori ... *)
+inductive preast_init_val : Type ≝
+ PREAST_INIT_VAL_BYTE8: byte8 → preast_init_val
+| PREAST_INIT_VAL_WORD16: word16 → preast_init_val
+| PREAST_INIT_VAL_WORD32: word32 → preast_init_val
+| PREAST_INIT_VAL_ARRAY: ne_list preast_init_val → preast_init_val
+| PREAST_INIT_VAL_STRUCT: ne_list preast_init_val → preast_init_val.
+
+(*
+ inizializzatori: ammesse solo due forme, no ibridi
+ 1) var1 = var2
+ 2) var = ... valori ...
+*)
+inductive preast_init : Type ≝
+ PREAST_INIT_VAR: preast_var → preast_init
+| PREAST_INIT_VAL: preast_init_val → preast_init.
+
+(* -------------------------- *)
+
(* statement: assegnamento/while/if else if else *)
inductive preast_stm : Type ≝
PREAST_STM_ASG: preast_var → preast_expr → preast_stm
(* dichiarazioni *)
with preast_decl : Type ≝
PREAST_NO_DECL: list preast_stm → preast_decl
-| PREAST_DECL: bool → aux_str_type → ast_type → option preast_expr → preast_decl → preast_decl.
+| PREAST_CONST_DECL: aux_str_type → ast_type → preast_init → preast_decl → preast_decl
+| PREAST_VAR_DECL: aux_str_type → ast_type → option preast_init → preast_decl → preast_decl.
(* -------------------------- *)