module Visage where
import UU.Scanner.Position(Pos)
import HsToken
import UU.Scanner.Position(Pos)
import CommonTypes
import CommonTypes
import UU.Pretty
import AbstractSyntax
import VisagePatterns
import Expression
import UU.Scanner.Position(Pos(..))
import CommonTypes
import ATermAbstractSyntax
import Expression
import VisagePatterns
import VisageSyntax
import qualified Data.Map as Map
import Data.Map(Map)
import Data.List(intersperse)
import TokenDef
import Control.Monad.Identity (Identity)
import qualified Control.Monad.Identity
convert :: String -> String
convert [] = []
convert (c:ct) | c == '\n' = '\\' : 'n' : convert ct
| otherwise = c : convert ct
sQ :: String -> String
sQ [] = []
sQ (x:xs) = if (x=='"') then rest else x:rest
where
rest = if not (null xs) && last xs == '"' then init xs else xs
showAGPos :: Pos -> String
showAGPos (Pos l c f) | l == (1) = ""
| otherwise = let file = if null f then "" else f
lc = "(line " ++ show l ++ ", column " ++ show c ++")"
in file ++ lc
showMap :: (Show a, Show b) => Map a b -> String
showMap
= braces . concat . intersperse "," . map (uncurry assign) . Map.assocs
where
braces s = "{" ++ s ++ "}"
assign a b = show a ++ ":=" ++ show b
data Inh_Expression = Inh_Expression { }
data Syn_Expression = Syn_Expression { aterm_Syn_Expression :: (ATerm) }
wrap_Expression :: T_Expression -> Inh_Expression -> (Syn_Expression )
wrap_Expression (T_Expression act) (Inh_Expression ) =
Control.Monad.Identity.runIdentity (
do sem <- act
let arg1 = T_Expression_vIn1
(T_Expression_vOut1 _lhsOaterm) <- return (inv_Expression_s2 sem arg1)
return (Syn_Expression _lhsOaterm)
)
sem_Expression :: Expression -> T_Expression
sem_Expression ( Expression pos_ tks_ ) = sem_Expression_Expression pos_ tks_
newtype T_Expression = T_Expression {
attach_T_Expression :: Identity (T_Expression_s2 )
}
newtype T_Expression_s2 = C_Expression_s2 {
inv_Expression_s2 :: (T_Expression_v1 )
}
data T_Expression_s3 = C_Expression_s3
type T_Expression_v1 = (T_Expression_vIn1 ) -> (T_Expression_vOut1 )
data T_Expression_vIn1 = T_Expression_vIn1
data T_Expression_vOut1 = T_Expression_vOut1 (ATerm)
sem_Expression_Expression :: (Pos) -> ([HsToken]) -> T_Expression
sem_Expression_Expression arg_pos_ arg_tks_ = T_Expression (return st2) where
st2 = let
v1 :: T_Expression_v1
v1 = \ (T_Expression_vIn1 ) -> ( let
_lhsOaterm :: ATerm
_lhsOaterm = rule0 arg_pos_ arg_tks_
__result_ = T_Expression_vOut1 _lhsOaterm
in __result_ )
in C_Expression_s2 v1
rule0 = \ pos_ tks_ ->
AAppl "Expression" [AString (sQ (showAGPos pos_)), AString (sQ (unlines . showTokens . tokensToStrings $ tks_))]
data Inh_VisageChild = Inh_VisageChild { }
data Syn_VisageChild = Syn_VisageChild { aterm_Syn_VisageChild :: (ATerm) }
wrap_VisageChild :: T_VisageChild -> Inh_VisageChild -> (Syn_VisageChild )
wrap_VisageChild (T_VisageChild act) (Inh_VisageChild ) =
Control.Monad.Identity.runIdentity (
do sem <- act
let arg4 = T_VisageChild_vIn4
(T_VisageChild_vOut4 _lhsOaterm) <- return (inv_VisageChild_s5 sem arg4)
return (Syn_VisageChild _lhsOaterm)
)
sem_VisageChild :: VisageChild -> T_VisageChild
sem_VisageChild ( VChild name_ tp_ inh_ syn_ rules_ ) = sem_VisageChild_VChild name_ tp_ inh_ syn_ ( sem_VisageRules rules_ )
newtype T_VisageChild = T_VisageChild {
attach_T_VisageChild :: Identity (T_VisageChild_s5 )
}
newtype T_VisageChild_s5 = C_VisageChild_s5 {
inv_VisageChild_s5 :: (T_VisageChild_v4 )
}
data T_VisageChild_s6 = C_VisageChild_s6
type T_VisageChild_v4 = (T_VisageChild_vIn4 ) -> (T_VisageChild_vOut4 )
data T_VisageChild_vIn4 = T_VisageChild_vIn4
data T_VisageChild_vOut4 = T_VisageChild_vOut4 (ATerm)
sem_VisageChild_VChild :: (Identifier) -> (Type) -> (Attributes) -> (Attributes) -> T_VisageRules -> T_VisageChild
sem_VisageChild_VChild arg_name_ arg_tp_ arg_inh_ arg_syn_ arg_rules_ = T_VisageChild (return st5) where
st5 = let
v4 :: T_VisageChild_v4
v4 = \ (T_VisageChild_vIn4 ) -> ( let
_rulesX35 = Control.Monad.Identity.runIdentity (attach_T_VisageRules (arg_rules_))
(T_VisageRules_vOut34 _rulesIaterms) = inv_VisageRules_s35 _rulesX35 (T_VisageRules_vIn34 _rulesOisLoc)
_lhsOaterm :: ATerm
_lhsOaterm = rule1 _rulesIaterms arg_inh_ arg_name_ arg_syn_ arg_tp_
_rulesOisLoc = rule2 ()
__result_ = T_VisageChild_vOut4 _lhsOaterm
in __result_ )
in C_VisageChild_s5 v4
rule1 = \ ((_rulesIaterms) :: [ATerm]) inh_ name_ syn_ tp_ ->
AAppl "Child" [AString (sQ (getName name_)), AString (sQ (show tp_)),
AString (sQ (showMap inh_)),
AString (sQ (showMap syn_)),
AAppl "Rules" _rulesIaterms]
rule2 = \ (_ :: ()) ->
False
data Inh_VisageChildren = Inh_VisageChildren { }
data Syn_VisageChildren = Syn_VisageChildren { aterms_Syn_VisageChildren :: ([ATerm]) }
wrap_VisageChildren :: T_VisageChildren -> Inh_VisageChildren -> (Syn_VisageChildren )
wrap_VisageChildren (T_VisageChildren act) (Inh_VisageChildren ) =
Control.Monad.Identity.runIdentity (
do sem <- act
let arg7 = T_VisageChildren_vIn7
(T_VisageChildren_vOut7 _lhsOaterms) <- return (inv_VisageChildren_s8 sem arg7)
return (Syn_VisageChildren _lhsOaterms)
)
sem_VisageChildren :: VisageChildren -> T_VisageChildren
sem_VisageChildren list = Prelude.foldr sem_VisageChildren_Cons sem_VisageChildren_Nil (Prelude.map sem_VisageChild list)
newtype T_VisageChildren = T_VisageChildren {
attach_T_VisageChildren :: Identity (T_VisageChildren_s8 )
}
newtype T_VisageChildren_s8 = C_VisageChildren_s8 {
inv_VisageChildren_s8 :: (T_VisageChildren_v7 )
}
data T_VisageChildren_s9 = C_VisageChildren_s9
type T_VisageChildren_v7 = (T_VisageChildren_vIn7 ) -> (T_VisageChildren_vOut7 )
data T_VisageChildren_vIn7 = T_VisageChildren_vIn7
data T_VisageChildren_vOut7 = T_VisageChildren_vOut7 ([ATerm])
sem_VisageChildren_Cons :: T_VisageChild -> T_VisageChildren -> T_VisageChildren
sem_VisageChildren_Cons arg_hd_ arg_tl_ = T_VisageChildren (return st8) where
st8 = let
v7 :: T_VisageChildren_v7
v7 = \ (T_VisageChildren_vIn7 ) -> ( let
_hdX5 = Control.Monad.Identity.runIdentity (attach_T_VisageChild (arg_hd_))
_tlX8 = Control.Monad.Identity.runIdentity (attach_T_VisageChildren (arg_tl_))
(T_VisageChild_vOut4 _hdIaterm) = inv_VisageChild_s5 _hdX5 (T_VisageChild_vIn4 )
(T_VisageChildren_vOut7 _tlIaterms) = inv_VisageChildren_s8 _tlX8 (T_VisageChildren_vIn7 )
_lhsOaterms :: [ATerm]
_lhsOaterms = rule3 _hdIaterm _tlIaterms
__result_ = T_VisageChildren_vOut7 _lhsOaterms
in __result_ )
in C_VisageChildren_s8 v7
rule3 = \ ((_hdIaterm) :: ATerm) ((_tlIaterms) :: [ATerm]) ->
_hdIaterm : _tlIaterms
sem_VisageChildren_Nil :: T_VisageChildren
sem_VisageChildren_Nil = T_VisageChildren (return st8) where
st8 = let
v7 :: T_VisageChildren_v7
v7 = \ (T_VisageChildren_vIn7 ) -> ( let
_lhsOaterms :: [ATerm]
_lhsOaterms = rule4 ()
__result_ = T_VisageChildren_vOut7 _lhsOaterms
in __result_ )
in C_VisageChildren_s8 v7
rule4 = \ (_ :: ()) ->
[]
data Inh_VisageGrammar = Inh_VisageGrammar { }
data Syn_VisageGrammar = Syn_VisageGrammar { aterm_Syn_VisageGrammar :: (ATerm) }
wrap_VisageGrammar :: T_VisageGrammar -> Inh_VisageGrammar -> (Syn_VisageGrammar )
wrap_VisageGrammar (T_VisageGrammar act) (Inh_VisageGrammar ) =
Control.Monad.Identity.runIdentity (
do sem <- act
let arg10 = T_VisageGrammar_vIn10
(T_VisageGrammar_vOut10 _lhsOaterm) <- return (inv_VisageGrammar_s11 sem arg10)
return (Syn_VisageGrammar _lhsOaterm)
)
sem_VisageGrammar :: VisageGrammar -> T_VisageGrammar
sem_VisageGrammar ( VGrammar nonts_ ) = sem_VisageGrammar_VGrammar ( sem_VisageNonterminals nonts_ )
newtype T_VisageGrammar = T_VisageGrammar {
attach_T_VisageGrammar :: Identity (T_VisageGrammar_s11 )
}
newtype T_VisageGrammar_s11 = C_VisageGrammar_s11 {
inv_VisageGrammar_s11 :: (T_VisageGrammar_v10 )
}
data T_VisageGrammar_s12 = C_VisageGrammar_s12
type T_VisageGrammar_v10 = (T_VisageGrammar_vIn10 ) -> (T_VisageGrammar_vOut10 )
data T_VisageGrammar_vIn10 = T_VisageGrammar_vIn10
data T_VisageGrammar_vOut10 = T_VisageGrammar_vOut10 (ATerm)
sem_VisageGrammar_VGrammar :: T_VisageNonterminals -> T_VisageGrammar
sem_VisageGrammar_VGrammar arg_nonts_ = T_VisageGrammar (return st11) where
st11 = let
v10 :: T_VisageGrammar_v10
v10 = \ (T_VisageGrammar_vIn10 ) -> ( let
_nontsX17 = Control.Monad.Identity.runIdentity (attach_T_VisageNonterminals (arg_nonts_))
(T_VisageNonterminals_vOut16 _nontsIaterms) = inv_VisageNonterminals_s17 _nontsX17 (T_VisageNonterminals_vIn16 )
_lhsOaterm :: ATerm
_lhsOaterm = rule5 _nontsIaterms
__result_ = T_VisageGrammar_vOut10 _lhsOaterm
in __result_ )
in C_VisageGrammar_s11 v10
rule5 = \ ((_nontsIaterms) :: [ATerm]) ->
AAppl "Productions" _nontsIaterms
data Inh_VisageNonterminal = Inh_VisageNonterminal { }
data Syn_VisageNonterminal = Syn_VisageNonterminal { aterm_Syn_VisageNonterminal :: (ATerm) }
wrap_VisageNonterminal :: T_VisageNonterminal -> Inh_VisageNonterminal -> (Syn_VisageNonterminal )
wrap_VisageNonterminal (T_VisageNonterminal act) (Inh_VisageNonterminal ) =
Control.Monad.Identity.runIdentity (
do sem <- act
let arg13 = T_VisageNonterminal_vIn13
(T_VisageNonterminal_vOut13 _lhsOaterm) <- return (inv_VisageNonterminal_s14 sem arg13)
return (Syn_VisageNonterminal _lhsOaterm)
)
sem_VisageNonterminal :: VisageNonterminal -> T_VisageNonterminal
sem_VisageNonterminal ( VNonterminal nt_ inh_ syn_ alts_ ) = sem_VisageNonterminal_VNonterminal nt_ inh_ syn_ ( sem_VisageProductions alts_ )
newtype T_VisageNonterminal = T_VisageNonterminal {
attach_T_VisageNonterminal :: Identity (T_VisageNonterminal_s14 )
}
newtype T_VisageNonterminal_s14 = C_VisageNonterminal_s14 {
inv_VisageNonterminal_s14 :: (T_VisageNonterminal_v13 )
}
data T_VisageNonterminal_s15 = C_VisageNonterminal_s15
type T_VisageNonterminal_v13 = (T_VisageNonterminal_vIn13 ) -> (T_VisageNonterminal_vOut13 )
data T_VisageNonterminal_vIn13 = T_VisageNonterminal_vIn13
data T_VisageNonterminal_vOut13 = T_VisageNonterminal_vOut13 (ATerm)
sem_VisageNonterminal_VNonterminal :: (NontermIdent) -> (Attributes) -> (Attributes) -> T_VisageProductions -> T_VisageNonterminal
sem_VisageNonterminal_VNonterminal arg_nt_ arg_inh_ arg_syn_ arg_alts_ = T_VisageNonterminal (return st14) where
st14 = let
v13 :: T_VisageNonterminal_v13
v13 = \ (T_VisageNonterminal_vIn13 ) -> ( let
_altsX29 = Control.Monad.Identity.runIdentity (attach_T_VisageProductions (arg_alts_))
(T_VisageProductions_vOut28 _altsIaterms) = inv_VisageProductions_s29 _altsX29 (T_VisageProductions_vIn28 )
_lhsOaterm :: ATerm
_lhsOaterm = rule6 _altsIaterms arg_inh_ arg_nt_ arg_syn_
__result_ = T_VisageNonterminal_vOut13 _lhsOaterm
in __result_ )
in C_VisageNonterminal_s14 v13
rule6 = \ ((_altsIaterms) :: [ATerm]) inh_ nt_ syn_ ->
AAppl "Production" [AString (sQ (getName nt_)), AString (sQ(showMap inh_)),
AString (sQ(showMap syn_)), AAppl "Alternatives" _altsIaterms]
data Inh_VisageNonterminals = Inh_VisageNonterminals { }
data Syn_VisageNonterminals = Syn_VisageNonterminals { aterms_Syn_VisageNonterminals :: ([ATerm]) }
wrap_VisageNonterminals :: T_VisageNonterminals -> Inh_VisageNonterminals -> (Syn_VisageNonterminals )
wrap_VisageNonterminals (T_VisageNonterminals act) (Inh_VisageNonterminals ) =
Control.Monad.Identity.runIdentity (
do sem <- act
let arg16 = T_VisageNonterminals_vIn16
(T_VisageNonterminals_vOut16 _lhsOaterms) <- return (inv_VisageNonterminals_s17 sem arg16)
return (Syn_VisageNonterminals _lhsOaterms)
)
sem_VisageNonterminals :: VisageNonterminals -> T_VisageNonterminals
sem_VisageNonterminals list = Prelude.foldr sem_VisageNonterminals_Cons sem_VisageNonterminals_Nil (Prelude.map sem_VisageNonterminal list)
newtype T_VisageNonterminals = T_VisageNonterminals {
attach_T_VisageNonterminals :: Identity (T_VisageNonterminals_s17 )
}
newtype T_VisageNonterminals_s17 = C_VisageNonterminals_s17 {
inv_VisageNonterminals_s17 :: (T_VisageNonterminals_v16 )
}
data T_VisageNonterminals_s18 = C_VisageNonterminals_s18
type T_VisageNonterminals_v16 = (T_VisageNonterminals_vIn16 ) -> (T_VisageNonterminals_vOut16 )
data T_VisageNonterminals_vIn16 = T_VisageNonterminals_vIn16
data T_VisageNonterminals_vOut16 = T_VisageNonterminals_vOut16 ([ATerm])
sem_VisageNonterminals_Cons :: T_VisageNonterminal -> T_VisageNonterminals -> T_VisageNonterminals
sem_VisageNonterminals_Cons arg_hd_ arg_tl_ = T_VisageNonterminals (return st17) where
st17 = let
v16 :: T_VisageNonterminals_v16
v16 = \ (T_VisageNonterminals_vIn16 ) -> ( let
_hdX14 = Control.Monad.Identity.runIdentity (attach_T_VisageNonterminal (arg_hd_))
_tlX17 = Control.Monad.Identity.runIdentity (attach_T_VisageNonterminals (arg_tl_))
(T_VisageNonterminal_vOut13 _hdIaterm) = inv_VisageNonterminal_s14 _hdX14 (T_VisageNonterminal_vIn13 )
(T_VisageNonterminals_vOut16 _tlIaterms) = inv_VisageNonterminals_s17 _tlX17 (T_VisageNonterminals_vIn16 )
_lhsOaterms :: [ATerm]
_lhsOaterms = rule7 _hdIaterm _tlIaterms
__result_ = T_VisageNonterminals_vOut16 _lhsOaterms
in __result_ )
in C_VisageNonterminals_s17 v16
rule7 = \ ((_hdIaterm) :: ATerm) ((_tlIaterms) :: [ATerm]) ->
_hdIaterm : _tlIaterms
sem_VisageNonterminals_Nil :: T_VisageNonterminals
sem_VisageNonterminals_Nil = T_VisageNonterminals (return st17) where
st17 = let
v16 :: T_VisageNonterminals_v16
v16 = \ (T_VisageNonterminals_vIn16 ) -> ( let
_lhsOaterms :: [ATerm]
_lhsOaterms = rule8 ()
__result_ = T_VisageNonterminals_vOut16 _lhsOaterms
in __result_ )
in C_VisageNonterminals_s17 v16
rule8 = \ (_ :: ()) ->
[]
data Inh_VisagePattern = Inh_VisagePattern { }
data Syn_VisagePattern = Syn_VisagePattern { aterm_Syn_VisagePattern :: (ATerm) }
wrap_VisagePattern :: T_VisagePattern -> Inh_VisagePattern -> (Syn_VisagePattern )
wrap_VisagePattern (T_VisagePattern act) (Inh_VisagePattern ) =
Control.Monad.Identity.runIdentity (
do sem <- act
let arg19 = T_VisagePattern_vIn19
(T_VisagePattern_vOut19 _lhsOaterm) <- return (inv_VisagePattern_s20 sem arg19)
return (Syn_VisagePattern _lhsOaterm)
)
sem_VisagePattern :: VisagePattern -> T_VisagePattern
sem_VisagePattern ( VConstr name_ pats_ ) = sem_VisagePattern_VConstr name_ ( sem_VisagePatterns pats_ )
sem_VisagePattern ( VProduct pos_ pats_ ) = sem_VisagePattern_VProduct pos_ ( sem_VisagePatterns pats_ )
sem_VisagePattern ( VVar field_ attr_ ) = sem_VisagePattern_VVar field_ attr_
sem_VisagePattern ( VAlias field_ attr_ pat_ ) = sem_VisagePattern_VAlias field_ attr_ ( sem_VisagePattern pat_ )
sem_VisagePattern ( VUnderscore pos_ ) = sem_VisagePattern_VUnderscore pos_
newtype T_VisagePattern = T_VisagePattern {
attach_T_VisagePattern :: Identity (T_VisagePattern_s20 )
}
newtype T_VisagePattern_s20 = C_VisagePattern_s20 {
inv_VisagePattern_s20 :: (T_VisagePattern_v19 )
}
data T_VisagePattern_s21 = C_VisagePattern_s21
type T_VisagePattern_v19 = (T_VisagePattern_vIn19 ) -> (T_VisagePattern_vOut19 )
data T_VisagePattern_vIn19 = T_VisagePattern_vIn19
data T_VisagePattern_vOut19 = T_VisagePattern_vOut19 (ATerm)
sem_VisagePattern_VConstr :: (ConstructorIdent) -> T_VisagePatterns -> T_VisagePattern
sem_VisagePattern_VConstr arg_name_ arg_pats_ = T_VisagePattern (return st20) where
st20 = let
v19 :: T_VisagePattern_v19
v19 = \ (T_VisagePattern_vIn19 ) -> ( let
_patsX23 = Control.Monad.Identity.runIdentity (attach_T_VisagePatterns (arg_pats_))
(T_VisagePatterns_vOut22 _patsIaterms) = inv_VisagePatterns_s23 _patsX23 (T_VisagePatterns_vIn22 )
_lhsOaterm :: ATerm
_lhsOaterm = rule9 _patsIaterms arg_name_
__result_ = T_VisagePattern_vOut19 _lhsOaterm
in __result_ )
in C_VisagePattern_s20 v19
rule9 = \ ((_patsIaterms) :: [ATerm]) name_ ->
AAppl "Pattern" [AAppl "Constr" [AString (sQ (showAGPos (getPos name_))),
AString (sQ (getName name_)),
AAppl "Patterns" _patsIaterms]]
sem_VisagePattern_VProduct :: (Pos) -> T_VisagePatterns -> T_VisagePattern
sem_VisagePattern_VProduct arg_pos_ arg_pats_ = T_VisagePattern (return st20) where
st20 = let
v19 :: T_VisagePattern_v19
v19 = \ (T_VisagePattern_vIn19 ) -> ( let
_patsX23 = Control.Monad.Identity.runIdentity (attach_T_VisagePatterns (arg_pats_))
(T_VisagePatterns_vOut22 _patsIaterms) = inv_VisagePatterns_s23 _patsX23 (T_VisagePatterns_vIn22 )
_lhsOaterm :: ATerm
_lhsOaterm = rule10 _patsIaterms arg_pos_
__result_ = T_VisagePattern_vOut19 _lhsOaterm
in __result_ )
in C_VisagePattern_s20 v19
rule10 = \ ((_patsIaterms) :: [ATerm]) pos_ ->
AAppl "Pattern" [AAppl "Product" [AString (sQ (showAGPos pos_)),
AAppl "Patterns" _patsIaterms]]
sem_VisagePattern_VVar :: (Identifier) -> (Identifier) -> T_VisagePattern
sem_VisagePattern_VVar arg_field_ arg_attr_ = T_VisagePattern (return st20) where
st20 = let
v19 :: T_VisagePattern_v19
v19 = \ (T_VisagePattern_vIn19 ) -> ( let
_lhsOaterm :: ATerm
_lhsOaterm = rule11 arg_attr_ arg_field_
__result_ = T_VisagePattern_vOut19 _lhsOaterm
in __result_ )
in C_VisagePattern_s20 v19
rule11 = \ attr_ field_ ->
AAppl "Pattern" [AAppl "Var" [AString (sQ (showAGPos (getPos field_))),
AString (sQ (getName field_ ++ "." ++ getName attr_))]]
sem_VisagePattern_VAlias :: (Identifier) -> (Identifier) -> T_VisagePattern -> T_VisagePattern
sem_VisagePattern_VAlias arg_field_ arg_attr_ arg_pat_ = T_VisagePattern (return st20) where
st20 = let
v19 :: T_VisagePattern_v19
v19 = \ (T_VisagePattern_vIn19 ) -> ( let
_patX20 = Control.Monad.Identity.runIdentity (attach_T_VisagePattern (arg_pat_))
(T_VisagePattern_vOut19 _patIaterm) = inv_VisagePattern_s20 _patX20 (T_VisagePattern_vIn19 )
_lhsOaterm :: ATerm
_lhsOaterm = rule12 _patIaterm arg_attr_ arg_field_
__result_ = T_VisagePattern_vOut19 _lhsOaterm
in __result_ )
in C_VisagePattern_s20 v19
rule12 = \ ((_patIaterm) :: ATerm) attr_ field_ ->
AAppl "Pattern" [AAppl "Alias" [AString (sQ (showAGPos (getPos field_))),
AString (sQ (getName field_ ++ "." ++ getName attr_)), _patIaterm]]
sem_VisagePattern_VUnderscore :: (Pos) -> T_VisagePattern
sem_VisagePattern_VUnderscore arg_pos_ = T_VisagePattern (return st20) where
st20 = let
v19 :: T_VisagePattern_v19
v19 = \ (T_VisagePattern_vIn19 ) -> ( let
_lhsOaterm :: ATerm
_lhsOaterm = rule13 arg_pos_
__result_ = T_VisagePattern_vOut19 _lhsOaterm
in __result_ )
in C_VisagePattern_s20 v19
rule13 = \ pos_ ->
AAppl "Pattern" [AAppl "Underscore" [AString (sQ (showAGPos pos_))]]
data Inh_VisagePatterns = Inh_VisagePatterns { }
data Syn_VisagePatterns = Syn_VisagePatterns { aterms_Syn_VisagePatterns :: ([ATerm]) }
wrap_VisagePatterns :: T_VisagePatterns -> Inh_VisagePatterns -> (Syn_VisagePatterns )
wrap_VisagePatterns (T_VisagePatterns act) (Inh_VisagePatterns ) =
Control.Monad.Identity.runIdentity (
do sem <- act
let arg22 = T_VisagePatterns_vIn22
(T_VisagePatterns_vOut22 _lhsOaterms) <- return (inv_VisagePatterns_s23 sem arg22)
return (Syn_VisagePatterns _lhsOaterms)
)
sem_VisagePatterns :: VisagePatterns -> T_VisagePatterns
sem_VisagePatterns list = Prelude.foldr sem_VisagePatterns_Cons sem_VisagePatterns_Nil (Prelude.map sem_VisagePattern list)
newtype T_VisagePatterns = T_VisagePatterns {
attach_T_VisagePatterns :: Identity (T_VisagePatterns_s23 )
}
newtype T_VisagePatterns_s23 = C_VisagePatterns_s23 {
inv_VisagePatterns_s23 :: (T_VisagePatterns_v22 )
}
data T_VisagePatterns_s24 = C_VisagePatterns_s24
type T_VisagePatterns_v22 = (T_VisagePatterns_vIn22 ) -> (T_VisagePatterns_vOut22 )
data T_VisagePatterns_vIn22 = T_VisagePatterns_vIn22
data T_VisagePatterns_vOut22 = T_VisagePatterns_vOut22 ([ATerm])
sem_VisagePatterns_Cons :: T_VisagePattern -> T_VisagePatterns -> T_VisagePatterns
sem_VisagePatterns_Cons arg_hd_ arg_tl_ = T_VisagePatterns (return st23) where
st23 = let
v22 :: T_VisagePatterns_v22
v22 = \ (T_VisagePatterns_vIn22 ) -> ( let
_hdX20 = Control.Monad.Identity.runIdentity (attach_T_VisagePattern (arg_hd_))
_tlX23 = Control.Monad.Identity.runIdentity (attach_T_VisagePatterns (arg_tl_))
(T_VisagePattern_vOut19 _hdIaterm) = inv_VisagePattern_s20 _hdX20 (T_VisagePattern_vIn19 )
(T_VisagePatterns_vOut22 _tlIaterms) = inv_VisagePatterns_s23 _tlX23 (T_VisagePatterns_vIn22 )
_lhsOaterms :: [ATerm]
_lhsOaterms = rule14 _hdIaterm _tlIaterms
__result_ = T_VisagePatterns_vOut22 _lhsOaterms
in __result_ )
in C_VisagePatterns_s23 v22
rule14 = \ ((_hdIaterm) :: ATerm) ((_tlIaterms) :: [ATerm]) ->
_hdIaterm : _tlIaterms
sem_VisagePatterns_Nil :: T_VisagePatterns
sem_VisagePatterns_Nil = T_VisagePatterns (return st23) where
st23 = let
v22 :: T_VisagePatterns_v22
v22 = \ (T_VisagePatterns_vIn22 ) -> ( let
_lhsOaterms :: [ATerm]
_lhsOaterms = rule15 ()
__result_ = T_VisagePatterns_vOut22 _lhsOaterms
in __result_ )
in C_VisagePatterns_s23 v22
rule15 = \ (_ :: ()) ->
[]
data Inh_VisageProduction = Inh_VisageProduction { }
data Syn_VisageProduction = Syn_VisageProduction { aterm_Syn_VisageProduction :: (ATerm) }
wrap_VisageProduction :: T_VisageProduction -> Inh_VisageProduction -> (Syn_VisageProduction )
wrap_VisageProduction (T_VisageProduction act) (Inh_VisageProduction ) =
Control.Monad.Identity.runIdentity (
do sem <- act
let arg25 = T_VisageProduction_vIn25
(T_VisageProduction_vOut25 _lhsOaterm) <- return (inv_VisageProduction_s26 sem arg25)
return (Syn_VisageProduction _lhsOaterm)
)
sem_VisageProduction :: VisageProduction -> T_VisageProduction
sem_VisageProduction ( VProduction con_ children_ rules_ locrules_ ) = sem_VisageProduction_VProduction con_ ( sem_VisageChildren children_ ) ( sem_VisageRules rules_ ) ( sem_VisageRules locrules_ )
newtype T_VisageProduction = T_VisageProduction {
attach_T_VisageProduction :: Identity (T_VisageProduction_s26 )
}
newtype T_VisageProduction_s26 = C_VisageProduction_s26 {
inv_VisageProduction_s26 :: (T_VisageProduction_v25 )
}
data T_VisageProduction_s27 = C_VisageProduction_s27
type T_VisageProduction_v25 = (T_VisageProduction_vIn25 ) -> (T_VisageProduction_vOut25 )
data T_VisageProduction_vIn25 = T_VisageProduction_vIn25
data T_VisageProduction_vOut25 = T_VisageProduction_vOut25 (ATerm)
sem_VisageProduction_VProduction :: (ConstructorIdent) -> T_VisageChildren -> T_VisageRules -> T_VisageRules -> T_VisageProduction
sem_VisageProduction_VProduction arg_con_ arg_children_ arg_rules_ arg_locrules_ = T_VisageProduction (return st26) where
st26 = let
v25 :: T_VisageProduction_v25
v25 = \ (T_VisageProduction_vIn25 ) -> ( let
_childrenX8 = Control.Monad.Identity.runIdentity (attach_T_VisageChildren (arg_children_))
_rulesX35 = Control.Monad.Identity.runIdentity (attach_T_VisageRules (arg_rules_))
_locrulesX35 = Control.Monad.Identity.runIdentity (attach_T_VisageRules (arg_locrules_))
(T_VisageChildren_vOut7 _childrenIaterms) = inv_VisageChildren_s8 _childrenX8 (T_VisageChildren_vIn7 )
(T_VisageRules_vOut34 _rulesIaterms) = inv_VisageRules_s35 _rulesX35 (T_VisageRules_vIn34 _rulesOisLoc)
(T_VisageRules_vOut34 _locrulesIaterms) = inv_VisageRules_s35 _locrulesX35 (T_VisageRules_vIn34 _locrulesOisLoc)
_lhsOaterm :: ATerm
_lhsOaterm = rule16 _childrenIaterms _locrulesIaterms _rulesIaterms arg_con_
_locrulesOisLoc = rule17 ()
_rulesOisLoc = rule18 ()
__result_ = T_VisageProduction_vOut25 _lhsOaterm
in __result_ )
in C_VisageProduction_s26 v25
rule16 = \ ((_childrenIaterms) :: [ATerm]) ((_locrulesIaterms) :: [ATerm]) ((_rulesIaterms) :: [ATerm]) con_ ->
AAppl "Alternative" [AString (sQ (getName con_)), AAppl "Children" _childrenIaterms,
AAppl "Rules" _rulesIaterms,
AAppl "LocRules" _locrulesIaterms]
rule17 = \ (_ :: ()) ->
True
rule18 = \ (_ :: ()) ->
False
data Inh_VisageProductions = Inh_VisageProductions { }
data Syn_VisageProductions = Syn_VisageProductions { aterms_Syn_VisageProductions :: ([ATerm]) }
wrap_VisageProductions :: T_VisageProductions -> Inh_VisageProductions -> (Syn_VisageProductions )
wrap_VisageProductions (T_VisageProductions act) (Inh_VisageProductions ) =
Control.Monad.Identity.runIdentity (
do sem <- act
let arg28 = T_VisageProductions_vIn28
(T_VisageProductions_vOut28 _lhsOaterms) <- return (inv_VisageProductions_s29 sem arg28)
return (Syn_VisageProductions _lhsOaterms)
)
sem_VisageProductions :: VisageProductions -> T_VisageProductions
sem_VisageProductions list = Prelude.foldr sem_VisageProductions_Cons sem_VisageProductions_Nil (Prelude.map sem_VisageProduction list)
newtype T_VisageProductions = T_VisageProductions {
attach_T_VisageProductions :: Identity (T_VisageProductions_s29 )
}
newtype T_VisageProductions_s29 = C_VisageProductions_s29 {
inv_VisageProductions_s29 :: (T_VisageProductions_v28 )
}
data T_VisageProductions_s30 = C_VisageProductions_s30
type T_VisageProductions_v28 = (T_VisageProductions_vIn28 ) -> (T_VisageProductions_vOut28 )
data T_VisageProductions_vIn28 = T_VisageProductions_vIn28
data T_VisageProductions_vOut28 = T_VisageProductions_vOut28 ([ATerm])
sem_VisageProductions_Cons :: T_VisageProduction -> T_VisageProductions -> T_VisageProductions
sem_VisageProductions_Cons arg_hd_ arg_tl_ = T_VisageProductions (return st29) where
st29 = let
v28 :: T_VisageProductions_v28
v28 = \ (T_VisageProductions_vIn28 ) -> ( let
_hdX26 = Control.Monad.Identity.runIdentity (attach_T_VisageProduction (arg_hd_))
_tlX29 = Control.Monad.Identity.runIdentity (attach_T_VisageProductions (arg_tl_))
(T_VisageProduction_vOut25 _hdIaterm) = inv_VisageProduction_s26 _hdX26 (T_VisageProduction_vIn25 )
(T_VisageProductions_vOut28 _tlIaterms) = inv_VisageProductions_s29 _tlX29 (T_VisageProductions_vIn28 )
_lhsOaterms :: [ATerm]
_lhsOaterms = rule19 _hdIaterm _tlIaterms
__result_ = T_VisageProductions_vOut28 _lhsOaterms
in __result_ )
in C_VisageProductions_s29 v28
rule19 = \ ((_hdIaterm) :: ATerm) ((_tlIaterms) :: [ATerm]) ->
_hdIaterm : _tlIaterms
sem_VisageProductions_Nil :: T_VisageProductions
sem_VisageProductions_Nil = T_VisageProductions (return st29) where
st29 = let
v28 :: T_VisageProductions_v28
v28 = \ (T_VisageProductions_vIn28 ) -> ( let
_lhsOaterms :: [ATerm]
_lhsOaterms = rule20 ()
__result_ = T_VisageProductions_vOut28 _lhsOaterms
in __result_ )
in C_VisageProductions_s29 v28
rule20 = \ (_ :: ()) ->
[]
data Inh_VisageRule = Inh_VisageRule { isLoc_Inh_VisageRule :: (Bool) }
data Syn_VisageRule = Syn_VisageRule { aterm_Syn_VisageRule :: (ATerm) }
wrap_VisageRule :: T_VisageRule -> Inh_VisageRule -> (Syn_VisageRule )
wrap_VisageRule (T_VisageRule act) (Inh_VisageRule _lhsIisLoc) =
Control.Monad.Identity.runIdentity (
do sem <- act
let arg31 = T_VisageRule_vIn31 _lhsIisLoc
(T_VisageRule_vOut31 _lhsOaterm) <- return (inv_VisageRule_s32 sem arg31)
return (Syn_VisageRule _lhsOaterm)
)
sem_VisageRule :: VisageRule -> T_VisageRule
sem_VisageRule ( VRule fieldattrs_ attr_ pat_ rhs_ owrt_ ) = sem_VisageRule_VRule fieldattrs_ attr_ ( sem_VisagePattern pat_ ) ( sem_Expression rhs_ ) owrt_
newtype T_VisageRule = T_VisageRule {
attach_T_VisageRule :: Identity (T_VisageRule_s32 )
}
newtype T_VisageRule_s32 = C_VisageRule_s32 {
inv_VisageRule_s32 :: (T_VisageRule_v31 )
}
data T_VisageRule_s33 = C_VisageRule_s33
type T_VisageRule_v31 = (T_VisageRule_vIn31 ) -> (T_VisageRule_vOut31 )
data T_VisageRule_vIn31 = T_VisageRule_vIn31 (Bool)
data T_VisageRule_vOut31 = T_VisageRule_vOut31 (ATerm)
sem_VisageRule_VRule :: ([(Identifier,Identifier)]) -> (Identifier) -> T_VisagePattern -> T_Expression -> (Bool) -> T_VisageRule
sem_VisageRule_VRule _ arg_attr_ arg_pat_ arg_rhs_ arg_owrt_ = T_VisageRule (return st32) where
st32 = let
v31 :: T_VisageRule_v31
v31 = \ (T_VisageRule_vIn31 _lhsIisLoc) -> ( let
_patX20 = Control.Monad.Identity.runIdentity (attach_T_VisagePattern (arg_pat_))
_rhsX2 = Control.Monad.Identity.runIdentity (attach_T_Expression (arg_rhs_))
(T_VisagePattern_vOut19 _patIaterm) = inv_VisagePattern_s20 _patX20 (T_VisagePattern_vIn19 )
(T_Expression_vOut1 _rhsIaterm) = inv_Expression_s2 _rhsX2 (T_Expression_vIn1 )
_lhsOaterm :: ATerm
_lhsOaterm = rule21 _lhsIisLoc _patIaterm _rhsIaterm arg_attr_ arg_owrt_
__result_ = T_VisageRule_vOut31 _lhsOaterm
in __result_ )
in C_VisageRule_s32 v31
rule21 = \ ((_lhsIisLoc) :: Bool) ((_patIaterm) :: ATerm) ((_rhsIaterm) :: ATerm) attr_ owrt_ ->
AAppl (if _lhsIisLoc then "LocRule" else "Rule")
([AString (sQ (getName attr_)), _patIaterm, _rhsIaterm] ++ if _lhsIisLoc then [AString (sQ (show owrt_))] else [])
data Inh_VisageRules = Inh_VisageRules { isLoc_Inh_VisageRules :: (Bool) }
data Syn_VisageRules = Syn_VisageRules { aterms_Syn_VisageRules :: ([ATerm]) }
wrap_VisageRules :: T_VisageRules -> Inh_VisageRules -> (Syn_VisageRules )
wrap_VisageRules (T_VisageRules act) (Inh_VisageRules _lhsIisLoc) =
Control.Monad.Identity.runIdentity (
do sem <- act
let arg34 = T_VisageRules_vIn34 _lhsIisLoc
(T_VisageRules_vOut34 _lhsOaterms) <- return (inv_VisageRules_s35 sem arg34)
return (Syn_VisageRules _lhsOaterms)
)
sem_VisageRules :: VisageRules -> T_VisageRules
sem_VisageRules list = Prelude.foldr sem_VisageRules_Cons sem_VisageRules_Nil (Prelude.map sem_VisageRule list)
newtype T_VisageRules = T_VisageRules {
attach_T_VisageRules :: Identity (T_VisageRules_s35 )
}
newtype T_VisageRules_s35 = C_VisageRules_s35 {
inv_VisageRules_s35 :: (T_VisageRules_v34 )
}
data T_VisageRules_s36 = C_VisageRules_s36
type T_VisageRules_v34 = (T_VisageRules_vIn34 ) -> (T_VisageRules_vOut34 )
data T_VisageRules_vIn34 = T_VisageRules_vIn34 (Bool)
data T_VisageRules_vOut34 = T_VisageRules_vOut34 ([ATerm])
sem_VisageRules_Cons :: T_VisageRule -> T_VisageRules -> T_VisageRules
sem_VisageRules_Cons arg_hd_ arg_tl_ = T_VisageRules (return st35) where
st35 = let
v34 :: T_VisageRules_v34
v34 = \ (T_VisageRules_vIn34 _lhsIisLoc) -> ( let
_hdX32 = Control.Monad.Identity.runIdentity (attach_T_VisageRule (arg_hd_))
_tlX35 = Control.Monad.Identity.runIdentity (attach_T_VisageRules (arg_tl_))
(T_VisageRule_vOut31 _hdIaterm) = inv_VisageRule_s32 _hdX32 (T_VisageRule_vIn31 _hdOisLoc)
(T_VisageRules_vOut34 _tlIaterms) = inv_VisageRules_s35 _tlX35 (T_VisageRules_vIn34 _tlOisLoc)
_lhsOaterms :: [ATerm]
_lhsOaterms = rule22 _hdIaterm _tlIaterms
_hdOisLoc = rule23 _lhsIisLoc
_tlOisLoc = rule24 _lhsIisLoc
__result_ = T_VisageRules_vOut34 _lhsOaterms
in __result_ )
in C_VisageRules_s35 v34
rule22 = \ ((_hdIaterm) :: ATerm) ((_tlIaterms) :: [ATerm]) ->
_hdIaterm : _tlIaterms
rule23 = \ ((_lhsIisLoc) :: Bool) ->
_lhsIisLoc
rule24 = \ ((_lhsIisLoc) :: Bool) ->
_lhsIisLoc
sem_VisageRules_Nil :: T_VisageRules
sem_VisageRules_Nil = T_VisageRules (return st35) where
st35 = let
v34 :: T_VisageRules_v34
v34 = \ (T_VisageRules_vIn34 _lhsIisLoc) -> ( let
_lhsOaterms :: [ATerm]
_lhsOaterms = rule25 ()
__result_ = T_VisageRules_vOut34 _lhsOaterms
in __result_ )
in C_VisageRules_s35 v34
rule25 = \ (_ :: ()) ->
[]