(datatype absyn-prg (prog decls)) (datatype absyn-dec (var pos maybe-name type init) (function pos name maybe-from-types to-type body) (type pos type) (typedef pos type maybe-name)) (datatype absyn-exp (nil) (asgn pos exp1 exp2) (pointerbin pos exp1 op exp2) (arithbin pos exp1 op exp2) (arithun pos op exp) (boolbin pos exp1 op exp2) (boolun pos op exp) (cast pos type exp) (var pos symbol) (const pos val) (seq pos exp1 exp2) (cond pos tst-exp true-exp false-exp) (deref pos exp) (addr pos exp) (call pos func args) (struct-access pos struct-exp field-exp) (post-inc pos exp) (post-dec pos exp) (sizeof pos exp)) (datatype absyn-stm (nop) (exp pos exp) (slist pos stm-list) (if-then pos tst-exp true-exp) (if-then-else pos tst-exp true-exp false-exp) (switch pos exp stm) (case pos exp stm) (default pos stm) (block pos dec stm) (returnval pos exp) (return pos) (break pos) (continue pos) (while pos exp stm) (do-while pos stm exp) (for pos init-exp tst-exp update-exp stm) (sequence pos stm1 stm2) (label pos lab) (goto pos lab)) ; or and xor eq neq less greater leq geq shift-left shift-right add sub mul div mod neg complement not (datatype absyn-type (pointer pos type) (array pos maybe-size type) (function pos maybe-from-types to-type) (qual pos qualificators type) ; qualificators is a list (bitfield pos size type) (struct pos maybe-tag maybe-var-entries) (union pos maybe-tag maybe-var-entries) (enum pos maybe-tag maybe-var-entries) (typedefed pos tag) (storage-class pos tag type) (actual-type pos tag))