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 Application | Application Application | Return (Maybe Application) | If [(Application, CodeBlock)] (Maybe CodeBlock) | While Application CodeBlock | MachineStm String :: Application = Name Name | Literal Literal | App Name [Application] | BuiltinApp Op1 Application | BuiltinApp2 Application Op2 Application :: Op1 = Neg //* ~ :: 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 Application instance toString Op1 instance toString Op2 instance toString Literal