Library compcert.cparser.Cabs
Require Import BinPos.
Parameter string : Type.
Parameter char_code : Type.
Parameter cabsloc : Type.
Record floatInfo := {
isHex_FI:bool;
integer_FI:option string;
fraction_FI:option string;
exponent_FI:option string;
suffix_FI:option string
}.
Inductive structOrUnion :=
| STRUCT | UNION.
Inductive typeSpecifier :=
| Tvoid
| Tchar
| Tshort
| Tint
| Tlong
| Tfloat
| Tdouble
| Tsigned
| Tunsigned
| T_Bool
| Tnamed : string -> typeSpecifier
| Tstruct_union : structOrUnion -> option string -> option (list field_group) -> list attribute -> typeSpecifier
| Tenum : option string -> option (list (string * option expression * cabsloc)) -> list attribute -> typeSpecifier
with storage :=
AUTO | STATIC | EXTERN | REGISTER | TYPEDEF
with cvspec :=
| CV_CONST | CV_VOLATILE | CV_RESTRICT
| CV_ATTR : attribute -> cvspec
with spec_elem :=
| SpecCV : cvspec -> spec_elem
| SpecStorage : storage -> spec_elem
| SpecInline
| SpecType : typeSpecifier -> spec_elem
with decl_type :=
| JUSTBASE
| ARRAY : decl_type -> list cvspec -> option expression -> decl_type
| PTR : list cvspec -> decl_type -> decl_type
| PROTO : decl_type -> list parameter * bool -> decl_type
with parameter :=
| PARAM : list spec_elem -> option string -> decl_type -> list attribute -> cabsloc -> parameter
with field_group :=
| Field_group : list spec_elem -> list (option name * option expression) -> cabsloc -> field_group
with name :=
| Name : string -> decl_type -> list attribute -> cabsloc -> name
with init_name :=
| Init_name : name -> init_expression -> init_name
with binary_operator :=
| ADD | SUB | MUL | DIV | MOD
| AND | OR
| BAND | BOR | XOR | SHL | SHR
| EQ | NE | LT | GT | LE | GE
| ASSIGN
| ADD_ASSIGN | SUB_ASSIGN | MUL_ASSIGN | DIV_ASSIGN | MOD_ASSIGN
| BAND_ASSIGN | BOR_ASSIGN | XOR_ASSIGN | SHL_ASSIGN | SHR_ASSIGN
| COMMA
with unary_operator :=
| MINUS | PLUS | NOT | BNOT | MEMOF | ADDROF
| PREINCR | PREDECR | POSINCR | POSDECR
with expression :=
| UNARY : unary_operator -> expression -> expression
| BINARY : binary_operator -> expression -> expression -> expression
| QUESTION : expression -> expression -> expression -> expression
| CAST : (list spec_elem * decl_type) -> init_expression -> expression
| CALL : expression -> list expression -> expression
| BUILTIN_VA_ARG : expression -> list spec_elem * decl_type -> expression
| CONSTANT : constant -> expression
| VARIABLE : string -> expression
| EXPR_SIZEOF : expression -> expression
| TYPE_SIZEOF : (list spec_elem * decl_type) -> expression
| INDEX : expression -> expression -> expression
| MEMBEROF : expression -> string -> expression
| MEMBEROFPTR : expression -> string -> expression
| EXPR_ALIGNOF : expression -> expression
| TYPE_ALIGNOF : (list spec_elem * decl_type) -> expression
with constant :=
| CONST_INT : string -> constant
| CONST_FLOAT : floatInfo -> constant
| CONST_CHAR : bool -> list char_code -> constant
| CONST_STRING : bool -> list char_code -> constant
with init_expression :=
| NO_INIT
| SINGLE_INIT : expression -> init_expression
| COMPOUND_INIT : list (list initwhat * init_expression) -> init_expression
with initwhat :=
| INFIELD_INIT : string -> initwhat
| ATINDEX_INIT : expression -> initwhat
with attribute :=
| GCC_ATTR : list gcc_attribute -> cabsloc -> attribute
| PACKED_ATTR : list expression -> cabsloc -> attribute
| ALIGNAS_ATTR : list expression -> cabsloc -> attribute
with gcc_attribute :=
| GCC_ATTR_EMPTY
| GCC_ATTR_NOARGS : gcc_attribute_word -> gcc_attribute
| GCC_ATTR_ARGS : gcc_attribute_word -> list expression -> gcc_attribute
with gcc_attribute_word :=
| GCC_ATTR_IDENT : string -> gcc_attribute_word
| GCC_ATTR_CONST
| GCC_ATTR_PACKED.
Definition init_name_group := (list spec_elem * list init_name)%type.
Definition name_group := (list spec_elem * list name)%type.
Inductive definition :=
| FUNDEF : list spec_elem -> name -> statement -> cabsloc -> definition
| KRFUNDEF : list spec_elem -> name -> list string -> list definition -> statement -> cabsloc -> definition
| DECDEF : init_name_group -> cabsloc -> definition
| PRAGMA : string -> cabsloc -> definition
with statement :=
| NOP : cabsloc -> statement
| COMPUTATION : expression -> cabsloc -> statement
| BLOCK : list statement -> cabsloc -> statement
| If : expression -> statement -> option statement -> cabsloc -> statement
| WHILE : expression -> statement -> cabsloc -> statement
| DOWHILE : expression -> statement -> cabsloc -> statement
| FOR : option for_clause -> option expression -> option expression -> statement -> cabsloc -> statement
| BREAK : cabsloc -> statement
| CONTINUE : cabsloc -> statement
| RETURN : option expression -> cabsloc -> statement
| SWITCH : expression -> statement -> cabsloc -> statement
| CASE : expression -> statement -> cabsloc -> statement
| DEFAULT : statement -> cabsloc -> statement
| LABEL : string -> statement -> cabsloc -> statement
| GOTO : string -> cabsloc -> statement
| ASM : bool -> list char_code -> cabsloc -> statement
| DEFINITION : definition -> statement
with for_clause :=
| FC_EXP : expression -> for_clause
| FC_DECL : definition -> for_clause.