-- File generated by the BNF Converter. -- Templates for pattern matching on abstract syntax {-# LANGUAGE GADTs #-} {-# OPTIONS_GHC -fno-warn-unused-matches #-} module SkelC where import Prelude (($), Either(..), String, (++), Show, show) import qualified AbsC type Err = Either String type Result = Err String failure :: Show a => a -> Result failure x = Left $ "Undefined case: " ++ show x transTree :: AbsC.Tree c -> Result transTree t = case t of AbsC.Progr external_declarations -> failure t AbsC.Afunc function_def -> failure t AbsC.Global dec -> failure t AbsC.NewFunc declaration_specifiers declarator compound_stm -> failure t AbsC.NewFuncInt declarator compound_stm -> failure t AbsC.OldFunc declaration_specifiers declarator decs compound_stm -> failure t AbsC.OldFuncInt declarator decs compound_stm -> failure t AbsC.Declarators declaration_specifiers init_declarators -> failure t AbsC.NoDeclarator declaration_specifiers -> failure t AbsC.SpecProp type_qualifier -> failure t AbsC.Storage storage_class_specifier -> failure t AbsC.Type type_specifier -> failure t AbsC.InitDecl declarator initializer -> failure t AbsC.OnlyDecl declarator -> failure t AbsC.Tchar -> failure t AbsC.Tdouble -> failure t AbsC.Tenum enum_specifier -> failure t AbsC.Tfloat -> failure t AbsC.Tint -> failure t AbsC.Tlong -> failure t AbsC.Tname -> failure t AbsC.Tshort -> failure t AbsC.Tsigned -> failure t AbsC.Tstruct struct_or_union_spec -> failure t AbsC.Tunsigned -> failure t AbsC.Tvoid -> failure t AbsC.GlobalPrograms -> failure t AbsC.LocalBlock -> failure t AbsC.LocalProgram -> failure t AbsC.LocalReg -> failure t AbsC.MyType -> failure t AbsC.Const -> failure t AbsC.NoOptim -> failure t AbsC.Tag struct_or_union x struct_decs -> failure t AbsC.TagType struct_or_union x -> failure t AbsC.Unique struct_or_union struct_decs -> failure t AbsC.Struct -> failure t AbsC.Union -> failure t AbsC.Structen spec_quals struct_declarators -> failure t AbsC.QualSpec type_qualifier -> failure t AbsC.TypeSpec type_specifier -> failure t AbsC.DecField declarator constant_expression -> failure t AbsC.Decl declarator -> failure t AbsC.Field constant_expression -> failure t AbsC.EnumDec enumerators -> failure t AbsC.EnumName x enumerators -> failure t AbsC.EnumVar x -> failure t AbsC.EnumInit x constant_expression -> failure t AbsC.Plain x -> failure t AbsC.BeginPointer pointer direct_declarator -> failure t AbsC.NoPointer direct_declarator -> failure t AbsC.Incomplete direct_declarator -> failure t AbsC.InnitArray direct_declarator constant_expression -> failure t AbsC.Name x -> failure t AbsC.NewFuncDec direct_declarator parameter_type -> failure t AbsC.OldFuncDec direct_declarator -> failure t AbsC.OldFuncDef direct_declarator idents -> failure t AbsC.ParenDecl declarator -> failure t AbsC.Point -> failure t AbsC.PointPoint pointer -> failure t AbsC.PointQual type_qualifiers -> failure t AbsC.PointQualPoint type_qualifiers pointer -> failure t AbsC.AllSpec parameter_declarations -> failure t AbsC.More parameter_declarations -> failure t AbsC.MoreParamDec parameter_declarations parameter_declaration -> failure t AbsC.ParamDec parameter_declaration -> failure t AbsC.Abstract declaration_specifiers abstract_declarator -> failure t AbsC.OnlyType declaration_specifiers -> failure t AbsC.TypeAndParam declaration_specifiers declarator -> failure t AbsC.InitExpr exp -> failure t AbsC.InitListOne initializers -> failure t AbsC.InitListTwo initializers -> failure t AbsC.AnInit initializer -> failure t AbsC.MoreInit initializers initializer -> failure t AbsC.ExtendedType spec_quals abstract_declarator -> failure t AbsC.PlainType spec_quals -> failure t AbsC.Advanced dir_abs_dec -> failure t AbsC.PointAdvanced pointer dir_abs_dec -> failure t AbsC.PointerStart pointer -> failure t AbsC.Array -> failure t AbsC.Initiated dir_abs_dec constant_expression -> failure t AbsC.InitiatedArray constant_expression -> failure t AbsC.NewFuncExpr dir_abs_dec parameter_type -> failure t AbsC.NewFunction parameter_type -> failure t AbsC.OldFuncExpr dir_abs_dec -> failure t AbsC.OldFunction -> failure t AbsC.UnInitiated dir_abs_dec -> failure t AbsC.WithinParentes abstract_declarator -> failure t AbsC.CompS compound_stm -> failure t AbsC.ExprS expression_stm -> failure t AbsC.IterS iter_stm -> failure t AbsC.JumpS jump_stm -> failure t AbsC.LabelS labeled_stm -> failure t AbsC.SelS selection_stm -> failure t AbsC.SlabelOne x stm -> failure t AbsC.SlabelThree stm -> failure t AbsC.SlabelTwo constant_expression stm -> failure t AbsC.ScompFour decs stms -> failure t AbsC.ScompOne -> failure t AbsC.ScompThree decs -> failure t AbsC.ScompTwo stms -> failure t AbsC.SexprOne -> failure t AbsC.SexprTwo exp -> failure t AbsC.SselOne exp stm -> failure t AbsC.SselThree exp stm -> failure t AbsC.SselTwo exp stm1 stm2 -> failure t AbsC.SiterFour expression_stm1 expression_stm2 exp stm -> failure t AbsC.SiterOne exp stm -> failure t AbsC.SiterThree expression_stm1 expression_stm2 stm -> failure t AbsC.SiterTwo stm exp -> failure t AbsC.SjumpFive exp -> failure t AbsC.SjumpFour -> failure t AbsC.SjumpOne x -> failure t AbsC.SjumpThree -> failure t AbsC.SjumpTwo -> failure t AbsC.Earray exp1 exp2 -> failure t AbsC.Eassign exp1 assignment_op exp2 -> failure t AbsC.Ebitand exp1 exp2 -> failure t AbsC.Ebitexor exp1 exp2 -> failure t AbsC.Ebitor exp1 exp2 -> failure t AbsC.Ebytesexpr exp -> failure t AbsC.Ebytestype type_name -> failure t AbsC.Ecomma exp1 exp2 -> failure t AbsC.Econdition exp1 exp2 exp3 -> failure t AbsC.Econst constant -> failure t AbsC.Ediv exp1 exp2 -> failure t AbsC.Eeq exp1 exp2 -> failure t AbsC.Efunk exp -> failure t AbsC.Efunkpar exp exps -> failure t AbsC.Ege exp1 exp2 -> failure t AbsC.Egrthen exp1 exp2 -> failure t AbsC.Eland exp1 exp2 -> failure t AbsC.Ele exp1 exp2 -> failure t AbsC.Eleft exp1 exp2 -> failure t AbsC.Elor exp1 exp2 -> failure t AbsC.Elthen exp1 exp2 -> failure t AbsC.Eminus exp1 exp2 -> failure t AbsC.Emod exp1 exp2 -> failure t AbsC.Eneq exp1 exp2 -> failure t AbsC.Eplus exp1 exp2 -> failure t AbsC.Epoint exp x -> failure t AbsC.Epostdec exp -> failure t AbsC.Epostinc exp -> failure t AbsC.Epredec exp -> failure t AbsC.Epreinc exp -> failure t AbsC.Epreop unary_operator exp -> failure t AbsC.Eright exp1 exp2 -> failure t AbsC.Eselect exp x -> failure t AbsC.Estring str -> failure t AbsC.Etimes exp1 exp2 -> failure t AbsC.Etypeconv type_name exp -> failure t AbsC.Evar x -> failure t AbsC.Ecdouble cDouble -> failure t AbsC.Ecfloat cFloat -> failure t AbsC.Echar c -> failure t AbsC.Eclongdouble cLongDouble -> failure t AbsC.Edouble d -> failure t AbsC.Efloat d -> failure t AbsC.Ehexadec hexadecimal -> failure t AbsC.Ehexalong hexLong -> failure t AbsC.Ehexaunsign hexUnsigned -> failure t AbsC.Ehexaunslong hexUnsLong -> failure t AbsC.Eint n -> failure t AbsC.Elong long -> failure t AbsC.Elonger n -> failure t AbsC.Eoctal octal -> failure t AbsC.Eoctallong octalLong -> failure t AbsC.Eoctalunsign octalUnsigned -> failure t AbsC.Eoctalunslong octalUnsLong -> failure t AbsC.Eunsigned unsigned -> failure t AbsC.Eunsignlong unsignedLong -> failure t AbsC.Especial exp -> failure t AbsC.Address -> failure t AbsC.Complement -> failure t AbsC.Indirection -> failure t AbsC.Logicalneg -> failure t AbsC.Negative -> failure t AbsC.Plus -> failure t AbsC.Assign -> failure t AbsC.AssignAdd -> failure t AbsC.AssignAnd -> failure t AbsC.AssignDiv -> failure t AbsC.AssignLeft -> failure t AbsC.AssignMod -> failure t AbsC.AssignMul -> failure t AbsC.AssignOr -> failure t AbsC.AssignRight -> failure t AbsC.AssignSub -> failure t AbsC.AssignXor -> failure t transIdent :: AbsC.Ident -> Result transIdent x = case x of AbsC.Ident string -> failure x transUnsigned :: AbsC.Unsigned -> Result transUnsigned x = case x of AbsC.Unsigned string -> failure x transLong :: AbsC.Long -> Result transLong x = case x of AbsC.Long string -> failure x transUnsignedLong :: AbsC.UnsignedLong -> Result transUnsignedLong x = case x of AbsC.UnsignedLong string -> failure x transHexadecimal :: AbsC.Hexadecimal -> Result transHexadecimal x = case x of AbsC.Hexadecimal string -> failure x transHexUnsigned :: AbsC.HexUnsigned -> Result transHexUnsigned x = case x of AbsC.HexUnsigned string -> failure x transHexLong :: AbsC.HexLong -> Result transHexLong x = case x of AbsC.HexLong string -> failure x transHexUnsLong :: AbsC.HexUnsLong -> Result transHexUnsLong x = case x of AbsC.HexUnsLong string -> failure x transOctal :: AbsC.Octal -> Result transOctal x = case x of AbsC.Octal string -> failure x transOctalUnsigned :: AbsC.OctalUnsigned -> Result transOctalUnsigned x = case x of AbsC.OctalUnsigned string -> failure x transOctalLong :: AbsC.OctalLong -> Result transOctalLong x = case x of AbsC.OctalLong string -> failure x transOctalUnsLong :: AbsC.OctalUnsLong -> Result transOctalUnsLong x = case x of AbsC.OctalUnsLong string -> failure x transCDouble :: AbsC.CDouble -> Result transCDouble x = case x of AbsC.CDouble string -> failure x transCFloat :: AbsC.CFloat -> Result transCFloat x = case x of AbsC.CFloat string -> failure x transCLongDouble :: AbsC.CLongDouble -> Result transCLongDouble x = case x of AbsC.CLongDouble string -> failure x transProgram :: AbsC.Program -> Result transProgram x = case x of AbsC.Progr external_declarations -> failure x transExternal_declaration :: AbsC.External_declaration -> Result transExternal_declaration x = case x of AbsC.Afunc function_def -> failure x AbsC.Global dec -> failure x transFunction_def :: AbsC.Function_def -> Result transFunction_def x = case x of AbsC.NewFunc declaration_specifiers declarator compound_stm -> failure x AbsC.NewFuncInt declarator compound_stm -> failure x AbsC.OldFunc declaration_specifiers declarator decs compound_stm -> failure x AbsC.OldFuncInt declarator decs compound_stm -> failure x transDec :: AbsC.Dec -> Result transDec x = case x of AbsC.Declarators declaration_specifiers init_declarators -> failure x AbsC.NoDeclarator declaration_specifiers -> failure x transDeclaration_specifier :: AbsC.Declaration_specifier -> Result transDeclaration_specifier x = case x of AbsC.SpecProp type_qualifier -> failure x AbsC.Storage storage_class_specifier -> failure x AbsC.Type type_specifier -> failure x transInit_declarator :: AbsC.Init_declarator -> Result transInit_declarator x = case x of AbsC.InitDecl declarator initializer -> failure x AbsC.OnlyDecl declarator -> failure x transType_specifier :: AbsC.Type_specifier -> Result transType_specifier x = case x of AbsC.Tchar -> failure x AbsC.Tdouble -> failure x AbsC.Tenum enum_specifier -> failure x AbsC.Tfloat -> failure x AbsC.Tint -> failure x AbsC.Tlong -> failure x AbsC.Tname -> failure x AbsC.Tshort -> failure x AbsC.Tsigned -> failure x AbsC.Tstruct struct_or_union_spec -> failure x AbsC.Tunsigned -> failure x AbsC.Tvoid -> failure x transStorage_class_specifier :: AbsC.Storage_class_specifier -> Result transStorage_class_specifier x = case x of AbsC.GlobalPrograms -> failure x AbsC.LocalBlock -> failure x AbsC.LocalProgram -> failure x AbsC.LocalReg -> failure x AbsC.MyType -> failure x transType_qualifier :: AbsC.Type_qualifier -> Result transType_qualifier x = case x of AbsC.Const -> failure x AbsC.NoOptim -> failure x transStruct_or_union_spec :: AbsC.Struct_or_union_spec -> Result transStruct_or_union_spec x = case x of AbsC.Tag struct_or_union x struct_decs -> failure x AbsC.TagType struct_or_union x -> failure x AbsC.Unique struct_or_union struct_decs -> failure x transStruct_or_union :: AbsC.Struct_or_union -> Result transStruct_or_union x = case x of AbsC.Struct -> failure x AbsC.Union -> failure x transStruct_dec :: AbsC.Struct_dec -> Result transStruct_dec x = case x of AbsC.Structen spec_quals struct_declarators -> failure x transSpec_qual :: AbsC.Spec_qual -> Result transSpec_qual x = case x of AbsC.QualSpec type_qualifier -> failure x AbsC.TypeSpec type_specifier -> failure x transStruct_declarator :: AbsC.Struct_declarator -> Result transStruct_declarator x = case x of AbsC.DecField declarator constant_expression -> failure x AbsC.Decl declarator -> failure x AbsC.Field constant_expression -> failure x transEnum_specifier :: AbsC.Enum_specifier -> Result transEnum_specifier x = case x of AbsC.EnumDec enumerators -> failure x AbsC.EnumName x enumerators -> failure x AbsC.EnumVar x -> failure x transEnumerator :: AbsC.Enumerator -> Result transEnumerator x = case x of AbsC.EnumInit x constant_expression -> failure x AbsC.Plain x -> failure x transDeclarator :: AbsC.Declarator -> Result transDeclarator x = case x of AbsC.BeginPointer pointer direct_declarator -> failure x AbsC.NoPointer direct_declarator -> failure x transDirect_declarator :: AbsC.Direct_declarator -> Result transDirect_declarator x = case x of AbsC.Incomplete direct_declarator -> failure x AbsC.InnitArray direct_declarator constant_expression -> failure x AbsC.Name x -> failure x AbsC.NewFuncDec direct_declarator parameter_type -> failure x AbsC.OldFuncDec direct_declarator -> failure x AbsC.OldFuncDef direct_declarator idents -> failure x AbsC.ParenDecl declarator -> failure x transPointer :: AbsC.Pointer -> Result transPointer x = case x of AbsC.Point -> failure x AbsC.PointPoint pointer -> failure x AbsC.PointQual type_qualifiers -> failure x AbsC.PointQualPoint type_qualifiers pointer -> failure x transParameter_type :: AbsC.Parameter_type -> Result transParameter_type x = case x of AbsC.AllSpec parameter_declarations -> failure x AbsC.More parameter_declarations -> failure x transParameter_declarations :: AbsC.Parameter_declarations -> Result transParameter_declarations x = case x of AbsC.MoreParamDec parameter_declarations parameter_declaration -> failure x AbsC.ParamDec parameter_declaration -> failure x transParameter_declaration :: AbsC.Parameter_declaration -> Result transParameter_declaration x = case x of AbsC.Abstract declaration_specifiers abstract_declarator -> failure x AbsC.OnlyType declaration_specifiers -> failure x AbsC.TypeAndParam declaration_specifiers declarator -> failure x transInitializer :: AbsC.Initializer -> Result transInitializer x = case x of AbsC.InitExpr exp -> failure x AbsC.InitListOne initializers -> failure x AbsC.InitListTwo initializers -> failure x transInitializers :: AbsC.Initializers -> Result transInitializers x = case x of AbsC.AnInit initializer -> failure x AbsC.MoreInit initializers initializer -> failure x transType_name :: AbsC.Type_name -> Result transType_name x = case x of AbsC.ExtendedType spec_quals abstract_declarator -> failure x AbsC.PlainType spec_quals -> failure x transAbstract_declarator :: AbsC.Abstract_declarator -> Result transAbstract_declarator x = case x of AbsC.Advanced dir_abs_dec -> failure x AbsC.PointAdvanced pointer dir_abs_dec -> failure x AbsC.PointerStart pointer -> failure x transDir_abs_dec :: AbsC.Dir_abs_dec -> Result transDir_abs_dec x = case x of AbsC.Array -> failure x AbsC.Initiated dir_abs_dec constant_expression -> failure x AbsC.InitiatedArray constant_expression -> failure x AbsC.NewFuncExpr dir_abs_dec parameter_type -> failure x AbsC.NewFunction parameter_type -> failure x AbsC.OldFuncExpr dir_abs_dec -> failure x AbsC.OldFunction -> failure x AbsC.UnInitiated dir_abs_dec -> failure x AbsC.WithinParentes abstract_declarator -> failure x transStm :: AbsC.Stm -> Result transStm x = case x of AbsC.CompS compound_stm -> failure x AbsC.ExprS expression_stm -> failure x AbsC.IterS iter_stm -> failure x AbsC.JumpS jump_stm -> failure x AbsC.LabelS labeled_stm -> failure x AbsC.SelS selection_stm -> failure x transLabeled_stm :: AbsC.Labeled_stm -> Result transLabeled_stm x = case x of AbsC.SlabelOne x stm -> failure x AbsC.SlabelThree stm -> failure x AbsC.SlabelTwo constant_expression stm -> failure x transCompound_stm :: AbsC.Compound_stm -> Result transCompound_stm x = case x of AbsC.ScompFour decs stms -> failure x AbsC.ScompOne -> failure x AbsC.ScompThree decs -> failure x AbsC.ScompTwo stms -> failure x transExpression_stm :: AbsC.Expression_stm -> Result transExpression_stm x = case x of AbsC.SexprOne -> failure x AbsC.SexprTwo exp -> failure x transSelection_stm :: AbsC.Selection_stm -> Result transSelection_stm x = case x of AbsC.SselOne exp stm -> failure x AbsC.SselThree exp stm -> failure x AbsC.SselTwo exp stm1 stm2 -> failure x transIter_stm :: AbsC.Iter_stm -> Result transIter_stm x = case x of AbsC.SiterFour expression_stm1 expression_stm2 exp stm -> failure x AbsC.SiterOne exp stm -> failure x AbsC.SiterThree expression_stm1 expression_stm2 stm -> failure x AbsC.SiterTwo stm exp -> failure x transJump_stm :: AbsC.Jump_stm -> Result transJump_stm x = case x of AbsC.SjumpFive exp -> failure x AbsC.SjumpFour -> failure x AbsC.SjumpOne x -> failure x AbsC.SjumpThree -> failure x AbsC.SjumpTwo -> failure x transExp :: AbsC.Exp -> Result transExp x = case x of AbsC.Earray exp1 exp2 -> failure x AbsC.Eassign exp1 assignment_op exp2 -> failure x AbsC.Ebitand exp1 exp2 -> failure x AbsC.Ebitexor exp1 exp2 -> failure x AbsC.Ebitor exp1 exp2 -> failure x AbsC.Ebytesexpr exp -> failure x AbsC.Ebytestype type_name -> failure x AbsC.Ecomma exp1 exp2 -> failure x AbsC.Econdition exp1 exp2 exp3 -> failure x AbsC.Econst constant -> failure x AbsC.Ediv exp1 exp2 -> failure x AbsC.Eeq exp1 exp2 -> failure x AbsC.Efunk exp -> failure x AbsC.Efunkpar exp exps -> failure x AbsC.Ege exp1 exp2 -> failure x AbsC.Egrthen exp1 exp2 -> failure x AbsC.Eland exp1 exp2 -> failure x AbsC.Ele exp1 exp2 -> failure x AbsC.Eleft exp1 exp2 -> failure x AbsC.Elor exp1 exp2 -> failure x AbsC.Elthen exp1 exp2 -> failure x AbsC.Eminus exp1 exp2 -> failure x AbsC.Emod exp1 exp2 -> failure x AbsC.Eneq exp1 exp2 -> failure x AbsC.Eplus exp1 exp2 -> failure x AbsC.Epoint exp x -> failure x AbsC.Epostdec exp -> failure x AbsC.Epostinc exp -> failure x AbsC.Epredec exp -> failure x AbsC.Epreinc exp -> failure x AbsC.Epreop unary_operator exp -> failure x AbsC.Eright exp1 exp2 -> failure x AbsC.Eselect exp x -> failure x AbsC.Estring str -> failure x AbsC.Etimes exp1 exp2 -> failure x AbsC.Etypeconv type_name exp -> failure x AbsC.Evar x -> failure x transConstant :: AbsC.Constant -> Result transConstant x = case x of AbsC.Ecdouble cDouble -> failure x AbsC.Ecfloat cFloat -> failure x AbsC.Echar c -> failure x AbsC.Eclongdouble cLongDouble -> failure x AbsC.Edouble d -> failure x AbsC.Efloat d -> failure x AbsC.Ehexadec hexadecimal -> failure x AbsC.Ehexalong hexLong -> failure x AbsC.Ehexaunsign hexUnsigned -> failure x AbsC.Ehexaunslong hexUnsLong -> failure x AbsC.Eint n -> failure x AbsC.Elong long -> failure x AbsC.Elonger n -> failure x AbsC.Eoctal octal -> failure x AbsC.Eoctallong octalLong -> failure x AbsC.Eoctalunsign octalUnsigned -> failure x AbsC.Eoctalunslong octalUnsLong -> failure x AbsC.Eunsigned unsigned -> failure x AbsC.Eunsignlong unsignedLong -> failure x transConstant_expression :: AbsC.Constant_expression -> Result transConstant_expression x = case x of AbsC.Especial exp -> failure x transUnary_operator :: AbsC.Unary_operator -> Result transUnary_operator x = case x of AbsC.Address -> failure x AbsC.Complement -> failure x AbsC.Indirection -> failure x AbsC.Logicalneg -> failure x AbsC.Negative -> failure x AbsC.Plus -> failure x transAssignment_op :: AbsC.Assignment_op -> Result transAssignment_op x = case x of AbsC.Assign -> failure x AbsC.AssignAdd -> failure x AbsC.AssignAnd -> failure x AbsC.AssignDiv -> failure x AbsC.AssignLeft -> failure x AbsC.AssignMod -> failure x AbsC.AssignMul -> failure x AbsC.AssignOr -> failure x AbsC.AssignRight -> failure x AbsC.AssignSub -> failure x AbsC.AssignXor -> failure x