-- File generated by the BNF Converter. -- Templates for pattern matching on abstract syntax {-# 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 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 :: Show a => AbsC.Program' a -> Result transProgram x = case x of AbsC.Progr _ external_declarations -> failure x transExternal_declaration :: Show a => AbsC.External_declaration' a -> Result transExternal_declaration x = case x of AbsC.Afunc _ function_def -> failure x AbsC.Global _ dec -> failure x transFunction_def :: Show a => AbsC.Function_def' a -> 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 :: Show a => AbsC.Dec' a -> Result transDec x = case x of AbsC.Declarators _ declaration_specifiers init_declarators -> failure x AbsC.NoDeclarator _ declaration_specifiers -> failure x transDeclaration_specifier :: Show a => AbsC.Declaration_specifier' a -> 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 :: Show a => AbsC.Init_declarator' a -> Result transInit_declarator x = case x of AbsC.InitDecl _ declarator initializer -> failure x AbsC.OnlyDecl _ declarator -> failure x transType_specifier :: Show a => AbsC.Type_specifier' a -> 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 :: Show a => AbsC.Storage_class_specifier' a -> 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 :: Show a => AbsC.Type_qualifier' a -> Result transType_qualifier x = case x of AbsC.Const _ -> failure x AbsC.NoOptim _ -> failure x transStruct_or_union_spec :: Show a => AbsC.Struct_or_union_spec' a -> 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 :: Show a => AbsC.Struct_or_union' a -> Result transStruct_or_union x = case x of AbsC.Struct _ -> failure x AbsC.Union _ -> failure x transStruct_dec :: Show a => AbsC.Struct_dec' a -> Result transStruct_dec x = case x of AbsC.Structen _ spec_quals struct_declarators -> failure x transSpec_qual :: Show a => AbsC.Spec_qual' a -> Result transSpec_qual x = case x of AbsC.QualSpec _ type_qualifier -> failure x AbsC.TypeSpec _ type_specifier -> failure x transStruct_declarator :: Show a => AbsC.Struct_declarator' a -> 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 :: Show a => AbsC.Enum_specifier' a -> Result transEnum_specifier x = case x of AbsC.EnumDec _ enumerators -> failure x AbsC.EnumName _ x enumerators -> failure x AbsC.EnumVar _ x -> failure x transEnumerator :: Show a => AbsC.Enumerator' a -> Result transEnumerator x = case x of AbsC.EnumInit _ x constant_expression -> failure x AbsC.Plain _ x -> failure x transDeclarator :: Show a => AbsC.Declarator' a -> Result transDeclarator x = case x of AbsC.BeginPointer _ pointer direct_declarator -> failure x AbsC.NoPointer _ direct_declarator -> failure x transDirect_declarator :: Show a => AbsC.Direct_declarator' a -> 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 :: Show a => AbsC.Pointer' a -> 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 :: Show a => AbsC.Parameter_type' a -> Result transParameter_type x = case x of AbsC.AllSpec _ parameter_declarations -> failure x AbsC.More _ parameter_declarations -> failure x transParameter_declarations :: Show a => AbsC.Parameter_declarations' a -> Result transParameter_declarations x = case x of AbsC.MoreParamDec _ parameter_declarations parameter_declaration -> failure x AbsC.ParamDec _ parameter_declaration -> failure x transParameter_declaration :: Show a => AbsC.Parameter_declaration' a -> 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 :: Show a => AbsC.Initializer' a -> Result transInitializer x = case x of AbsC.InitExpr _ exp -> failure x AbsC.InitListOne _ initializers -> failure x AbsC.InitListTwo _ initializers -> failure x transInitializers :: Show a => AbsC.Initializers' a -> Result transInitializers x = case x of AbsC.AnInit _ initializer -> failure x AbsC.MoreInit _ initializers initializer -> failure x transType_name :: Show a => AbsC.Type_name' a -> Result transType_name x = case x of AbsC.ExtendedType _ spec_quals abstract_declarator -> failure x AbsC.PlainType _ spec_quals -> failure x transAbstract_declarator :: Show a => AbsC.Abstract_declarator' a -> 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 :: Show a => AbsC.Dir_abs_dec' a -> 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 :: Show a => AbsC.Stm' a -> 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 :: Show a => AbsC.Labeled_stm' a -> 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 :: Show a => AbsC.Compound_stm' a -> 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 :: Show a => AbsC.Expression_stm' a -> Result transExpression_stm x = case x of AbsC.SexprOne _ -> failure x AbsC.SexprTwo _ exp -> failure x transSelection_stm :: Show a => AbsC.Selection_stm' a -> 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 :: Show a => AbsC.Iter_stm' a -> 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 :: Show a => AbsC.Jump_stm' a -> 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 :: Show a => AbsC.Exp' a -> 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 :: Show a => AbsC.Constant' a -> 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 :: Show a => AbsC.Constant_expression' a -> Result transConstant_expression x = case x of AbsC.Especial _ exp -> failure x transUnary_operator :: Show a => AbsC.Unary_operator' a -> 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 :: Show a => AbsC.Assignment_op' a -> 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