{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} module Language.Clafer.Front.Absclafer where -- Haskell module generated by the BNF converter import Data.Data (Data,Typeable) import GHC.Generics (Generic) data Pos = Pos Integer Integer deriving (Eq,Ord,Show,Read,Data,Typeable,Generic) noPos :: Pos noPos = Pos 0 0 data Span = Span Pos Pos deriving (Eq,Ord,Show,Read,Data,Typeable,Generic) noSpan :: Span noSpan = Span noPos noPos class Spannable n where getSpan :: n -> Span instance Spannable n => Spannable [n] where getSpan (x:xs) = foldr (\item acc -> getSpan item >- acc ) (getSpan x) xs getSpan [] = noSpan (>-) :: Span -> Span -> Span (>-) (Span (Pos 0 0) (Pos 0 0)) s = s (>-) r (Span (Pos 0 0) (Pos 0 0)) = r (>-) (Span m _) (Span _ p) = Span m p len :: [a] -> Integer len = toInteger . length newtype PosInteger = PosInteger ((Int,Int),String) deriving (Eq,Ord,Show,Read,Data,Typeable,Generic) newtype PosDouble = PosDouble ((Int,Int),String) deriving (Eq,Ord,Show,Read,Data,Typeable,Generic) newtype PosString = PosString ((Int,Int),String) deriving (Eq,Ord,Show,Read,Data,Typeable,Generic) newtype PosIdent = PosIdent ((Int,Int),String) deriving (Eq,Ord,Show,Read,Data,Typeable,Generic) data Module = Module Span [Declaration] deriving (Eq,Ord,Show,Read,Data,Typeable,Generic) data Declaration = EnumDecl Span PosIdent [EnumId] | ElementDecl Span Element deriving (Eq,Ord,Show,Read,Data,Typeable,Generic) data Clafer = Clafer Span Abstract GCard PosIdent Super Card Init Elements deriving (Eq,Ord,Show,Read,Data,Typeable,Generic) data Constraint = Constraint Span [Exp] deriving (Eq,Ord,Show,Read,Data,Typeable,Generic) data SoftConstraint = SoftConstraint Span [Exp] deriving (Eq,Ord,Show,Read,Data,Typeable,Generic) data Goal = Goal Span [Exp] deriving (Eq,Ord,Show,Read,Data,Typeable,Generic) data Abstract = AbstractEmpty Span | Abstract Span deriving (Eq,Ord,Show,Read,Data,Typeable,Generic) data Elements = ElementsEmpty Span | ElementsList Span [Element] deriving (Eq,Ord,Show,Read,Data,Typeable,Generic) data Element = Subclafer Span Clafer | ClaferUse Span Name Card Elements | Subconstraint Span Constraint | Subgoal Span Goal | Subsoftconstraint Span SoftConstraint deriving (Eq,Ord,Show,Read,Data,Typeable,Generic) data Super = SuperEmpty Span | SuperSome Span SuperHow SetExp deriving (Eq,Ord,Show,Read,Data,Typeable,Generic) data SuperHow = SuperColon Span | SuperArrow Span | SuperMArrow Span deriving (Eq,Ord,Show,Read,Data,Typeable,Generic) data Init = InitEmpty Span | InitSome Span InitHow Exp deriving (Eq,Ord,Show,Read,Data,Typeable,Generic) data InitHow = InitHow_1 Span | InitHow_2 Span deriving (Eq,Ord,Show,Read,Data,Typeable,Generic) data GCard = GCardEmpty Span | GCardXor Span | GCardOr Span | GCardMux Span | GCardOpt Span | GCardInterval Span NCard deriving (Eq,Ord,Show,Read,Data,Typeable,Generic) data Card = CardEmpty Span | CardLone Span | CardSome Span | CardAny Span | CardNum Span PosInteger | CardInterval Span NCard deriving (Eq,Ord,Show,Read,Data,Typeable,Generic) data NCard = NCard Span PosInteger ExInteger deriving (Eq,Ord,Show,Read,Data,Typeable,Generic) data ExInteger = ExIntegerAst Span | ExIntegerNum Span PosInteger deriving (Eq,Ord,Show,Read,Data,Typeable,Generic) data Name = Path Span [ModId] deriving (Eq,Ord,Show,Read,Data,Typeable,Generic) data Exp = DeclAllDisj Span Decl Exp | DeclAll Span Decl Exp | DeclQuantDisj Span Quant Decl Exp | DeclQuant Span Quant Decl Exp | EGMax Span Exp | EGMin Span Exp | EIff Span Exp Exp | EImplies Span Exp Exp | EOr Span Exp Exp | EXor Span Exp Exp | EAnd Span Exp Exp | ENeg Span Exp | ELt Span Exp Exp | EGt Span Exp Exp | EEq Span Exp Exp | ELte Span Exp Exp | EGte Span Exp Exp | ENeq Span Exp Exp | EIn Span Exp Exp | ENin Span Exp Exp | QuantExp Span Quant Exp | EAdd Span Exp Exp | ESub Span Exp Exp | EMul Span Exp Exp | EDiv Span Exp Exp | ESumSetExp Span Exp | ECSetExp Span Exp | EMinExp Span Exp | EImpliesElse Span Exp Exp Exp | EInt Span PosInteger | EDouble Span PosDouble | EStr Span PosString | ESetExp Span SetExp deriving (Eq,Ord,Show,Read,Data,Typeable,Generic) data SetExp = Union Span SetExp SetExp | UnionCom Span SetExp SetExp | Difference Span SetExp SetExp | Intersection Span SetExp SetExp | Domain Span SetExp SetExp | Range Span SetExp SetExp | Join Span SetExp SetExp | ClaferId Span Name deriving (Eq,Ord,Show,Read,Data,Typeable,Generic) data Decl = Decl Span [LocId] SetExp deriving (Eq,Ord,Show,Read,Data,Typeable,Generic) data Quant = QuantNo Span | QuantNot Span | QuantLone Span | QuantOne Span | QuantSome Span deriving (Eq,Ord,Show,Read,Data,Typeable,Generic) data EnumId = EnumIdIdent Span PosIdent deriving (Eq,Ord,Show,Read,Data,Typeable,Generic) data ModId = ModIdIdent Span PosIdent deriving (Eq,Ord,Show,Read,Data,Typeable,Generic) data LocId = LocIdIdent Span PosIdent deriving (Eq,Ord,Show,Read,Data,Typeable,Generic) instance Spannable Module where getSpan ( Module s _ ) = s instance Spannable Declaration where getSpan ( EnumDecl s _ _ ) = s getSpan ( ElementDecl s _ ) = s instance Spannable Clafer where getSpan ( Clafer s _ _ _ _ _ _ _ ) = s instance Spannable Constraint where getSpan ( Constraint s _ ) = s instance Spannable SoftConstraint where getSpan ( SoftConstraint s _ ) = s instance Spannable Goal where getSpan ( Goal s _ ) = s instance Spannable Abstract where getSpan ( AbstractEmpty s ) = s getSpan ( Abstract s ) = s instance Spannable Elements where getSpan ( ElementsEmpty s ) = s getSpan ( ElementsList s _ ) = s instance Spannable Element where getSpan ( Subclafer s _ ) = s getSpan ( ClaferUse s _ _ _ ) = s getSpan ( Subconstraint s _ ) = s getSpan ( Subgoal s _ ) = s getSpan ( Subsoftconstraint s _ ) = s instance Spannable Super where getSpan ( SuperEmpty s ) = s getSpan ( SuperSome s _ _ ) = s instance Spannable SuperHow where getSpan ( SuperColon s ) = s getSpan ( SuperArrow s ) = s getSpan ( SuperMArrow s ) = s instance Spannable Init where getSpan ( InitEmpty s ) = s getSpan ( InitSome s _ _ ) = s instance Spannable InitHow where getSpan ( InitHow_1 s ) = s getSpan ( InitHow_2 s ) = s instance Spannable GCard where getSpan ( GCardEmpty s ) = s getSpan ( GCardXor s ) = s getSpan ( GCardOr s ) = s getSpan ( GCardMux s ) = s getSpan ( GCardOpt s ) = s getSpan ( GCardInterval s _ ) = s instance Spannable Card where getSpan ( CardEmpty s ) = s getSpan ( CardLone s ) = s getSpan ( CardSome s ) = s getSpan ( CardAny s ) = s getSpan ( CardNum s _ ) = s getSpan ( CardInterval s _ ) = s instance Spannable NCard where getSpan ( NCard s _ _ ) = s instance Spannable ExInteger where getSpan ( ExIntegerAst s ) = s getSpan ( ExIntegerNum s _ ) = s instance Spannable Name where getSpan ( Path s _ ) = s instance Spannable Exp where getSpan ( DeclAllDisj s _ _ ) = s getSpan ( DeclAll s _ _ ) = s getSpan ( DeclQuantDisj s _ _ _ ) = s getSpan ( DeclQuant s _ _ _ ) = s getSpan ( EGMax s _ ) = s getSpan ( EGMin s _ ) = s getSpan ( EIff s _ _ ) = s getSpan ( EImplies s _ _ ) = s getSpan ( EOr s _ _ ) = s getSpan ( EXor s _ _ ) = s getSpan ( EAnd s _ _ ) = s getSpan ( ENeg s _ ) = s getSpan ( ELt s _ _ ) = s getSpan ( EGt s _ _ ) = s getSpan ( EEq s _ _ ) = s getSpan ( ELte s _ _ ) = s getSpan ( EGte s _ _ ) = s getSpan ( ENeq s _ _ ) = s getSpan ( EIn s _ _ ) = s getSpan ( ENin s _ _ ) = s getSpan ( QuantExp s _ _ ) = s getSpan ( EAdd s _ _ ) = s getSpan ( ESub s _ _ ) = s getSpan ( EMul s _ _ ) = s getSpan ( EDiv s _ _ ) = s getSpan ( ESumSetExp s _ ) = s getSpan ( ECSetExp s _ ) = s getSpan ( EMinExp s _ ) = s getSpan ( EImpliesElse s _ _ _ ) = s getSpan ( EInt s _ ) = s getSpan ( EDouble s _ ) = s getSpan ( EStr s _ ) = s getSpan ( ESetExp s _ ) = s instance Spannable SetExp where getSpan ( Union s _ _ ) = s getSpan ( UnionCom s _ _ ) = s getSpan ( Difference s _ _ ) = s getSpan ( Intersection s _ _ ) = s getSpan ( Domain s _ _ ) = s getSpan ( Range s _ _ ) = s getSpan ( Join s _ _ ) = s getSpan ( ClaferId s _ ) = s instance Spannable Decl where getSpan ( Decl s _ _ ) = s instance Spannable Quant where getSpan ( QuantNo s ) = s getSpan ( QuantNot s ) = s getSpan ( QuantLone s ) = s getSpan ( QuantOne s ) = s getSpan ( QuantSome s ) = s instance Spannable EnumId where getSpan ( EnumIdIdent s _ ) = s instance Spannable ModId where getSpan ( ModIdIdent s _ ) = s instance Spannable LocId where getSpan ( LocIdIdent s _ ) = s instance Spannable PosInteger where getSpan (PosInteger ((c, l), lex')) = Span (Pos c' l') (Pos c' $ l' + len lex') where c' = toInteger c l' = toInteger l instance Spannable PosDouble where getSpan (PosDouble ((c, l), lex')) = Span (Pos c' l') (Pos c' $ l' + len lex') where c' = toInteger c l' = toInteger l instance Spannable PosString where getSpan (PosString ((c, l), lex')) = Span (Pos c' l') (Pos c' $ l' + len lex') where c' = toInteger c l' = toInteger l instance Spannable PosIdent where getSpan (PosIdent ((c, l), lex')) = Span (Pos c' l') (Pos c' $ l' + len lex') where c' = toInteger c l' = toInteger l