definition module Sil.Syntax from StdOverloaded import class toString from Data.Maybe import :: Maybe :: Program = { p_funs :: [Function] } :: Function = { f_type :: Type , f_name :: Name , f_args :: [Arg] , f_code :: CodeBlock } :: CodeBlock = { cb_init :: [Initialisation] , cb_content :: [Statement] } :: Arg = { arg_type :: Type , arg_name :: Name } :: Initialisation = { init_type :: Type , init_name :: Name } :: Statement = Declaration Name Expression | Application Expression | Return (Maybe Expression) | If [(Expression, CodeBlock)] (Maybe CodeBlock) | While Expression CodeBlock | MachineStm String :: Expression = Name Name | Literal Literal | App Name [Expression] | BuiltinApp Op1 Expression | BuiltinApp2 Expression Op2 Expression :: Op1 = Neg //* ~ | Not //* ! :: Op2 = Add //* + | Sub //* - | Mul //* * | Div //* / | Rem //* % | Equals //* == | LogOr //* || | LogAnd //* && :: Type = TBool | TInt | TVoid :: Literal = BLit Bool | ILit Int :: Name :== String instance toString Statement instance toString Type instance toString Arg instance toString Expression instance toString Op1 instance toString Op2 instance toString Literal