module Order where
import CommonTypes
import Patterns
import ErrorMessages
import AbstractSyntax
import Code hiding (Type)
import qualified Code
import Expression
import Options
import SequentialComputation
import SequentialTypes
import CodeSyntax
import GrammarInfo
import HsToken(HsTokensRoot(HsTokensRoot))
import HsTokenScanner(lexTokens)
import SemHsTokens(sem_HsTokensRoot,wrap_HsTokensRoot, Syn_HsTokensRoot(..),Inh_HsTokensRoot(..))
import qualified Data.Map as Map
import qualified Data.Set as Set
import qualified Data.Sequence as Seq
import Data.Map(Map)
import Data.Set(Set)
import Data.Sequence(Seq, (><))
import UU.Util.Utils
import UU.Scanner.Position(Pos(..),initPos)
import Data.Foldable(toList)
import Control.Monad(liftM)
import qualified Data.Array as Array
import Data.Array((!),bounds,inRange)
import Data.List(elemIndex,partition,sort,mapAccumL,find,nubBy,intersperse,groupBy,transpose)
import qualified Data.Tree as Tree
import Data.Maybe
import UU.Scanner.Position(Pos)
import CommonTypes (ConstructorIdent,Identifier)
import UU.Scanner.Position(Pos)
import HsToken
import Data.Set(Set)
import Data.Map(Map)
import Patterns (Pattern(..),Patterns)
import Expression (Expression(..))
import Macro --marcos
import CommonTypes
import ErrorMessages
findWithErr1 :: (Ord k, Show k) => String -> k -> Map k a -> a
findWithErr1 s k
= Map.findWithDefault (error ("findWithErr1 " ++ s ++ ": key " ++ show k ++ " not in map.")) k
findWithErr2 :: (Ord k, Show k, Show a) => k -> Map k a -> a
findWithErr2 k m
= Map.findWithDefault (error ("findWithErr2: key " ++ show k ++ " not in map: " ++ show m)) k m
startsWith :: String -> String -> Bool
startsWith k h = k == take (length k) h
getNtName :: Type -> NontermIdent
getNtName (NT nt _ _) = nt
getNtName _ = nullIdent
data AltAttr = AltAttr Identifier Identifier Bool
deriving (Eq, Ord, Show)
substSelf nt tp
= case tp of
NT n tps defor | n == _SELF -> NT nt tps defor
_ -> tp
haskellTupel :: [Type] -> Maybe Type
haskellTupel ts = Just ( Haskell ( '(' : (concat (intersperse "," (map show ts))) ++ ")" ))
swap (a,b) = (b,a)
showPath :: Table CRule -> [Vertex] -> [String]
showPath ruleTable path
= let look a | inRange (bounds ruleTable) a = [showOrigin (ruleTable ! a)]
| otherwise = ["Vertex " ++ show a]
showOrigin cr | getHasCode cr && getName (getAttr cr) /= "self" = prettyCRule cr ++ " (" ++ show (getPos (getAttr cr)) ++ ")"
| otherwise = prettyCRule cr
in concatMap look path
showPathLocal :: Table CRule -> [Vertex] -> [String]
showPathLocal _ [] = []
showPathLocal ruleTable xs = showP (xs++[1])
where showP [] = []
showP (v1:v2:vs) = let line = step v1 v2
lines = showP vs
in line:lines
step v1 v2 = " - " ++ a1
where r1 = ruleTable ! v1
a1 = show (getAttr r1)
limitTo :: Int -> [String] -> [String]
limitTo _ [] = []
limitTo 0 _ = ["....etcetera, etcetera...."]
limitTo n (x:xs) = x : limitTo (n1) xs
showPathNice :: Table CRule -> [Vertex] -> [String]
showPathNice _ [] = []
showPathNice ruleTable xs = limitTo 100 (showP ((1):xs++[1]))
where [maxf, maxa, maxn, maxc] = maxWidths ruleTable (take 100 xs)
showP [] = []
showP (v1:v2:vs) = let line = step v1 v2
lines = showP vs
in if null line then lines else line:lines
step v1 v2 | last && first = induced
| last && isSyn r1 = "pass up " ++ alignR maxf "" ++ " " ++ alignL maxa a1 ++ " in " ++ alignR maxn n1 ++ "|" ++ c1 ++ induced
| first&& not(isSyn r2) = "get from above " ++ alignR maxf "" ++ " " ++ alignL maxa a2 ++ " in " ++ alignR maxn n2 ++ "|" ++ c2
| last = "pass down " ++ alignR maxf f1 ++ "." ++ a1 ++ induced
| isSyn r2 = "get from below " ++ alignR maxf f2 ++ "." ++ alignL maxa a2 ++ " in " ++ alignR maxn n2 ++ "|" ++ c2
| isLocal r1 = if head a1 == '_'
then ""
else "calculate " ++ alignR maxf "loc" ++ "." ++ a1
| otherwise = "pass down " ++ alignR maxf f1 ++ "." ++ alignL maxa a1 ++ " to " ++ alignR maxn n2 ++ "|" ++ c2
where
first = v1<0
last = v2<0
r1 = ruleTable ! v1
r2 = ruleTable ! v2
a1 = show (getAttr r1)
a2 = show (getAttr r2)
f1 = show (getField r1)
f2 = show (getField r2)
n1 = show (getLhsNt r1)
n2 = show (getLhsNt r2)
c1 = show (getCon r1)
c2 = show (getCon r2)
induced | v2== 2 = " INDUCED dependency to "
| otherwise = ""
maxWidths ruleTable vs
= map maximum (transpose (map getWidth vs))
where getWidth v | v<0 = [0,0,0,0]
| otherwise = map (length . show . ($ (ruleTable!v))) [getField, getAttr, getLhsNt, getCon]
alignL n xs | k<n = xs ++ replicate (nk) ' '
| otherwise = xs
where k = length xs
alignR n xs | k<n = replicate (nk) ' ' ++ xs
| otherwise = xs
where k = length xs
localCycleErr :: Table CRule -> Bool -> Route -> Error
localCycleErr ruleTable o_visit (s:path)
= let cr = ruleTable ! s
attr = getAttr cr
nt = getLhsNt cr
con = getCon cr
in LocalCirc nt con attr o_visit (showPathLocal ruleTable path)
instCycleErr :: Table CRule -> Bool -> Route -> Error
instCycleErr ruleTable o_visit (s:path)
= let cr = ruleTable ! s
attr = getAttr cr
nt = getLhsNt cr
con = getCon cr
in InstCirc nt con attr o_visit (showPathLocal ruleTable path)
directCycleErrs :: Table NTAttr -> Table CRule -> Bool -> [EdgeRoutes] -> [Error]
directCycleErrs attrTable ruleTable o_visit xs
= let getNont v = case attrTable ! v of
NTASyn nt _ _ -> nt
NTAInh nt _ _ -> nt
getAttr v = case attrTable ! v of
NTASyn _ a _ -> a
NTAInh _ a _ -> a
sameNont ((v1,_),_,_) ((v2,_),_,_) = getNont v1 == getNont v2
procCycle ((v1,v2),p1,p2) = ((getAttr v1, getAttr v2), showPathNice ruleTable p1, showPathNice ruleTable p2)
wrapGroup gr@(((v1,_),_,_):_) = DirectCirc (getNont v1) o_visit (map procCycle gr)
in map wrapGroup (groupBy sameNont xs)
inducedCycleErrs :: Table NTAttr -> Table CRule -> CInterfaceMap -> [EdgeRoutes] -> [Error]
inducedCycleErrs attrTable ruleTable cim xs
= let getNont v = case attrTable ! v of
NTASyn nt _ _ -> nt
NTAInh nt _ _ -> nt
getAttr v = case attrTable ! v of
NTASyn _ a _ -> a
NTAInh _ a _ -> a
sameNont ((v1,_),_,_) ((v2,_),_,_) = getNont v1 == getNont v2
procCycle ((v1,v2),p1,p2) = ((getAttr v1, getAttr v2), showPathNice ruleTable p1, showPathNice ruleTable p2)
wrapGroup gr@(((v1,_),_,_):_) = InducedCirc (getNont v1) (findWithErr1 "inducedCycleErr.cinter" (getNont v1) cim) (map procCycle gr)
in map wrapGroup (groupBy sameNont xs)
sem_Child :: Child ->
T_Child
sem_Child (Child _name _tp _kind) =
(sem_Child_Child _name _tp _kind)
newtype T_Child = T_Child (([(Identifier,Type,ChildKind)]) ->
([Identifier]) ->
([(Identifier,Identifier)]) ->
Identifier ->
Attributes ->
(Map Identifier Attributes) ->
(Map Identifier (Identifier,[Identifier])) ->
Identifier ->
Bool ->
Attributes ->
(Map Identifier Attributes) ->
( ([(Identifier,Attributes,Attributes)]),(Map Identifier Attributes ),(Map Identifier Attributes ),(Seq Error),((Identifier,Type,ChildKind)),([AltAttr]),(Seq CRule),(Seq (Identifier,Attributes)),(Seq (Identifier,NontermIdent)),([CRule]),([Identifier])))
data Inh_Child = Inh_Child {allfields_Inh_Child :: !(([(Identifier,Type,ChildKind)])),allnts_Inh_Child :: !(([Identifier])),attrs_Inh_Child :: !(([(Identifier,Identifier)])),con_Inh_Child :: !(Identifier),inh_Inh_Child :: !(Attributes),inhMap_Inh_Child :: !((Map Identifier Attributes)),mergeMap_Inh_Child :: !((Map Identifier (Identifier,[Identifier]))),nt_Inh_Child :: !(Identifier),o_unbox_Inh_Child :: !(Bool),syn_Inh_Child :: !(Attributes),synMap_Inh_Child :: !((Map Identifier Attributes))}
data Syn_Child = Syn_Child {attributes_Syn_Child :: !(([(Identifier,Attributes,Attributes)])),collectChildrenInhs_Syn_Child :: !((Map Identifier Attributes )),collectChildrenSyns_Syn_Child :: !((Map Identifier Attributes )),errors_Syn_Child :: !((Seq Error)),field_Syn_Child :: !(((Identifier,Type,ChildKind))),gathAltAttrs_Syn_Child :: !(([AltAttr])),gathRules_Syn_Child :: !((Seq CRule)),inhs_Syn_Child :: !((Seq (Identifier,Attributes))),nts_Syn_Child :: !((Seq (Identifier,NontermIdent))),singlevisits_Syn_Child :: !(([CRule])),terminals_Syn_Child :: !(([Identifier]))}
wrap_Child :: T_Child ->
Inh_Child ->
Syn_Child
wrap_Child (T_Child sem) (Inh_Child _lhsIallfields _lhsIallnts _lhsIattrs _lhsIcon _lhsIinh _lhsIinhMap _lhsImergeMap _lhsInt _lhsIo_unbox _lhsIsyn _lhsIsynMap) =
(let ( _lhsOattributes,_lhsOcollectChildrenInhs,_lhsOcollectChildrenSyns,_lhsOerrors,_lhsOfield,_lhsOgathAltAttrs,_lhsOgathRules,_lhsOinhs,_lhsOnts,_lhsOsinglevisits,_lhsOterminals) = sem _lhsIallfields _lhsIallnts _lhsIattrs _lhsIcon _lhsIinh _lhsIinhMap _lhsImergeMap _lhsInt _lhsIo_unbox _lhsIsyn _lhsIsynMap
in (Syn_Child _lhsOattributes _lhsOcollectChildrenInhs _lhsOcollectChildrenSyns _lhsOerrors _lhsOfield _lhsOgathAltAttrs _lhsOgathRules _lhsOinhs _lhsOnts _lhsOsinglevisits _lhsOterminals))
sem_Child_Child :: Identifier ->
Type ->
ChildKind ->
T_Child
sem_Child_Child name_ tp_ kind_ =
(T_Child (\ _lhsIallfields
_lhsIallnts
_lhsIattrs
_lhsIcon
_lhsIinh
_lhsIinhMap
_lhsImergeMap
_lhsInt
_lhsIo_unbox
_lhsIsyn
_lhsIsynMap ->
(let _lhsOgathAltAttrs :: ([AltAttr])
_lhsOnts :: (Seq (Identifier,NontermIdent))
_lhsOinhs :: (Seq (Identifier,Attributes))
_lhsOcollectChildrenSyns :: (Map Identifier Attributes )
_lhsOcollectChildrenInhs :: (Map Identifier Attributes )
_lhsOsinglevisits :: ([CRule])
_lhsOterminals :: ([Identifier])
_lhsOattributes :: ([(Identifier,Attributes,Attributes)])
_lhsOfield :: ((Identifier,Type,ChildKind))
_lhsOerrors :: (Seq Error)
_lhsOgathRules :: (Seq CRule)
_maptolocal =
(
case tp_ of
NT nt _ _ -> Map.null _syn
_ -> True
)
_lhsOgathAltAttrs =
(
if _maptolocal
then [ AltAttr _LOC name_ True ]
else [ AltAttr name_ syn True | syn <- Map.keys _syn ]
)
_lhsOnts =
(
Seq.singleton (name_,getNtName tp_)
)
_lhsOinhs =
(
Seq.singleton (name_,_inh )
)
_gathRules =
(
if _maptolocal
then Seq.singleton (cRuleTerminal name_ _lhsInt _lhsIcon tp_)
else Seq.fromList [ cRuleRhsSyn syn _lhsInt _lhsIcon tp name_ (getNtName tp_) | (syn,tp) <- Map.assocs _syn ]
)
_lhsOcollectChildrenSyns =
(
Map.singleton name_ _syn
)
_lhsOcollectChildrenInhs =
(
Map.singleton name_ _inh
)
_lhsOsinglevisits =
(
if _maptolocal
then []
else [CChildVisit name_ (getNtName tp_) 0 _inh _syn True]
)
_lhsOterminals =
(
if _maptolocal
then [name_]
else []
)
_lhsOattributes =
(
[(name_, _inh , _syn )]
)
_lhsOfield =
(
(name_, tp_, kind_)
)
_chnt =
(
case tp_ of
NT nt _ _ -> nt
Self -> error ("The type of child " ++ show name_ ++ " should not be a Self type.")
Haskell t -> identifier ""
)
_inh =
(
Map.findWithDefault Map.empty _chnt _lhsIinhMap
)
_syn =
(
Map.findWithDefault Map.empty _chnt _lhsIsynMap
)
_lhsOerrors =
(
Seq.empty
)
_lhsOgathRules =
(
_gathRules
)
in ( _lhsOattributes,_lhsOcollectChildrenInhs,_lhsOcollectChildrenSyns,_lhsOerrors,_lhsOfield,_lhsOgathAltAttrs,_lhsOgathRules,_lhsOinhs,_lhsOnts,_lhsOsinglevisits,_lhsOterminals))))
sem_Children :: Children ->
T_Children
sem_Children list =
(Prelude.foldr sem_Children_Cons sem_Children_Nil (Prelude.map sem_Child list))
newtype T_Children = T_Children (([(Identifier,Type,ChildKind)]) ->
([Identifier]) ->
([(Identifier,Identifier)]) ->
Identifier ->
Attributes ->
(Map Identifier Attributes) ->
(Map Identifier (Identifier,[Identifier])) ->
Identifier ->
Bool ->
Attributes ->
(Map Identifier Attributes) ->
( ([(Identifier,Attributes,Attributes)]),(Map Identifier Attributes ),(Map Identifier Attributes ),(Seq Error),([(Identifier,Type,ChildKind)]),([AltAttr]),(Seq CRule),(Seq (Identifier,Attributes)),(Seq (Identifier,NontermIdent)),([CRule]),([Identifier])))
data Inh_Children = Inh_Children {allfields_Inh_Children :: !(([(Identifier,Type,ChildKind)])),allnts_Inh_Children :: !(([Identifier])),attrs_Inh_Children :: !(([(Identifier,Identifier)])),con_Inh_Children :: !(Identifier),inh_Inh_Children :: !(Attributes),inhMap_Inh_Children :: !((Map Identifier Attributes)),mergeMap_Inh_Children :: !((Map Identifier (Identifier,[Identifier]))),nt_Inh_Children :: !(Identifier),o_unbox_Inh_Children :: !(Bool),syn_Inh_Children :: !(Attributes),synMap_Inh_Children :: !((Map Identifier Attributes))}
data Syn_Children = Syn_Children {attributes_Syn_Children :: !(([(Identifier,Attributes,Attributes)])),collectChildrenInhs_Syn_Children :: !((Map Identifier Attributes )),collectChildrenSyns_Syn_Children :: !((Map Identifier Attributes )),errors_Syn_Children :: !((Seq Error)),fields_Syn_Children :: !(([(Identifier,Type,ChildKind)])),gathAltAttrs_Syn_Children :: !(([AltAttr])),gathRules_Syn_Children :: !((Seq CRule)),inhs_Syn_Children :: !((Seq (Identifier,Attributes))),nts_Syn_Children :: !((Seq (Identifier,NontermIdent))),singlevisits_Syn_Children :: !(([CRule])),terminals_Syn_Children :: !(([Identifier]))}
wrap_Children :: T_Children ->
Inh_Children ->
Syn_Children
wrap_Children (T_Children sem) (Inh_Children _lhsIallfields _lhsIallnts _lhsIattrs _lhsIcon _lhsIinh _lhsIinhMap _lhsImergeMap _lhsInt _lhsIo_unbox _lhsIsyn _lhsIsynMap) =
(let ( _lhsOattributes,_lhsOcollectChildrenInhs,_lhsOcollectChildrenSyns,_lhsOerrors,_lhsOfields,_lhsOgathAltAttrs,_lhsOgathRules,_lhsOinhs,_lhsOnts,_lhsOsinglevisits,_lhsOterminals) = sem _lhsIallfields _lhsIallnts _lhsIattrs _lhsIcon _lhsIinh _lhsIinhMap _lhsImergeMap _lhsInt _lhsIo_unbox _lhsIsyn _lhsIsynMap
in (Syn_Children _lhsOattributes _lhsOcollectChildrenInhs _lhsOcollectChildrenSyns _lhsOerrors _lhsOfields _lhsOgathAltAttrs _lhsOgathRules _lhsOinhs _lhsOnts _lhsOsinglevisits _lhsOterminals))
sem_Children_Cons :: T_Child ->
T_Children ->
T_Children
sem_Children_Cons (T_Child hd_) (T_Children tl_) =
(T_Children (\ _lhsIallfields
_lhsIallnts
_lhsIattrs
_lhsIcon
_lhsIinh
_lhsIinhMap
_lhsImergeMap
_lhsInt
_lhsIo_unbox
_lhsIsyn
_lhsIsynMap ->
(let _lhsOfields :: ([(Identifier,Type,ChildKind)])
_lhsOattributes :: ([(Identifier,Attributes,Attributes)])
_lhsOcollectChildrenInhs :: (Map Identifier Attributes )
_lhsOcollectChildrenSyns :: (Map Identifier Attributes )
_lhsOerrors :: (Seq Error)
_lhsOgathAltAttrs :: ([AltAttr])
_lhsOgathRules :: (Seq CRule)
_lhsOinhs :: (Seq (Identifier,Attributes))
_lhsOnts :: (Seq (Identifier,NontermIdent))
_lhsOsinglevisits :: ([CRule])
_lhsOterminals :: ([Identifier])
_hdOallfields :: ([(Identifier,Type,ChildKind)])
_hdOallnts :: ([Identifier])
_hdOattrs :: ([(Identifier,Identifier)])
_hdOcon :: Identifier
_hdOinh :: Attributes
_hdOinhMap :: (Map Identifier Attributes)
_hdOmergeMap :: (Map Identifier (Identifier,[Identifier]))
_hdOnt :: Identifier
_hdOo_unbox :: Bool
_hdOsyn :: Attributes
_hdOsynMap :: (Map Identifier Attributes)
_tlOallfields :: ([(Identifier,Type,ChildKind)])
_tlOallnts :: ([Identifier])
_tlOattrs :: ([(Identifier,Identifier)])
_tlOcon :: Identifier
_tlOinh :: Attributes
_tlOinhMap :: (Map Identifier Attributes)
_tlOmergeMap :: (Map Identifier (Identifier,[Identifier]))
_tlOnt :: Identifier
_tlOo_unbox :: Bool
_tlOsyn :: Attributes
_tlOsynMap :: (Map Identifier Attributes)
_hdIattributes :: ([(Identifier,Attributes,Attributes)])
_hdIcollectChildrenInhs :: (Map Identifier Attributes )
_hdIcollectChildrenSyns :: (Map Identifier Attributes )
_hdIerrors :: (Seq Error)
_hdIfield :: ((Identifier,Type,ChildKind))
_hdIgathAltAttrs :: ([AltAttr])
_hdIgathRules :: (Seq CRule)
_hdIinhs :: (Seq (Identifier,Attributes))
_hdInts :: (Seq (Identifier,NontermIdent))
_hdIsinglevisits :: ([CRule])
_hdIterminals :: ([Identifier])
_tlIattributes :: ([(Identifier,Attributes,Attributes)])
_tlIcollectChildrenInhs :: (Map Identifier Attributes )
_tlIcollectChildrenSyns :: (Map Identifier Attributes )
_tlIerrors :: (Seq Error)
_tlIfields :: ([(Identifier,Type,ChildKind)])
_tlIgathAltAttrs :: ([AltAttr])
_tlIgathRules :: (Seq CRule)
_tlIinhs :: (Seq (Identifier,Attributes))
_tlInts :: (Seq (Identifier,NontermIdent))
_tlIsinglevisits :: ([CRule])
_tlIterminals :: ([Identifier])
_lhsOfields =
(
_hdIfield : _tlIfields
)
_lhsOattributes =
(
_hdIattributes ++ _tlIattributes
)
_lhsOcollectChildrenInhs =
(
_hdIcollectChildrenInhs `Map.union` _tlIcollectChildrenInhs
)
_lhsOcollectChildrenSyns =
(
_hdIcollectChildrenSyns `Map.union` _tlIcollectChildrenSyns
)
_lhsOerrors =
(
_hdIerrors Seq.>< _tlIerrors
)
_lhsOgathAltAttrs =
(
_hdIgathAltAttrs ++ _tlIgathAltAttrs
)
_lhsOgathRules =
(
_hdIgathRules Seq.>< _tlIgathRules
)
_lhsOinhs =
(
_hdIinhs Seq.>< _tlIinhs
)
_lhsOnts =
(
_hdInts Seq.>< _tlInts
)
_lhsOsinglevisits =
(
_hdIsinglevisits ++ _tlIsinglevisits
)
_lhsOterminals =
(
_hdIterminals ++ _tlIterminals
)
_hdOallfields =
(
_lhsIallfields
)
_hdOallnts =
(
_lhsIallnts
)
_hdOattrs =
(
_lhsIattrs
)
_hdOcon =
(
_lhsIcon
)
_hdOinh =
(
_lhsIinh
)
_hdOinhMap =
(
_lhsIinhMap
)
_hdOmergeMap =
(
_lhsImergeMap
)
_hdOnt =
(
_lhsInt
)
_hdOo_unbox =
(
_lhsIo_unbox
)
_hdOsyn =
(
_lhsIsyn
)
_hdOsynMap =
(
_lhsIsynMap
)
_tlOallfields =
(
_lhsIallfields
)
_tlOallnts =
(
_lhsIallnts
)
_tlOattrs =
(
_lhsIattrs
)
_tlOcon =
(
_lhsIcon
)
_tlOinh =
(
_lhsIinh
)
_tlOinhMap =
(
_lhsIinhMap
)
_tlOmergeMap =
(
_lhsImergeMap
)
_tlOnt =
(
_lhsInt
)
_tlOo_unbox =
(
_lhsIo_unbox
)
_tlOsyn =
(
_lhsIsyn
)
_tlOsynMap =
(
_lhsIsynMap
)
( _hdIattributes,_hdIcollectChildrenInhs,_hdIcollectChildrenSyns,_hdIerrors,_hdIfield,_hdIgathAltAttrs,_hdIgathRules,_hdIinhs,_hdInts,_hdIsinglevisits,_hdIterminals) =
hd_ _hdOallfields _hdOallnts _hdOattrs _hdOcon _hdOinh _hdOinhMap _hdOmergeMap _hdOnt _hdOo_unbox _hdOsyn _hdOsynMap
( _tlIattributes,_tlIcollectChildrenInhs,_tlIcollectChildrenSyns,_tlIerrors,_tlIfields,_tlIgathAltAttrs,_tlIgathRules,_tlIinhs,_tlInts,_tlIsinglevisits,_tlIterminals) =
tl_ _tlOallfields _tlOallnts _tlOattrs _tlOcon _tlOinh _tlOinhMap _tlOmergeMap _tlOnt _tlOo_unbox _tlOsyn _tlOsynMap
in ( _lhsOattributes,_lhsOcollectChildrenInhs,_lhsOcollectChildrenSyns,_lhsOerrors,_lhsOfields,_lhsOgathAltAttrs,_lhsOgathRules,_lhsOinhs,_lhsOnts,_lhsOsinglevisits,_lhsOterminals))))
sem_Children_Nil :: T_Children
sem_Children_Nil =
(T_Children (\ _lhsIallfields
_lhsIallnts
_lhsIattrs
_lhsIcon
_lhsIinh
_lhsIinhMap
_lhsImergeMap
_lhsInt
_lhsIo_unbox
_lhsIsyn
_lhsIsynMap ->
(let _lhsOfields :: ([(Identifier,Type,ChildKind)])
_lhsOattributes :: ([(Identifier,Attributes,Attributes)])
_lhsOcollectChildrenInhs :: (Map Identifier Attributes )
_lhsOcollectChildrenSyns :: (Map Identifier Attributes )
_lhsOerrors :: (Seq Error)
_lhsOgathAltAttrs :: ([AltAttr])
_lhsOgathRules :: (Seq CRule)
_lhsOinhs :: (Seq (Identifier,Attributes))
_lhsOnts :: (Seq (Identifier,NontermIdent))
_lhsOsinglevisits :: ([CRule])
_lhsOterminals :: ([Identifier])
_lhsOfields =
(
[]
)
_lhsOattributes =
(
[]
)
_lhsOcollectChildrenInhs =
(
Map.empty
)
_lhsOcollectChildrenSyns =
(
Map.empty
)
_lhsOerrors =
(
Seq.empty
)
_lhsOgathAltAttrs =
(
[]
)
_lhsOgathRules =
(
Seq.empty
)
_lhsOinhs =
(
Seq.empty
)
_lhsOnts =
(
Seq.empty
)
_lhsOsinglevisits =
(
[]
)
_lhsOterminals =
(
[]
)
in ( _lhsOattributes,_lhsOcollectChildrenInhs,_lhsOcollectChildrenSyns,_lhsOerrors,_lhsOfields,_lhsOgathAltAttrs,_lhsOgathRules,_lhsOinhs,_lhsOnts,_lhsOsinglevisits,_lhsOterminals))))
sem_Expression :: Expression ->
T_Expression
sem_Expression (Expression _pos _tks) =
(sem_Expression_Expression _pos _tks)
newtype T_Expression = T_Expression (([(Identifier,Type,ChildKind)]) ->
([Identifier]) ->
([(Identifier,Identifier)]) ->
Identifier ->
(Map Identifier (Identifier,[Identifier])) ->
Identifier ->
( (Set (Identifier,Identifier)),Expression,(Seq Error),([String]),([(Identifier,Identifier)]),([Identifier]),([Identifier])))
data Inh_Expression = Inh_Expression {allfields_Inh_Expression :: !(([(Identifier,Type,ChildKind)])),allnts_Inh_Expression :: !(([Identifier])),attrs_Inh_Expression :: !(([(Identifier,Identifier)])),con_Inh_Expression :: !(Identifier),mergeMap_Inh_Expression :: !((Map Identifier (Identifier,[Identifier]))),nt_Inh_Expression :: !(Identifier)}
data Syn_Expression = Syn_Expression {allRhsVars_Syn_Expression :: !((Set (Identifier,Identifier))),copy_Syn_Expression :: !(Expression),errors_Syn_Expression :: !((Seq Error)),textLines_Syn_Expression :: !(([String])),usedAttrs_Syn_Expression :: !(([(Identifier,Identifier)])),usedFields_Syn_Expression :: !(([Identifier])),usedLocals_Syn_Expression :: !(([Identifier]))}
wrap_Expression :: T_Expression ->
Inh_Expression ->
Syn_Expression
wrap_Expression (T_Expression sem) (Inh_Expression _lhsIallfields _lhsIallnts _lhsIattrs _lhsIcon _lhsImergeMap _lhsInt) =
(let ( _lhsOallRhsVars,_lhsOcopy,_lhsOerrors,_lhsOtextLines,_lhsOusedAttrs,_lhsOusedFields,_lhsOusedLocals) = sem _lhsIallfields _lhsIallnts _lhsIattrs _lhsIcon _lhsImergeMap _lhsInt
in (Syn_Expression _lhsOallRhsVars _lhsOcopy _lhsOerrors _lhsOtextLines _lhsOusedAttrs _lhsOusedFields _lhsOusedLocals))
sem_Expression_Expression :: Pos ->
([HsToken]) ->
T_Expression
sem_Expression_Expression pos_ tks_ =
(T_Expression (\ _lhsIallfields
_lhsIallnts
_lhsIattrs
_lhsIcon
_lhsImergeMap
_lhsInt ->
(let _lhsOerrors :: (Seq Error)
_lhsOallRhsVars :: (Set (Identifier,Identifier))
_lhsOcopy :: Expression
_lhsOtextLines :: ([String])
_lhsOusedAttrs :: ([(Identifier,Identifier)])
_lhsOusedFields :: ([Identifier])
_lhsOusedLocals :: ([Identifier])
(_textLines,_usedAttrs,_usedLocals,_usedFields) =
(
let mergedChildren = [ x | (_,xs) <- Map.elems _lhsImergeMap, x <- xs ]
attrsIn = filter (\(fld,_) -> not (fld `elem` mergedChildren)) _lhsIattrs
inherited = Inh_HsTokensRoot
{ attrs_Inh_HsTokensRoot = attrsIn
, con_Inh_HsTokensRoot = _lhsIcon
, allfields_Inh_HsTokensRoot = _lhsIallfields
, allnts_Inh_HsTokensRoot = _lhsIallnts
, nt_Inh_HsTokensRoot = _lhsInt
}
synthesized = wrap_HsTokensRoot (sem_HsTokensRoot (HsTokensRoot tks_)) inherited
in case synthesized of
Syn_HsTokensRoot
{ textLines_Syn_HsTokensRoot = textLines
, usedAttrs_Syn_HsTokensRoot = usedAttrs
, usedLocals_Syn_HsTokensRoot = usedLocals
, usedFields_Syn_HsTokensRoot = usedFields
} -> let extraAttrs = [ (src,attr)
| (fld,attr) <- usedAttrs, let mbMerged = Map.lookup fld _lhsImergeMap, isJust mbMerged
, let (Just (_, srcs)) = mbMerged, src <- srcs ]
usedAttrs' = usedAttrs ++ extraAttrs
in (textLines,usedAttrs',usedLocals,usedFields)
)
_lhsOerrors =
(
Seq.empty
)
_lhsOallRhsVars =
(
Set.fromList _usedAttrs
`Set.union`
Set.fromList [ (_LOC, l) | l <- _usedLocals ]
`Set.union`
Set.fromList [ (_FIELD, fld) | fld <- _usedFields ]
)
_copy =
(
Expression pos_ tks_
)
_lhsOcopy =
(
_copy
)
_lhsOtextLines =
(
_textLines
)
_lhsOusedAttrs =
(
_usedAttrs
)
_lhsOusedFields =
(
_usedFields
)
_lhsOusedLocals =
(
_usedLocals
)
in ( _lhsOallRhsVars,_lhsOcopy,_lhsOerrors,_lhsOtextLines,_lhsOusedAttrs,_lhsOusedFields,_lhsOusedLocals))))
sem_Grammar :: Grammar ->
T_Grammar
sem_Grammar (Grammar _typeSyns _useMap _derivings _wrappers _nonts _pragmas _manualAttrOrderMap _paramMap _contextMap _quantMap _uniqueMap _augmentsMap _aroundsMap _mergeMap) =
(sem_Grammar_Grammar _typeSyns _useMap _derivings _wrappers (sem_Nonterminals _nonts) _pragmas _manualAttrOrderMap _paramMap _contextMap _quantMap _uniqueMap _augmentsMap _aroundsMap _mergeMap)
newtype T_Grammar = T_Grammar (Options ->
( (Seq Error),Int,Int,CGrammar))
data Inh_Grammar = Inh_Grammar {options_Inh_Grammar :: !(Options)}
data Syn_Grammar = Syn_Grammar {errors_Syn_Grammar :: !((Seq Error)),nAutoRules_Syn_Grammar :: !(Int),nExplicitRules_Syn_Grammar :: !(Int),output_Syn_Grammar :: !(CGrammar)}
wrap_Grammar :: T_Grammar ->
Inh_Grammar ->
Syn_Grammar
wrap_Grammar (T_Grammar sem) (Inh_Grammar _lhsIoptions) =
(let ( _lhsOerrors,_lhsOnAutoRules,_lhsOnExplicitRules,_lhsOoutput) = sem _lhsIoptions
in (Syn_Grammar _lhsOerrors _lhsOnAutoRules _lhsOnExplicitRules _lhsOoutput))
sem_Grammar_Grammar :: TypeSyns ->
UseMap ->
Derivings ->
(Set NontermIdent) ->
T_Nonterminals ->
PragmaMap ->
AttrOrderMap ->
ParamMap ->
ContextMap ->
QuantMap ->
UniqueMap ->
(Map NontermIdent (Map ConstructorIdent (Map Identifier [Expression]))) ->
(Map NontermIdent (Map ConstructorIdent (Map Identifier [Expression]))) ->
(Map NontermIdent (Map ConstructorIdent (Map Identifier (Identifier, [Identifier], Expression)))) ->
T_Grammar
sem_Grammar_Grammar typeSyns_ useMap_ derivings_ wrappers_ (T_Nonterminals nonts_) pragmas_ manualAttrOrderMap_ paramMap_ contextMap_ quantMap_ uniqueMap_ augmentsMap_ aroundsMap_ mergeMap_ =
(T_Grammar (\ _lhsIoptions ->
(let _nontsOo_cata :: Bool
_nontsOo_data :: Bool
_nontsOo_sig :: Bool
_nontsOo_sem :: Bool
_nontsOo_rename :: Bool
_nontsOo_newtypes :: Bool
_nontsOo_wantvisit :: Bool
_nontsOo_unbox :: Bool
_nontsOo_case :: Bool
_nontsOprefix :: String
_nontsOvcount :: Int
_nontsOmanualAttrDepMap :: AttrOrderMap
_nontsOaroundMap :: (Map NontermIdent (Map ConstructorIdent (Map Identifier [Expression])))
_nontsOacount :: Int
_lhsOerrors :: (Seq Error)
_lhsOoutput :: CGrammar
_nontsOallnts :: ([Identifier])
_nontsOinhMap :: (Map Identifier Attributes)
_nontsOsynMap :: (Map Identifier Attributes)
_lhsOnAutoRules :: Int
_lhsOnExplicitRules :: Int
_nontsOcInterfaceMap :: CInterfaceMap
_nontsOcVisitsMap :: CVisitsMap
_nontsOmergeMap :: (Map NontermIdent (Map ConstructorIdent (Map Identifier (Identifier,[Identifier]))))
_nontsOo_dovisit :: Bool
_nontsIacount :: Int
_nontsIadditionalDep :: (Seq Edge)
_nontsIaranges :: (Seq (Int,Int,Int))
_nontsIaroundDep :: (Seq Edge)
_nontsIcNonterminals :: CNonterminals
_nontsIdirectDep :: (Seq Edge)
_nontsIerrors :: (Seq Error)
_nontsIinhMap' :: (Map Identifier Attributes)
_nontsIinstDep :: (Seq Edge)
_nontsImergeDep :: (Seq Edge)
_nontsInAutoRules :: Int
_nontsInExplicitRules :: Int
_nontsInonts :: ([(NontermIdent,[ConstructorIdent])])
_nontsIntattrs :: (Seq (Vertex,NTAttr))
_nontsIrules :: (Seq (Vertex,CRule))
_nontsIsynMap' :: (Map Identifier Attributes)
_nontsIvcount :: Int
_o_dovisit =
(
visit _lhsIoptions && null _cyclesErrors
)
_nontsOo_cata =
(
folds _lhsIoptions
)
_nontsOo_data =
(
dataTypes _lhsIoptions
)
_nontsOo_sig =
(
typeSigs _lhsIoptions
)
_nontsOo_sem =
(
semfuns _lhsIoptions
)
_nontsOo_rename =
(
rename _lhsIoptions
)
_nontsOo_newtypes =
(
newtypes _lhsIoptions
)
_nontsOo_wantvisit =
(
visit _lhsIoptions
)
_nontsOo_unbox =
(
unbox _lhsIoptions
)
_nontsOo_case =
(
cases _lhsIoptions
)
_nontsOprefix =
(
prefix _lhsIoptions
)
_nontsOvcount =
(
0
)
_nontsOmanualAttrDepMap =
(
manualAttrOrderMap_
)
_nontsOaroundMap =
(
aroundsMap_
)
_nontsOacount =
(
0
)
_ruleTable =
(
Array.array (0,_nontsIvcount1) (toList _nontsIrules)
)
_attrTable =
(
Array.array (0,_nontsIacount1) (toList _nontsIntattrs)
)
_attrVertex =
(
Map.fromList (map swap (toList _nontsIntattrs))
)
_tdpToTds =
(
[ (s, maybe (1) (\v -> findWithErr1 "Grammar.tdpToTds" v _attrVertex) (ntattr cr))
| (s,cr) <- toList _nontsIrules]
)
_tdsToTdp =
(
let eq (_,v) (_,v') = v == v'
conv ((s,v):svs) | v == 1 = Nothing
| otherwise = Just (v,s:map fst svs)
in mapMaybe conv (eqClasses eq _tdpToTds)
)
_directDep =
(
toList (_nontsIdirectDep Seq.>< _nontsIadditionalDep)
)
_instDep =
(
toList _nontsIinstDep
)
_aroundDep =
(
toList _nontsIaroundDep
)
_mergeDep =
(
toList _nontsImergeDep
)
_info =
(
let def [] = 1
def (v:vs) = v
in Info { tdsToTdp = Array.array (0,_nontsIacount1) _tdsToTdp
, tdpToTds = Array.array (0,_nontsIvcount1) _tdpToTds
, attrTable = _attrTable
, ruleTable = _ruleTable
, lmh = toList _nontsIaranges
, nonts = _nontsInonts
, wraps = wrappers_
}
)
(_cInterfaceMap,_cVisitsMap,_cyclesErrors) =
(
case computeSequential _info _directDep (_instDep ++ _aroundDep ++ _mergeDep ) of
CycleFree cim cvm -> ( cim
, cvm
, []
)
LocalCycle errs -> ( error "No interfaces for AG with local cycles"
, error "No visit sub-sequences for AG with local cycles"
, map (localCycleErr _ruleTable (visit _lhsIoptions)) errs
)
InstCycle errs -> ( error "No interfaces for AG with cycles through insts"
, error "No visit sub-sequences for AG with cycles through insts"
, map (instCycleErr _ruleTable (visit _lhsIoptions)) errs
)
DirectCycle errs -> ( error "No interfaces for AG with direct cycles"
, error "No visit sub-sequences for AG with direct cycles"
, directCycleErrs _attrTable _ruleTable (visit _lhsIoptions) errs
)
InducedCycle cim errs -> ( cim
, error "No visit sub-sequences for AG with induced cycles"
, inducedCycleErrs _attrTable _ruleTable cim errs
)
)
_lhsOerrors =
(
(if withCycle _lhsIoptions then Seq.fromList _cyclesErrors else Seq.empty)
Seq.>< _nontsIerrors
)
_lhsOoutput =
(
CGrammar typeSyns_ derivings_ wrappers_ _nontsIcNonterminals pragmas_ paramMap_ contextMap_ quantMap_ _aroundMap _mergeMap _o_dovisit
)
_aroundMap =
(
Map.map (Map.map Map.keysSet) aroundsMap_
)
_mergeMap =
(
Map.map (Map.map (Map.map (\(nt,srcs,_) -> (nt,srcs)))) mergeMap_
)
_nontsOallnts =
(
map fst (_nontsInonts)
)
_nontsOinhMap =
(
_nontsIinhMap'
)
_nontsOsynMap =
(
_nontsIsynMap'
)
_lhsOnAutoRules =
(
_nontsInAutoRules
)
_lhsOnExplicitRules =
(
_nontsInExplicitRules
)
_nontsOcInterfaceMap =
(
_cInterfaceMap
)
_nontsOcVisitsMap =
(
_cVisitsMap
)
_nontsOmergeMap =
(
_mergeMap
)
_nontsOo_dovisit =
(
_o_dovisit
)
( _nontsIacount,_nontsIadditionalDep,_nontsIaranges,_nontsIaroundDep,_nontsIcNonterminals,_nontsIdirectDep,_nontsIerrors,_nontsIinhMap',_nontsIinstDep,_nontsImergeDep,_nontsInAutoRules,_nontsInExplicitRules,_nontsInonts,_nontsIntattrs,_nontsIrules,_nontsIsynMap',_nontsIvcount) =
nonts_ _nontsOacount _nontsOallnts _nontsOaroundMap _nontsOcInterfaceMap _nontsOcVisitsMap _nontsOinhMap _nontsOmanualAttrDepMap _nontsOmergeMap _nontsOo_case _nontsOo_cata _nontsOo_data _nontsOo_dovisit _nontsOo_newtypes _nontsOo_rename _nontsOo_sem _nontsOo_sig _nontsOo_unbox _nontsOo_wantvisit _nontsOprefix _nontsOsynMap _nontsOvcount
in ( _lhsOerrors,_lhsOnAutoRules,_lhsOnExplicitRules,_lhsOoutput))))
sem_Nonterminal :: Nonterminal ->
T_Nonterminal
sem_Nonterminal (Nonterminal _nt _params _inh _syn _prods) =
(sem_Nonterminal_Nonterminal _nt _params _inh _syn (sem_Productions _prods))
newtype T_Nonterminal = T_Nonterminal (Int ->
([Identifier]) ->
(Map NontermIdent (Map ConstructorIdent (Map Identifier [Expression]))) ->
CInterfaceMap ->
CVisitsMap ->
(Map Identifier Attributes) ->
AttrOrderMap ->
(Map NontermIdent (Map ConstructorIdent (Map Identifier (Identifier,[Identifier])))) ->
Bool ->
Bool ->
Bool ->
Bool ->
Bool ->
Bool ->
Bool ->
Bool ->
Bool ->
Bool ->
String ->
(Map Identifier Attributes) ->
Int ->
( Int,(Seq Edge),(Seq (Int,Int,Int)),(Seq Edge),CNonterminal,(Seq Edge),(Seq Error),(Map Identifier Attributes),(Seq Edge),(Seq Edge),Int,Int,([(NontermIdent,[ConstructorIdent])]),(Seq (Vertex,NTAttr)),(Seq (Vertex,CRule)),(Map Identifier Attributes),Int))
data Inh_Nonterminal = Inh_Nonterminal {acount_Inh_Nonterminal :: !(Int),allnts_Inh_Nonterminal :: !(([Identifier])),aroundMap_Inh_Nonterminal :: !((Map NontermIdent (Map ConstructorIdent (Map Identifier [Expression])))),cInterfaceMap_Inh_Nonterminal :: !(CInterfaceMap),cVisitsMap_Inh_Nonterminal :: !(CVisitsMap),inhMap_Inh_Nonterminal :: !((Map Identifier Attributes)),manualAttrDepMap_Inh_Nonterminal :: !(AttrOrderMap),mergeMap_Inh_Nonterminal :: !((Map NontermIdent (Map ConstructorIdent (Map Identifier (Identifier,[Identifier]))))),o_case_Inh_Nonterminal :: !(Bool),o_cata_Inh_Nonterminal :: !(Bool),o_data_Inh_Nonterminal :: !(Bool),o_dovisit_Inh_Nonterminal :: !(Bool),o_newtypes_Inh_Nonterminal :: !(Bool),o_rename_Inh_Nonterminal :: !(Bool),o_sem_Inh_Nonterminal :: !(Bool),o_sig_Inh_Nonterminal :: !(Bool),o_unbox_Inh_Nonterminal :: !(Bool),o_wantvisit_Inh_Nonterminal :: !(Bool),prefix_Inh_Nonterminal :: !(String),synMap_Inh_Nonterminal :: !((Map Identifier Attributes)),vcount_Inh_Nonterminal :: !(Int)}
data Syn_Nonterminal = Syn_Nonterminal {acount_Syn_Nonterminal :: !(Int),additionalDep_Syn_Nonterminal :: !((Seq Edge)),aranges_Syn_Nonterminal :: !((Seq (Int,Int,Int))),aroundDep_Syn_Nonterminal :: !((Seq Edge)),cNonterminal_Syn_Nonterminal :: !(CNonterminal),directDep_Syn_Nonterminal :: !((Seq Edge)),errors_Syn_Nonterminal :: !((Seq Error)),inhMap'_Syn_Nonterminal :: !((Map Identifier Attributes)),instDep_Syn_Nonterminal :: !((Seq Edge)),mergeDep_Syn_Nonterminal :: !((Seq Edge)),nAutoRules_Syn_Nonterminal :: !(Int),nExplicitRules_Syn_Nonterminal :: !(Int),nonts_Syn_Nonterminal :: !(([(NontermIdent,[ConstructorIdent])])),ntattrs_Syn_Nonterminal :: !((Seq (Vertex,NTAttr))),rules_Syn_Nonterminal :: !((Seq (Vertex,CRule))),synMap'_Syn_Nonterminal :: !((Map Identifier Attributes)),vcount_Syn_Nonterminal :: !(Int)}
wrap_Nonterminal :: T_Nonterminal ->
Inh_Nonterminal ->
Syn_Nonterminal
wrap_Nonterminal (T_Nonterminal sem) (Inh_Nonterminal _lhsIacount _lhsIallnts _lhsIaroundMap _lhsIcInterfaceMap _lhsIcVisitsMap _lhsIinhMap _lhsImanualAttrDepMap _lhsImergeMap _lhsIo_case _lhsIo_cata _lhsIo_data _lhsIo_dovisit _lhsIo_newtypes _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_unbox _lhsIo_wantvisit _lhsIprefix _lhsIsynMap _lhsIvcount) =
(let ( _lhsOacount,_lhsOadditionalDep,_lhsOaranges,_lhsOaroundDep,_lhsOcNonterminal,_lhsOdirectDep,_lhsOerrors,_lhsOinhMap',_lhsOinstDep,_lhsOmergeDep,_lhsOnAutoRules,_lhsOnExplicitRules,_lhsOnonts,_lhsOntattrs,_lhsOrules,_lhsOsynMap',_lhsOvcount) = sem _lhsIacount _lhsIallnts _lhsIaroundMap _lhsIcInterfaceMap _lhsIcVisitsMap _lhsIinhMap _lhsImanualAttrDepMap _lhsImergeMap _lhsIo_case _lhsIo_cata _lhsIo_data _lhsIo_dovisit _lhsIo_newtypes _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_unbox _lhsIo_wantvisit _lhsIprefix _lhsIsynMap _lhsIvcount
in (Syn_Nonterminal _lhsOacount _lhsOadditionalDep _lhsOaranges _lhsOaroundDep _lhsOcNonterminal _lhsOdirectDep _lhsOerrors _lhsOinhMap' _lhsOinstDep _lhsOmergeDep _lhsOnAutoRules _lhsOnExplicitRules _lhsOnonts _lhsOntattrs _lhsOrules _lhsOsynMap' _lhsOvcount))
sem_Nonterminal_Nonterminal :: NontermIdent ->
([Identifier]) ->
Attributes ->
Attributes ->
T_Productions ->
T_Nonterminal
sem_Nonterminal_Nonterminal nt_ params_ inh_ syn_ (T_Productions prods_) =
(T_Nonterminal (\ _lhsIacount
_lhsIallnts
_lhsIaroundMap
_lhsIcInterfaceMap
_lhsIcVisitsMap
_lhsIinhMap
_lhsImanualAttrDepMap
_lhsImergeMap
_lhsIo_case
_lhsIo_cata
_lhsIo_data
_lhsIo_dovisit
_lhsIo_newtypes
_lhsIo_rename
_lhsIo_sem
_lhsIo_sig
_lhsIo_unbox
_lhsIo_wantvisit
_lhsIprefix
_lhsIsynMap
_lhsIvcount ->
(let _prodsOnt :: Identifier
_prodsOinh :: Attributes
_prodsOsyn :: Attributes
_lhsOntattrs :: (Seq (Vertex,NTAttr))
_lhsOacount :: Int
_lhsOaranges :: (Seq (Int,Int,Int))
_lhsOnonts :: ([(NontermIdent,[ConstructorIdent])])
_lhsOcNonterminal :: CNonterminal
_lhsOinhMap' :: (Map Identifier Attributes)
_lhsOsynMap' :: (Map Identifier Attributes)
_lhsOadditionalDep :: (Seq Edge)
_lhsOaroundDep :: (Seq Edge)
_lhsOdirectDep :: (Seq Edge)
_lhsOerrors :: (Seq Error)
_lhsOinstDep :: (Seq Edge)
_lhsOmergeDep :: (Seq Edge)
_lhsOnAutoRules :: Int
_lhsOnExplicitRules :: Int
_lhsOrules :: (Seq (Vertex,CRule))
_lhsOvcount :: Int
_prodsOallnts :: ([Identifier])
_prodsOaroundMap :: (Map ConstructorIdent (Map Identifier [Expression]))
_prodsOcVisitsMap :: CVisitsMap
_prodsOinhMap :: (Map Identifier Attributes)
_prodsOmanualAttrDepMap :: AttrOrderMap
_prodsOmergeMap :: (Map ConstructorIdent (Map Identifier (Identifier,[Identifier])))
_prodsOo_case :: Bool
_prodsOo_cata :: Bool
_prodsOo_dovisit :: Bool
_prodsOo_newtypes :: Bool
_prodsOo_rename :: Bool
_prodsOo_sem :: Bool
_prodsOo_sig :: Bool
_prodsOo_unbox :: Bool
_prodsOo_wantvisit :: Bool
_prodsOprefix :: String
_prodsOsynMap :: (Map Identifier Attributes)
_prodsOvcount :: Int
_prodsIadditionalDep :: (Seq Edge)
_prodsIaroundDep :: (Seq Edge)
_prodsIcProductions :: CProductions
_prodsIcons :: ([ConstructorIdent])
_prodsIdirectDep :: (Seq Edge)
_prodsIerrors :: (Seq Error)
_prodsIinstDep :: (Seq Edge)
_prodsImergeDep :: (Seq Edge)
_prodsInAutoRules :: Int
_prodsInExplicitRules :: Int
_prodsIrules :: (Seq (Vertex,CRule))
_prodsIvcount :: Int
_prodsOnt =
(
nt_
)
_prodsOinh =
(
inh_
)
_prodsOsyn =
(
syn_
)
_mergeMap =
(
Map.findWithDefault Map.empty nt_ _lhsImergeMap
)
_aroundMap =
(
Map.findWithDefault Map.empty nt_ _lhsIaroundMap
)
_ntattrs =
(
[ NTAInh nt_ inh tp | (inh,tp) <- Map.assocs inh_ ]
++ [NTASyn nt_ syn tp | (syn,tp) <- Map.assocs syn_ ]
)
_lhsOntattrs =
(
Seq.fromList (zip [_lhsIacount ..] _ntattrs)
)
_lhsOacount =
(
_lhsIacount + Map.size inh_ + Map.size syn_
)
_lhsOaranges =
(
Seq.singleton
(_lhsIacount
,_lhsIacount + Map.size inh_
,_lhsIacount + Map.size syn_ + Map.size inh_ 1)
)
_lhsOnonts =
(
[(nt_,_prodsIcons)]
)
_cInter =
(
if _lhsIo_dovisit
then findWithErr1 "Nonterminal.cInter" nt_ _lhsIcInterfaceMap
else CInterface [CSegment inh_ syn_]
)
_lhsOcNonterminal =
(
CNonterminal nt_ params_ inh_ syn_ _prodsIcProductions _cInter
)
_lhsOinhMap' =
(
Map.singleton nt_ inh_
)
_lhsOsynMap' =
(
Map.singleton nt_ syn_
)
_lhsOadditionalDep =
(
_prodsIadditionalDep
)
_lhsOaroundDep =
(
_prodsIaroundDep
)
_lhsOdirectDep =
(
_prodsIdirectDep
)
_lhsOerrors =
(
_prodsIerrors
)
_lhsOinstDep =
(
_prodsIinstDep
)
_lhsOmergeDep =
(
_prodsImergeDep
)
_lhsOnAutoRules =
(
_prodsInAutoRules
)
_lhsOnExplicitRules =
(
_prodsInExplicitRules
)
_lhsOrules =
(
_prodsIrules
)
_lhsOvcount =
(
_prodsIvcount
)
_prodsOallnts =
(
_lhsIallnts
)
_prodsOaroundMap =
(
_aroundMap
)
_prodsOcVisitsMap =
(
_lhsIcVisitsMap
)
_prodsOinhMap =
(
_lhsIinhMap
)
_prodsOmanualAttrDepMap =
(
_lhsImanualAttrDepMap
)
_prodsOmergeMap =
(
_mergeMap
)
_prodsOo_case =
(
_lhsIo_case
)
_prodsOo_cata =
(
_lhsIo_cata
)
_prodsOo_dovisit =
(
_lhsIo_dovisit
)
_prodsOo_newtypes =
(
_lhsIo_newtypes
)
_prodsOo_rename =
(
_lhsIo_rename
)
_prodsOo_sem =
(
_lhsIo_sem
)
_prodsOo_sig =
(
_lhsIo_sig
)
_prodsOo_unbox =
(
_lhsIo_unbox
)
_prodsOo_wantvisit =
(
_lhsIo_wantvisit
)
_prodsOprefix =
(
_lhsIprefix
)
_prodsOsynMap =
(
_lhsIsynMap
)
_prodsOvcount =
(
_lhsIvcount
)
( _prodsIadditionalDep,_prodsIaroundDep,_prodsIcProductions,_prodsIcons,_prodsIdirectDep,_prodsIerrors,_prodsIinstDep,_prodsImergeDep,_prodsInAutoRules,_prodsInExplicitRules,_prodsIrules,_prodsIvcount) =
prods_ _prodsOallnts _prodsOaroundMap _prodsOcVisitsMap _prodsOinh _prodsOinhMap _prodsOmanualAttrDepMap _prodsOmergeMap _prodsOnt _prodsOo_case _prodsOo_cata _prodsOo_dovisit _prodsOo_newtypes _prodsOo_rename _prodsOo_sem _prodsOo_sig _prodsOo_unbox _prodsOo_wantvisit _prodsOprefix _prodsOsyn _prodsOsynMap _prodsOvcount
in ( _lhsOacount,_lhsOadditionalDep,_lhsOaranges,_lhsOaroundDep,_lhsOcNonterminal,_lhsOdirectDep,_lhsOerrors,_lhsOinhMap',_lhsOinstDep,_lhsOmergeDep,_lhsOnAutoRules,_lhsOnExplicitRules,_lhsOnonts,_lhsOntattrs,_lhsOrules,_lhsOsynMap',_lhsOvcount))))
sem_Nonterminals :: Nonterminals ->
T_Nonterminals
sem_Nonterminals list =
(Prelude.foldr sem_Nonterminals_Cons sem_Nonterminals_Nil (Prelude.map sem_Nonterminal list))
newtype T_Nonterminals = T_Nonterminals (Int ->
([Identifier]) ->
(Map NontermIdent (Map ConstructorIdent (Map Identifier [Expression]))) ->
CInterfaceMap ->
CVisitsMap ->
(Map Identifier Attributes) ->
AttrOrderMap ->
(Map NontermIdent (Map ConstructorIdent (Map Identifier (Identifier,[Identifier])))) ->
Bool ->
Bool ->
Bool ->
Bool ->
Bool ->
Bool ->
Bool ->
Bool ->
Bool ->
Bool ->
String ->
(Map Identifier Attributes) ->
Int ->
( Int,(Seq Edge),(Seq (Int,Int,Int)),(Seq Edge),CNonterminals,(Seq Edge),(Seq Error),(Map Identifier Attributes),(Seq Edge),(Seq Edge),Int,Int,([(NontermIdent,[ConstructorIdent])]),(Seq (Vertex,NTAttr)),(Seq (Vertex,CRule)),(Map Identifier Attributes),Int))
data Inh_Nonterminals = Inh_Nonterminals {acount_Inh_Nonterminals :: !(Int),allnts_Inh_Nonterminals :: !(([Identifier])),aroundMap_Inh_Nonterminals :: !((Map NontermIdent (Map ConstructorIdent (Map Identifier [Expression])))),cInterfaceMap_Inh_Nonterminals :: !(CInterfaceMap),cVisitsMap_Inh_Nonterminals :: !(CVisitsMap),inhMap_Inh_Nonterminals :: !((Map Identifier Attributes)),manualAttrDepMap_Inh_Nonterminals :: !(AttrOrderMap),mergeMap_Inh_Nonterminals :: !((Map NontermIdent (Map ConstructorIdent (Map Identifier (Identifier,[Identifier]))))),o_case_Inh_Nonterminals :: !(Bool),o_cata_Inh_Nonterminals :: !(Bool),o_data_Inh_Nonterminals :: !(Bool),o_dovisit_Inh_Nonterminals :: !(Bool),o_newtypes_Inh_Nonterminals :: !(Bool),o_rename_Inh_Nonterminals :: !(Bool),o_sem_Inh_Nonterminals :: !(Bool),o_sig_Inh_Nonterminals :: !(Bool),o_unbox_Inh_Nonterminals :: !(Bool),o_wantvisit_Inh_Nonterminals :: !(Bool),prefix_Inh_Nonterminals :: !(String),synMap_Inh_Nonterminals :: !((Map Identifier Attributes)),vcount_Inh_Nonterminals :: !(Int)}
data Syn_Nonterminals = Syn_Nonterminals {acount_Syn_Nonterminals :: !(Int),additionalDep_Syn_Nonterminals :: !((Seq Edge)),aranges_Syn_Nonterminals :: !((Seq (Int,Int,Int))),aroundDep_Syn_Nonterminals :: !((Seq Edge)),cNonterminals_Syn_Nonterminals :: !(CNonterminals),directDep_Syn_Nonterminals :: !((Seq Edge)),errors_Syn_Nonterminals :: !((Seq Error)),inhMap'_Syn_Nonterminals :: !((Map Identifier Attributes)),instDep_Syn_Nonterminals :: !((Seq Edge)),mergeDep_Syn_Nonterminals :: !((Seq Edge)),nAutoRules_Syn_Nonterminals :: !(Int),nExplicitRules_Syn_Nonterminals :: !(Int),nonts_Syn_Nonterminals :: !(([(NontermIdent,[ConstructorIdent])])),ntattrs_Syn_Nonterminals :: !((Seq (Vertex,NTAttr))),rules_Syn_Nonterminals :: !((Seq (Vertex,CRule))),synMap'_Syn_Nonterminals :: !((Map Identifier Attributes)),vcount_Syn_Nonterminals :: !(Int)}
wrap_Nonterminals :: T_Nonterminals ->
Inh_Nonterminals ->
Syn_Nonterminals
wrap_Nonterminals (T_Nonterminals sem) (Inh_Nonterminals _lhsIacount _lhsIallnts _lhsIaroundMap _lhsIcInterfaceMap _lhsIcVisitsMap _lhsIinhMap _lhsImanualAttrDepMap _lhsImergeMap _lhsIo_case _lhsIo_cata _lhsIo_data _lhsIo_dovisit _lhsIo_newtypes _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_unbox _lhsIo_wantvisit _lhsIprefix _lhsIsynMap _lhsIvcount) =
(let ( _lhsOacount,_lhsOadditionalDep,_lhsOaranges,_lhsOaroundDep,_lhsOcNonterminals,_lhsOdirectDep,_lhsOerrors,_lhsOinhMap',_lhsOinstDep,_lhsOmergeDep,_lhsOnAutoRules,_lhsOnExplicitRules,_lhsOnonts,_lhsOntattrs,_lhsOrules,_lhsOsynMap',_lhsOvcount) = sem _lhsIacount _lhsIallnts _lhsIaroundMap _lhsIcInterfaceMap _lhsIcVisitsMap _lhsIinhMap _lhsImanualAttrDepMap _lhsImergeMap _lhsIo_case _lhsIo_cata _lhsIo_data _lhsIo_dovisit _lhsIo_newtypes _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_unbox _lhsIo_wantvisit _lhsIprefix _lhsIsynMap _lhsIvcount
in (Syn_Nonterminals _lhsOacount _lhsOadditionalDep _lhsOaranges _lhsOaroundDep _lhsOcNonterminals _lhsOdirectDep _lhsOerrors _lhsOinhMap' _lhsOinstDep _lhsOmergeDep _lhsOnAutoRules _lhsOnExplicitRules _lhsOnonts _lhsOntattrs _lhsOrules _lhsOsynMap' _lhsOvcount))
sem_Nonterminals_Cons :: T_Nonterminal ->
T_Nonterminals ->
T_Nonterminals
sem_Nonterminals_Cons (T_Nonterminal hd_) (T_Nonterminals tl_) =
(T_Nonterminals (\ _lhsIacount
_lhsIallnts
_lhsIaroundMap
_lhsIcInterfaceMap
_lhsIcVisitsMap
_lhsIinhMap
_lhsImanualAttrDepMap
_lhsImergeMap
_lhsIo_case
_lhsIo_cata
_lhsIo_data
_lhsIo_dovisit
_lhsIo_newtypes
_lhsIo_rename
_lhsIo_sem
_lhsIo_sig
_lhsIo_unbox
_lhsIo_wantvisit
_lhsIprefix
_lhsIsynMap
_lhsIvcount ->
(let _lhsOcNonterminals :: CNonterminals
_lhsOadditionalDep :: (Seq Edge)
_lhsOaranges :: (Seq (Int,Int,Int))
_lhsOaroundDep :: (Seq Edge)
_lhsOdirectDep :: (Seq Edge)
_lhsOerrors :: (Seq Error)
_lhsOinhMap' :: (Map Identifier Attributes)
_lhsOinstDep :: (Seq Edge)
_lhsOmergeDep :: (Seq Edge)
_lhsOnAutoRules :: Int
_lhsOnExplicitRules :: Int
_lhsOnonts :: ([(NontermIdent,[ConstructorIdent])])
_lhsOntattrs :: (Seq (Vertex,NTAttr))
_lhsOrules :: (Seq (Vertex,CRule))
_lhsOsynMap' :: (Map Identifier Attributes)
_lhsOacount :: Int
_lhsOvcount :: Int
_hdOacount :: Int
_hdOallnts :: ([Identifier])
_hdOaroundMap :: (Map NontermIdent (Map ConstructorIdent (Map Identifier [Expression])))
_hdOcInterfaceMap :: CInterfaceMap
_hdOcVisitsMap :: CVisitsMap
_hdOinhMap :: (Map Identifier Attributes)
_hdOmanualAttrDepMap :: AttrOrderMap
_hdOmergeMap :: (Map NontermIdent (Map ConstructorIdent (Map Identifier (Identifier,[Identifier]))))
_hdOo_case :: Bool
_hdOo_cata :: Bool
_hdOo_data :: Bool
_hdOo_dovisit :: Bool
_hdOo_newtypes :: Bool
_hdOo_rename :: Bool
_hdOo_sem :: Bool
_hdOo_sig :: Bool
_hdOo_unbox :: Bool
_hdOo_wantvisit :: Bool
_hdOprefix :: String
_hdOsynMap :: (Map Identifier Attributes)
_hdOvcount :: Int
_tlOacount :: Int
_tlOallnts :: ([Identifier])
_tlOaroundMap :: (Map NontermIdent (Map ConstructorIdent (Map Identifier [Expression])))
_tlOcInterfaceMap :: CInterfaceMap
_tlOcVisitsMap :: CVisitsMap
_tlOinhMap :: (Map Identifier Attributes)
_tlOmanualAttrDepMap :: AttrOrderMap
_tlOmergeMap :: (Map NontermIdent (Map ConstructorIdent (Map Identifier (Identifier,[Identifier]))))
_tlOo_case :: Bool
_tlOo_cata :: Bool
_tlOo_data :: Bool
_tlOo_dovisit :: Bool
_tlOo_newtypes :: Bool
_tlOo_rename :: Bool
_tlOo_sem :: Bool
_tlOo_sig :: Bool
_tlOo_unbox :: Bool
_tlOo_wantvisit :: Bool
_tlOprefix :: String
_tlOsynMap :: (Map Identifier Attributes)
_tlOvcount :: Int
_hdIacount :: Int
_hdIadditionalDep :: (Seq Edge)
_hdIaranges :: (Seq (Int,Int,Int))
_hdIaroundDep :: (Seq Edge)
_hdIcNonterminal :: CNonterminal
_hdIdirectDep :: (Seq Edge)
_hdIerrors :: (Seq Error)
_hdIinhMap' :: (Map Identifier Attributes)
_hdIinstDep :: (Seq Edge)
_hdImergeDep :: (Seq Edge)
_hdInAutoRules :: Int
_hdInExplicitRules :: Int
_hdInonts :: ([(NontermIdent,[ConstructorIdent])])
_hdIntattrs :: (Seq (Vertex,NTAttr))
_hdIrules :: (Seq (Vertex,CRule))
_hdIsynMap' :: (Map Identifier Attributes)
_hdIvcount :: Int
_tlIacount :: Int
_tlIadditionalDep :: (Seq Edge)
_tlIaranges :: (Seq (Int,Int,Int))
_tlIaroundDep :: (Seq Edge)
_tlIcNonterminals :: CNonterminals
_tlIdirectDep :: (Seq Edge)
_tlIerrors :: (Seq Error)
_tlIinhMap' :: (Map Identifier Attributes)
_tlIinstDep :: (Seq Edge)
_tlImergeDep :: (Seq Edge)
_tlInAutoRules :: Int
_tlInExplicitRules :: Int
_tlInonts :: ([(NontermIdent,[ConstructorIdent])])
_tlIntattrs :: (Seq (Vertex,NTAttr))
_tlIrules :: (Seq (Vertex,CRule))
_tlIsynMap' :: (Map Identifier Attributes)
_tlIvcount :: Int
_lhsOcNonterminals =
(
_hdIcNonterminal : _tlIcNonterminals
)
_lhsOadditionalDep =
(
_hdIadditionalDep Seq.>< _tlIadditionalDep
)
_lhsOaranges =
(
_hdIaranges Seq.>< _tlIaranges
)
_lhsOaroundDep =
(
_hdIaroundDep Seq.>< _tlIaroundDep
)
_lhsOdirectDep =
(
_hdIdirectDep Seq.>< _tlIdirectDep
)
_lhsOerrors =
(
_hdIerrors Seq.>< _tlIerrors
)
_lhsOinhMap' =
(
_hdIinhMap' `Map.union` _tlIinhMap'
)
_lhsOinstDep =
(
_hdIinstDep Seq.>< _tlIinstDep
)
_lhsOmergeDep =
(
_hdImergeDep Seq.>< _tlImergeDep
)
_lhsOnAutoRules =
(
_hdInAutoRules + _tlInAutoRules
)
_lhsOnExplicitRules =
(
_hdInExplicitRules + _tlInExplicitRules
)
_lhsOnonts =
(
_hdInonts ++ _tlInonts
)
_lhsOntattrs =
(
_hdIntattrs Seq.>< _tlIntattrs
)
_lhsOrules =
(
_hdIrules Seq.>< _tlIrules
)
_lhsOsynMap' =
(
_hdIsynMap' `Map.union` _tlIsynMap'
)
_lhsOacount =
(
_tlIacount
)
_lhsOvcount =
(
_tlIvcount
)
_hdOacount =
(
_lhsIacount
)
_hdOallnts =
(
_lhsIallnts
)
_hdOaroundMap =
(
_lhsIaroundMap
)
_hdOcInterfaceMap =
(
_lhsIcInterfaceMap
)
_hdOcVisitsMap =
(
_lhsIcVisitsMap
)
_hdOinhMap =
(
_lhsIinhMap
)
_hdOmanualAttrDepMap =
(
_lhsImanualAttrDepMap
)
_hdOmergeMap =
(
_lhsImergeMap
)
_hdOo_case =
(
_lhsIo_case
)
_hdOo_cata =
(
_lhsIo_cata
)
_hdOo_data =
(
_lhsIo_data
)
_hdOo_dovisit =
(
_lhsIo_dovisit
)
_hdOo_newtypes =
(
_lhsIo_newtypes
)
_hdOo_rename =
(
_lhsIo_rename
)
_hdOo_sem =
(
_lhsIo_sem
)
_hdOo_sig =
(
_lhsIo_sig
)
_hdOo_unbox =
(
_lhsIo_unbox
)
_hdOo_wantvisit =
(
_lhsIo_wantvisit
)
_hdOprefix =
(
_lhsIprefix
)
_hdOsynMap =
(
_lhsIsynMap
)
_hdOvcount =
(
_lhsIvcount
)
_tlOacount =
(
_hdIacount
)
_tlOallnts =
(
_lhsIallnts
)
_tlOaroundMap =
(
_lhsIaroundMap
)
_tlOcInterfaceMap =
(
_lhsIcInterfaceMap
)
_tlOcVisitsMap =
(
_lhsIcVisitsMap
)
_tlOinhMap =
(
_lhsIinhMap
)
_tlOmanualAttrDepMap =
(
_lhsImanualAttrDepMap
)
_tlOmergeMap =
(
_lhsImergeMap
)
_tlOo_case =
(
_lhsIo_case
)
_tlOo_cata =
(
_lhsIo_cata
)
_tlOo_data =
(
_lhsIo_data
)
_tlOo_dovisit =
(
_lhsIo_dovisit
)
_tlOo_newtypes =
(
_lhsIo_newtypes
)
_tlOo_rename =
(
_lhsIo_rename
)
_tlOo_sem =
(
_lhsIo_sem
)
_tlOo_sig =
(
_lhsIo_sig
)
_tlOo_unbox =
(
_lhsIo_unbox
)
_tlOo_wantvisit =
(
_lhsIo_wantvisit
)
_tlOprefix =
(
_lhsIprefix
)
_tlOsynMap =
(
_lhsIsynMap
)
_tlOvcount =
(
_hdIvcount
)
( _hdIacount,_hdIadditionalDep,_hdIaranges,_hdIaroundDep,_hdIcNonterminal,_hdIdirectDep,_hdIerrors,_hdIinhMap',_hdIinstDep,_hdImergeDep,_hdInAutoRules,_hdInExplicitRules,_hdInonts,_hdIntattrs,_hdIrules,_hdIsynMap',_hdIvcount) =
hd_ _hdOacount _hdOallnts _hdOaroundMap _hdOcInterfaceMap _hdOcVisitsMap _hdOinhMap _hdOmanualAttrDepMap _hdOmergeMap _hdOo_case _hdOo_cata _hdOo_data _hdOo_dovisit _hdOo_newtypes _hdOo_rename _hdOo_sem _hdOo_sig _hdOo_unbox _hdOo_wantvisit _hdOprefix _hdOsynMap _hdOvcount
( _tlIacount,_tlIadditionalDep,_tlIaranges,_tlIaroundDep,_tlIcNonterminals,_tlIdirectDep,_tlIerrors,_tlIinhMap',_tlIinstDep,_tlImergeDep,_tlInAutoRules,_tlInExplicitRules,_tlInonts,_tlIntattrs,_tlIrules,_tlIsynMap',_tlIvcount) =
tl_ _tlOacount _tlOallnts _tlOaroundMap _tlOcInterfaceMap _tlOcVisitsMap _tlOinhMap _tlOmanualAttrDepMap _tlOmergeMap _tlOo_case _tlOo_cata _tlOo_data _tlOo_dovisit _tlOo_newtypes _tlOo_rename _tlOo_sem _tlOo_sig _tlOo_unbox _tlOo_wantvisit _tlOprefix _tlOsynMap _tlOvcount
in ( _lhsOacount,_lhsOadditionalDep,_lhsOaranges,_lhsOaroundDep,_lhsOcNonterminals,_lhsOdirectDep,_lhsOerrors,_lhsOinhMap',_lhsOinstDep,_lhsOmergeDep,_lhsOnAutoRules,_lhsOnExplicitRules,_lhsOnonts,_lhsOntattrs,_lhsOrules,_lhsOsynMap',_lhsOvcount))))
sem_Nonterminals_Nil :: T_Nonterminals
sem_Nonterminals_Nil =
(T_Nonterminals (\ _lhsIacount
_lhsIallnts
_lhsIaroundMap
_lhsIcInterfaceMap
_lhsIcVisitsMap
_lhsIinhMap
_lhsImanualAttrDepMap
_lhsImergeMap
_lhsIo_case
_lhsIo_cata
_lhsIo_data
_lhsIo_dovisit
_lhsIo_newtypes
_lhsIo_rename
_lhsIo_sem
_lhsIo_sig
_lhsIo_unbox
_lhsIo_wantvisit
_lhsIprefix
_lhsIsynMap
_lhsIvcount ->
(let _lhsOcNonterminals :: CNonterminals
_lhsOadditionalDep :: (Seq Edge)
_lhsOaranges :: (Seq (Int,Int,Int))
_lhsOaroundDep :: (Seq Edge)
_lhsOdirectDep :: (Seq Edge)
_lhsOerrors :: (Seq Error)
_lhsOinhMap' :: (Map Identifier Attributes)
_lhsOinstDep :: (Seq Edge)
_lhsOmergeDep :: (Seq Edge)
_lhsOnAutoRules :: Int
_lhsOnExplicitRules :: Int
_lhsOnonts :: ([(NontermIdent,[ConstructorIdent])])
_lhsOntattrs :: (Seq (Vertex,NTAttr))
_lhsOrules :: (Seq (Vertex,CRule))
_lhsOsynMap' :: (Map Identifier Attributes)
_lhsOacount :: Int
_lhsOvcount :: Int
_lhsOcNonterminals =
(
[]
)
_lhsOadditionalDep =
(
Seq.empty
)
_lhsOaranges =
(
Seq.empty
)
_lhsOaroundDep =
(
Seq.empty
)
_lhsOdirectDep =
(
Seq.empty
)
_lhsOerrors =
(
Seq.empty
)
_lhsOinhMap' =
(
Map.empty
)
_lhsOinstDep =
(
Seq.empty
)
_lhsOmergeDep =
(
Seq.empty
)
_lhsOnAutoRules =
(
0
)
_lhsOnExplicitRules =
(
0
)
_lhsOnonts =
(
[]
)
_lhsOntattrs =
(
Seq.empty
)
_lhsOrules =
(
Seq.empty
)
_lhsOsynMap' =
(
Map.empty
)
_lhsOacount =
(
_lhsIacount
)
_lhsOvcount =
(
_lhsIvcount
)
in ( _lhsOacount,_lhsOadditionalDep,_lhsOaranges,_lhsOaroundDep,_lhsOcNonterminals,_lhsOdirectDep,_lhsOerrors,_lhsOinhMap',_lhsOinstDep,_lhsOmergeDep,_lhsOnAutoRules,_lhsOnExplicitRules,_lhsOnonts,_lhsOntattrs,_lhsOrules,_lhsOsynMap',_lhsOvcount))))
sem_Pattern :: Pattern ->
T_Pattern
sem_Pattern (Alias _field _attr _pat) =
(sem_Pattern_Alias _field _attr (sem_Pattern _pat))
sem_Pattern (Constr _name _pats) =
(sem_Pattern_Constr _name (sem_Patterns _pats))
sem_Pattern (Irrefutable _pat) =
(sem_Pattern_Irrefutable (sem_Pattern _pat))
sem_Pattern (Product _pos _pats) =
(sem_Pattern_Product _pos (sem_Patterns _pats))
sem_Pattern (Underscore _pos) =
(sem_Pattern_Underscore _pos)
newtype T_Pattern = T_Pattern ((Map Identifier Type) ->
(Map AltAttr Vertex) ->
Identifier ->
Attributes ->
Identifier ->
Attributes ->
( Pattern,(Seq Error),([AltAttr]),([Identifier]),([Identifier]),([(Identifier,Identifier,Bool)])))
data Inh_Pattern = Inh_Pattern {allTypeSigs_Inh_Pattern :: !((Map Identifier Type)),altAttrs_Inh_Pattern :: !((Map AltAttr Vertex)),con_Inh_Pattern :: !(Identifier),inh_Inh_Pattern :: !(Attributes),nt_Inh_Pattern :: !(Identifier),syn_Inh_Pattern :: !(Attributes)}
data Syn_Pattern = Syn_Pattern {copy_Syn_Pattern :: !(Pattern),errors_Syn_Pattern :: !((Seq Error)),gathAltAttrs_Syn_Pattern :: !(([AltAttr])),instVars_Syn_Pattern :: !(([Identifier])),locVars_Syn_Pattern :: !(([Identifier])),patternAttrs_Syn_Pattern :: !(([(Identifier,Identifier,Bool)]))}
wrap_Pattern :: T_Pattern ->
Inh_Pattern ->
Syn_Pattern
wrap_Pattern (T_Pattern sem) (Inh_Pattern _lhsIallTypeSigs _lhsIaltAttrs _lhsIcon _lhsIinh _lhsInt _lhsIsyn) =
(let ( _lhsOcopy,_lhsOerrors,_lhsOgathAltAttrs,_lhsOinstVars,_lhsOlocVars,_lhsOpatternAttrs) = sem _lhsIallTypeSigs _lhsIaltAttrs _lhsIcon _lhsIinh _lhsInt _lhsIsyn
in (Syn_Pattern _lhsOcopy _lhsOerrors _lhsOgathAltAttrs _lhsOinstVars _lhsOlocVars _lhsOpatternAttrs))
sem_Pattern_Alias :: Identifier ->
Identifier ->
T_Pattern ->
T_Pattern
sem_Pattern_Alias field_ attr_ (T_Pattern pat_) =
(T_Pattern (\ _lhsIallTypeSigs
_lhsIaltAttrs
_lhsIcon
_lhsIinh
_lhsInt
_lhsIsyn ->
(let _lhsOgathAltAttrs :: ([AltAttr])
_lhsOpatternAttrs :: ([(Identifier,Identifier,Bool)])
_lhsOlocVars :: ([Identifier])
_lhsOinstVars :: ([Identifier])
_lhsOerrors :: (Seq Error)
_lhsOcopy :: Pattern
_patOallTypeSigs :: (Map Identifier Type)
_patOaltAttrs :: (Map AltAttr Vertex)
_patOcon :: Identifier
_patOinh :: Attributes
_patOnt :: Identifier
_patOsyn :: Attributes
_patIcopy :: Pattern
_patIerrors :: (Seq Error)
_patIgathAltAttrs :: ([AltAttr])
_patIinstVars :: ([Identifier])
_patIlocVars :: ([Identifier])
_patIpatternAttrs :: ([(Identifier,Identifier,Bool)])
_lhsOgathAltAttrs =
(
[AltAttr field_ attr_ (field_ == _LOC || field_ == _INST)]
)
_lhsOpatternAttrs =
(
[(field_,attr_,(field_ == _LOC || field_ == _INST))]
)
_lhsOlocVars =
(
if field_ == _LOC
then [attr_]
else []
)
_lhsOinstVars =
(
if field_ == _INST
then [attr_]
else []
)
_lhsOerrors =
(
_patIerrors
)
_copy =
(
Alias field_ attr_ _patIcopy
)
_lhsOcopy =
(
_copy
)
_patOallTypeSigs =
(
_lhsIallTypeSigs
)
_patOaltAttrs =
(
_lhsIaltAttrs
)
_patOcon =
(
_lhsIcon
)
_patOinh =
(
_lhsIinh
)
_patOnt =
(
_lhsInt
)
_patOsyn =
(
_lhsIsyn
)
( _patIcopy,_patIerrors,_patIgathAltAttrs,_patIinstVars,_patIlocVars,_patIpatternAttrs) =
pat_ _patOallTypeSigs _patOaltAttrs _patOcon _patOinh _patOnt _patOsyn
in ( _lhsOcopy,_lhsOerrors,_lhsOgathAltAttrs,_lhsOinstVars,_lhsOlocVars,_lhsOpatternAttrs))))
sem_Pattern_Constr :: ConstructorIdent ->
T_Patterns ->
T_Pattern
sem_Pattern_Constr name_ (T_Patterns pats_) =
(T_Pattern (\ _lhsIallTypeSigs
_lhsIaltAttrs
_lhsIcon
_lhsIinh
_lhsInt
_lhsIsyn ->
(let _lhsOerrors :: (Seq Error)
_lhsOgathAltAttrs :: ([AltAttr])
_lhsOinstVars :: ([Identifier])
_lhsOlocVars :: ([Identifier])
_lhsOpatternAttrs :: ([(Identifier,Identifier,Bool)])
_lhsOcopy :: Pattern
_patsOallTypeSigs :: (Map Identifier Type)
_patsOaltAttrs :: (Map AltAttr Vertex)
_patsOcon :: Identifier
_patsOinh :: Attributes
_patsOnt :: Identifier
_patsOsyn :: Attributes
_patsIcopy :: Patterns
_patsIerrors :: (Seq Error)
_patsIgathAltAttrs :: ([AltAttr])
_patsIinstVars :: ([Identifier])
_patsIlocVars :: ([Identifier])
_patsIpatternAttrs :: ([(Identifier,Identifier,Bool)])
_lhsOerrors =
(
_patsIerrors
)
_lhsOgathAltAttrs =
(
_patsIgathAltAttrs
)
_lhsOinstVars =
(
_patsIinstVars
)
_lhsOlocVars =
(
_patsIlocVars
)
_lhsOpatternAttrs =
(
_patsIpatternAttrs
)
_copy =
(
Constr name_ _patsIcopy
)
_lhsOcopy =
(
_copy
)
_patsOallTypeSigs =
(
_lhsIallTypeSigs
)
_patsOaltAttrs =
(
_lhsIaltAttrs
)
_patsOcon =
(
_lhsIcon
)
_patsOinh =
(
_lhsIinh
)
_patsOnt =
(
_lhsInt
)
_patsOsyn =
(
_lhsIsyn
)
( _patsIcopy,_patsIerrors,_patsIgathAltAttrs,_patsIinstVars,_patsIlocVars,_patsIpatternAttrs) =
pats_ _patsOallTypeSigs _patsOaltAttrs _patsOcon _patsOinh _patsOnt _patsOsyn
in ( _lhsOcopy,_lhsOerrors,_lhsOgathAltAttrs,_lhsOinstVars,_lhsOlocVars,_lhsOpatternAttrs))))
sem_Pattern_Irrefutable :: T_Pattern ->
T_Pattern
sem_Pattern_Irrefutable (T_Pattern pat_) =
(T_Pattern (\ _lhsIallTypeSigs
_lhsIaltAttrs
_lhsIcon
_lhsIinh
_lhsInt
_lhsIsyn ->
(let _lhsOerrors :: (Seq Error)
_lhsOgathAltAttrs :: ([AltAttr])
_lhsOinstVars :: ([Identifier])
_lhsOlocVars :: ([Identifier])
_lhsOpatternAttrs :: ([(Identifier,Identifier,Bool)])
_lhsOcopy :: Pattern
_patOallTypeSigs :: (Map Identifier Type)
_patOaltAttrs :: (Map AltAttr Vertex)
_patOcon :: Identifier
_patOinh :: Attributes
_patOnt :: Identifier
_patOsyn :: Attributes
_patIcopy :: Pattern
_patIerrors :: (Seq Error)
_patIgathAltAttrs :: ([AltAttr])
_patIinstVars :: ([Identifier])
_patIlocVars :: ([Identifier])
_patIpatternAttrs :: ([(Identifier,Identifier,Bool)])
_lhsOerrors =
(
_patIerrors
)
_lhsOgathAltAttrs =
(
_patIgathAltAttrs
)
_lhsOinstVars =
(
_patIinstVars
)
_lhsOlocVars =
(
_patIlocVars
)
_lhsOpatternAttrs =
(
_patIpatternAttrs
)
_copy =
(
Irrefutable _patIcopy
)
_lhsOcopy =
(
_copy
)
_patOallTypeSigs =
(
_lhsIallTypeSigs
)
_patOaltAttrs =
(
_lhsIaltAttrs
)
_patOcon =
(
_lhsIcon
)
_patOinh =
(
_lhsIinh
)
_patOnt =
(
_lhsInt
)
_patOsyn =
(
_lhsIsyn
)
( _patIcopy,_patIerrors,_patIgathAltAttrs,_patIinstVars,_patIlocVars,_patIpatternAttrs) =
pat_ _patOallTypeSigs _patOaltAttrs _patOcon _patOinh _patOnt _patOsyn
in ( _lhsOcopy,_lhsOerrors,_lhsOgathAltAttrs,_lhsOinstVars,_lhsOlocVars,_lhsOpatternAttrs))))
sem_Pattern_Product :: Pos ->
T_Patterns ->
T_Pattern
sem_Pattern_Product pos_ (T_Patterns pats_) =
(T_Pattern (\ _lhsIallTypeSigs
_lhsIaltAttrs
_lhsIcon
_lhsIinh
_lhsInt
_lhsIsyn ->
(let _lhsOerrors :: (Seq Error)
_lhsOgathAltAttrs :: ([AltAttr])
_lhsOinstVars :: ([Identifier])
_lhsOlocVars :: ([Identifier])
_lhsOpatternAttrs :: ([(Identifier,Identifier,Bool)])
_lhsOcopy :: Pattern
_patsOallTypeSigs :: (Map Identifier Type)
_patsOaltAttrs :: (Map AltAttr Vertex)
_patsOcon :: Identifier
_patsOinh :: Attributes
_patsOnt :: Identifier
_patsOsyn :: Attributes
_patsIcopy :: Patterns
_patsIerrors :: (Seq Error)
_patsIgathAltAttrs :: ([AltAttr])
_patsIinstVars :: ([Identifier])
_patsIlocVars :: ([Identifier])
_patsIpatternAttrs :: ([(Identifier,Identifier,Bool)])
_lhsOerrors =
(
_patsIerrors
)
_lhsOgathAltAttrs =
(
_patsIgathAltAttrs
)
_lhsOinstVars =
(
_patsIinstVars
)
_lhsOlocVars =
(
_patsIlocVars
)
_lhsOpatternAttrs =
(
_patsIpatternAttrs
)
_copy =
(
Product pos_ _patsIcopy
)
_lhsOcopy =
(
_copy
)
_patsOallTypeSigs =
(
_lhsIallTypeSigs
)
_patsOaltAttrs =
(
_lhsIaltAttrs
)
_patsOcon =
(
_lhsIcon
)
_patsOinh =
(
_lhsIinh
)
_patsOnt =
(
_lhsInt
)
_patsOsyn =
(
_lhsIsyn
)
( _patsIcopy,_patsIerrors,_patsIgathAltAttrs,_patsIinstVars,_patsIlocVars,_patsIpatternAttrs) =
pats_ _patsOallTypeSigs _patsOaltAttrs _patsOcon _patsOinh _patsOnt _patsOsyn
in ( _lhsOcopy,_lhsOerrors,_lhsOgathAltAttrs,_lhsOinstVars,_lhsOlocVars,_lhsOpatternAttrs))))
sem_Pattern_Underscore :: Pos ->
T_Pattern
sem_Pattern_Underscore pos_ =
(T_Pattern (\ _lhsIallTypeSigs
_lhsIaltAttrs
_lhsIcon
_lhsIinh
_lhsInt
_lhsIsyn ->
(let _lhsOerrors :: (Seq Error)
_lhsOgathAltAttrs :: ([AltAttr])
_lhsOinstVars :: ([Identifier])
_lhsOlocVars :: ([Identifier])
_lhsOpatternAttrs :: ([(Identifier,Identifier,Bool)])
_lhsOcopy :: Pattern
_lhsOerrors =
(
Seq.empty
)
_lhsOgathAltAttrs =
(
[]
)
_lhsOinstVars =
(
[]
)
_lhsOlocVars =
(
[]
)
_lhsOpatternAttrs =
(
[]
)
_copy =
(
Underscore pos_
)
_lhsOcopy =
(
_copy
)
in ( _lhsOcopy,_lhsOerrors,_lhsOgathAltAttrs,_lhsOinstVars,_lhsOlocVars,_lhsOpatternAttrs))))
sem_Patterns :: Patterns ->
T_Patterns
sem_Patterns list =
(Prelude.foldr sem_Patterns_Cons sem_Patterns_Nil (Prelude.map sem_Pattern list))
newtype T_Patterns = T_Patterns ((Map Identifier Type) ->
(Map AltAttr Vertex) ->
Identifier ->
Attributes ->
Identifier ->
Attributes ->
( Patterns,(Seq Error),([AltAttr]),([Identifier]),([Identifier]),([(Identifier,Identifier,Bool)])))
data Inh_Patterns = Inh_Patterns {allTypeSigs_Inh_Patterns :: !((Map Identifier Type)),altAttrs_Inh_Patterns :: !((Map AltAttr Vertex)),con_Inh_Patterns :: !(Identifier),inh_Inh_Patterns :: !(Attributes),nt_Inh_Patterns :: !(Identifier),syn_Inh_Patterns :: !(Attributes)}
data Syn_Patterns = Syn_Patterns {copy_Syn_Patterns :: !(Patterns),errors_Syn_Patterns :: !((Seq Error)),gathAltAttrs_Syn_Patterns :: !(([AltAttr])),instVars_Syn_Patterns :: !(([Identifier])),locVars_Syn_Patterns :: !(([Identifier])),patternAttrs_Syn_Patterns :: !(([(Identifier,Identifier,Bool)]))}
wrap_Patterns :: T_Patterns ->
Inh_Patterns ->
Syn_Patterns
wrap_Patterns (T_Patterns sem) (Inh_Patterns _lhsIallTypeSigs _lhsIaltAttrs _lhsIcon _lhsIinh _lhsInt _lhsIsyn) =
(let ( _lhsOcopy,_lhsOerrors,_lhsOgathAltAttrs,_lhsOinstVars,_lhsOlocVars,_lhsOpatternAttrs) = sem _lhsIallTypeSigs _lhsIaltAttrs _lhsIcon _lhsIinh _lhsInt _lhsIsyn
in (Syn_Patterns _lhsOcopy _lhsOerrors _lhsOgathAltAttrs _lhsOinstVars _lhsOlocVars _lhsOpatternAttrs))
sem_Patterns_Cons :: T_Pattern ->
T_Patterns ->
T_Patterns
sem_Patterns_Cons (T_Pattern hd_) (T_Patterns tl_) =
(T_Patterns (\ _lhsIallTypeSigs
_lhsIaltAttrs
_lhsIcon
_lhsIinh
_lhsInt
_lhsIsyn ->
(let _lhsOerrors :: (Seq Error)
_lhsOgathAltAttrs :: ([AltAttr])
_lhsOinstVars :: ([Identifier])
_lhsOlocVars :: ([Identifier])
_lhsOpatternAttrs :: ([(Identifier,Identifier,Bool)])
_lhsOcopy :: Patterns
_hdOallTypeSigs :: (Map Identifier Type)
_hdOaltAttrs :: (Map AltAttr Vertex)
_hdOcon :: Identifier
_hdOinh :: Attributes
_hdOnt :: Identifier
_hdOsyn :: Attributes
_tlOallTypeSigs :: (Map Identifier Type)
_tlOaltAttrs :: (Map AltAttr Vertex)
_tlOcon :: Identifier
_tlOinh :: Attributes
_tlOnt :: Identifier
_tlOsyn :: Attributes
_hdIcopy :: Pattern
_hdIerrors :: (Seq Error)
_hdIgathAltAttrs :: ([AltAttr])
_hdIinstVars :: ([Identifier])
_hdIlocVars :: ([Identifier])
_hdIpatternAttrs :: ([(Identifier,Identifier,Bool)])
_tlIcopy :: Patterns
_tlIerrors :: (Seq Error)
_tlIgathAltAttrs :: ([AltAttr])
_tlIinstVars :: ([Identifier])
_tlIlocVars :: ([Identifier])
_tlIpatternAttrs :: ([(Identifier,Identifier,Bool)])
_lhsOerrors =
(
_hdIerrors Seq.>< _tlIerrors
)
_lhsOgathAltAttrs =
(
_hdIgathAltAttrs ++ _tlIgathAltAttrs
)
_lhsOinstVars =
(
_hdIinstVars ++ _tlIinstVars
)
_lhsOlocVars =
(
_hdIlocVars ++ _tlIlocVars
)
_lhsOpatternAttrs =
(
_hdIpatternAttrs ++ _tlIpatternAttrs
)
_copy =
(
(:) _hdIcopy _tlIcopy
)
_lhsOcopy =
(
_copy
)
_hdOallTypeSigs =
(
_lhsIallTypeSigs
)
_hdOaltAttrs =
(
_lhsIaltAttrs
)
_hdOcon =
(
_lhsIcon
)
_hdOinh =
(
_lhsIinh
)
_hdOnt =
(
_lhsInt
)
_hdOsyn =
(
_lhsIsyn
)
_tlOallTypeSigs =
(
_lhsIallTypeSigs
)
_tlOaltAttrs =
(
_lhsIaltAttrs
)
_tlOcon =
(
_lhsIcon
)
_tlOinh =
(
_lhsIinh
)
_tlOnt =
(
_lhsInt
)
_tlOsyn =
(
_lhsIsyn
)
( _hdIcopy,_hdIerrors,_hdIgathAltAttrs,_hdIinstVars,_hdIlocVars,_hdIpatternAttrs) =
hd_ _hdOallTypeSigs _hdOaltAttrs _hdOcon _hdOinh _hdOnt _hdOsyn
( _tlIcopy,_tlIerrors,_tlIgathAltAttrs,_tlIinstVars,_tlIlocVars,_tlIpatternAttrs) =
tl_ _tlOallTypeSigs _tlOaltAttrs _tlOcon _tlOinh _tlOnt _tlOsyn
in ( _lhsOcopy,_lhsOerrors,_lhsOgathAltAttrs,_lhsOinstVars,_lhsOlocVars,_lhsOpatternAttrs))))
sem_Patterns_Nil :: T_Patterns
sem_Patterns_Nil =
(T_Patterns (\ _lhsIallTypeSigs
_lhsIaltAttrs
_lhsIcon
_lhsIinh
_lhsInt
_lhsIsyn ->
(let _lhsOerrors :: (Seq Error)
_lhsOgathAltAttrs :: ([AltAttr])
_lhsOinstVars :: ([Identifier])
_lhsOlocVars :: ([Identifier])
_lhsOpatternAttrs :: ([(Identifier,Identifier,Bool)])
_lhsOcopy :: Patterns
_lhsOerrors =
(
Seq.empty
)
_lhsOgathAltAttrs =
(
[]
)
_lhsOinstVars =
(
[]
)
_lhsOlocVars =
(
[]
)
_lhsOpatternAttrs =
(
[]
)
_copy =
(
[]
)
_lhsOcopy =
(
_copy
)
in ( _lhsOcopy,_lhsOerrors,_lhsOgathAltAttrs,_lhsOinstVars,_lhsOlocVars,_lhsOpatternAttrs))))
sem_Production :: Production ->
T_Production
sem_Production (Production _con _params _constraints _children _rules _typeSigs _macro) =
(sem_Production_Production _con _params _constraints (sem_Children _children) (sem_Rules _rules) (sem_TypeSigs _typeSigs) _macro)
newtype T_Production = T_Production (([Identifier]) ->
(Map ConstructorIdent (Map Identifier [Expression])) ->
CVisitsMap ->
Attributes ->
(Map Identifier Attributes) ->
AttrOrderMap ->
(Map ConstructorIdent (Map Identifier (Identifier,[Identifier]))) ->
Identifier ->
Bool ->
Bool ->
Bool ->
Bool ->
Bool ->
Bool ->
Bool ->
Bool ->
Bool ->
String ->
Attributes ->
(Map Identifier Attributes) ->
Int ->
( (Seq Edge),(Seq Edge),CProduction,([ConstructorIdent]),(Seq Edge),(Seq Error),(Seq Edge),(Seq Edge),Int,Int,(Seq (Vertex,CRule)),Int))
data Inh_Production = Inh_Production {allnts_Inh_Production :: !(([Identifier])),aroundMap_Inh_Production :: !((Map ConstructorIdent (Map Identifier [Expression]))),cVisitsMap_Inh_Production :: !(CVisitsMap),inh_Inh_Production :: !(Attributes),inhMap_Inh_Production :: !((Map Identifier Attributes)),manualAttrDepMap_Inh_Production :: !(AttrOrderMap),mergeMap_Inh_Production :: !((Map ConstructorIdent (Map Identifier (Identifier,[Identifier])))),nt_Inh_Production :: !(Identifier),o_case_Inh_Production :: !(Bool),o_cata_Inh_Production :: !(Bool),o_dovisit_Inh_Production :: !(Bool),o_newtypes_Inh_Production :: !(Bool),o_rename_Inh_Production :: !(Bool),o_sem_Inh_Production :: !(Bool),o_sig_Inh_Production :: !(Bool),o_unbox_Inh_Production :: !(Bool),o_wantvisit_Inh_Production :: !(Bool),prefix_Inh_Production :: !(String),syn_Inh_Production :: !(Attributes),synMap_Inh_Production :: !((Map Identifier Attributes)),vcount_Inh_Production :: !(Int)}
data Syn_Production = Syn_Production {additionalDep_Syn_Production :: !((Seq Edge)),aroundDep_Syn_Production :: !((Seq Edge)),cProduction_Syn_Production :: !(CProduction),cons_Syn_Production :: !(([ConstructorIdent])),directDep_Syn_Production :: !((Seq Edge)),errors_Syn_Production :: !((Seq Error)),instDep_Syn_Production :: !((Seq Edge)),mergeDep_Syn_Production :: !((Seq Edge)),nAutoRules_Syn_Production :: !(Int),nExplicitRules_Syn_Production :: !(Int),rules_Syn_Production :: !((Seq (Vertex,CRule))),vcount_Syn_Production :: !(Int)}
wrap_Production :: T_Production ->
Inh_Production ->
Syn_Production
wrap_Production (T_Production sem) (Inh_Production _lhsIallnts _lhsIaroundMap _lhsIcVisitsMap _lhsIinh _lhsIinhMap _lhsImanualAttrDepMap _lhsImergeMap _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_dovisit _lhsIo_newtypes _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_unbox _lhsIo_wantvisit _lhsIprefix _lhsIsyn _lhsIsynMap _lhsIvcount) =
(let ( _lhsOadditionalDep,_lhsOaroundDep,_lhsOcProduction,_lhsOcons,_lhsOdirectDep,_lhsOerrors,_lhsOinstDep,_lhsOmergeDep,_lhsOnAutoRules,_lhsOnExplicitRules,_lhsOrules,_lhsOvcount) = sem _lhsIallnts _lhsIaroundMap _lhsIcVisitsMap _lhsIinh _lhsIinhMap _lhsImanualAttrDepMap _lhsImergeMap _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_dovisit _lhsIo_newtypes _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_unbox _lhsIo_wantvisit _lhsIprefix _lhsIsyn _lhsIsynMap _lhsIvcount
in (Syn_Production _lhsOadditionalDep _lhsOaroundDep _lhsOcProduction _lhsOcons _lhsOdirectDep _lhsOerrors _lhsOinstDep _lhsOmergeDep _lhsOnAutoRules _lhsOnExplicitRules _lhsOrules _lhsOvcount))
sem_Production_Production :: ConstructorIdent ->
([Identifier]) ->
([Type]) ->
T_Children ->
T_Rules ->
T_TypeSigs ->
MaybeMacro ->
T_Production
sem_Production_Production con_ params_ constraints_ (T_Children children_) (T_Rules rules_) (T_TypeSigs typeSigs_) macro_ =
(T_Production (\ _lhsIallnts
_lhsIaroundMap
_lhsIcVisitsMap
_lhsIinh
_lhsIinhMap
_lhsImanualAttrDepMap
_lhsImergeMap
_lhsInt
_lhsIo_case
_lhsIo_cata
_lhsIo_dovisit
_lhsIo_newtypes
_lhsIo_rename
_lhsIo_sem
_lhsIo_sig
_lhsIo_unbox
_lhsIo_wantvisit
_lhsIprefix
_lhsIsyn
_lhsIsynMap
_lhsIvcount ->
(let _childrenOcon :: Identifier
_rulesOcon :: Identifier
_rulesOchildNts :: (Map Identifier NontermIdent)
_rulesOchildInhs :: (Map Identifier Attributes)
_lhsOrules :: (Seq (Vertex,CRule))
_lhsOvcount :: Int
_lhsOadditionalDep :: (Seq Edge)
_rulesOsynsOfChildren :: (Map Identifier Attributes)
_rulesOinhsOfChildren :: (Map Identifier Attributes)
_lhsOmergeDep :: (Seq Edge)
_lhsOaroundDep :: (Seq Edge)
_lhsOcons :: ([ConstructorIdent])
_typeSigsOtypeSigs :: (Map Identifier Type)
_rulesOallTypeSigs :: (Map Identifier Type)
_lhsOcProduction :: CProduction
_lhsOdirectDep :: (Seq Edge)
_lhsOerrors :: (Seq Error)
_lhsOinstDep :: (Seq Edge)
_lhsOnAutoRules :: Int
_lhsOnExplicitRules :: Int
_childrenOallfields :: ([(Identifier,Type,ChildKind)])
_childrenOallnts :: ([Identifier])
_childrenOattrs :: ([(Identifier,Identifier)])
_childrenOinh :: Attributes
_childrenOinhMap :: (Map Identifier Attributes)
_childrenOmergeMap :: (Map Identifier (Identifier,[Identifier]))
_childrenOnt :: Identifier
_childrenOo_unbox :: Bool
_childrenOsyn :: Attributes
_childrenOsynMap :: (Map Identifier Attributes)
_rulesOallfields :: ([(Identifier,Type,ChildKind)])
_rulesOallnts :: ([Identifier])
_rulesOaltAttrs :: (Map AltAttr Vertex)
_rulesOattrs :: ([(Identifier,Identifier)])
_rulesOinh :: Attributes
_rulesOmergeMap :: (Map Identifier (Identifier,[Identifier]))
_rulesOnt :: Identifier
_rulesOo_case :: Bool
_rulesOo_cata :: Bool
_rulesOo_dovisit :: Bool
_rulesOo_newtypes :: Bool
_rulesOo_rename :: Bool
_rulesOo_sem :: Bool
_rulesOo_sig :: Bool
_rulesOo_wantvisit :: Bool
_rulesOprefix :: String
_rulesOsyn :: Attributes
_childrenIattributes :: ([(Identifier,Attributes,Attributes)])
_childrenIcollectChildrenInhs :: (Map Identifier Attributes )
_childrenIcollectChildrenSyns :: (Map Identifier Attributes )
_childrenIerrors :: (Seq Error)
_childrenIfields :: ([(Identifier,Type,ChildKind)])
_childrenIgathAltAttrs :: ([AltAttr])
_childrenIgathRules :: (Seq CRule)
_childrenIinhs :: (Seq (Identifier,Attributes))
_childrenInts :: (Seq (Identifier,NontermIdent))
_childrenIsinglevisits :: ([CRule])
_childrenIterminals :: ([Identifier])
_rulesIdirectDep :: (Seq Edge)
_rulesIerrors :: (Seq Error)
_rulesIgathAltAttrs :: ([AltAttr])
_rulesIgathRules :: (Seq CRule)
_rulesIinstDep :: (Seq Edge)
_rulesIinstVars :: ([Identifier])
_rulesIlocVars :: ([Identifier])
_rulesInAutoRules :: Int
_rulesInExplicitRules :: Int
_typeSigsItypeSigs :: (Map Identifier Type)
_childrenOcon =
(
con_
)
_rulesOcon =
(
con_
)
_gathAltAttrs =
(
[ AltAttr _LHS inh True | inh <- Map.keys _lhsIinh ]
++ _childrenIgathAltAttrs
++ _rulesIgathAltAttrs
)
_altAttrs =
(
Map.fromList (zip _gathAltAttrs [_lhsIvcount..])
)
_rulesOchildNts =
(
Map.fromList (toList _childrenInts)
)
_rulesOchildInhs =
(
Map.fromList (toList _childrenIinhs)
)
_inhRules =
(
[ cRuleLhsInh inh _lhsInt con_ tp | (inh,tp) <- Map.assocs _lhsIinh ]
)
_gathRules =
(
_inhRules ++ toList (_childrenIgathRules Seq.>< _rulesIgathRules)
)
_lhsOrules =
(
Seq.fromList (zip [_lhsIvcount..] _gathRules)
)
_lhsOvcount =
(
_lhsIvcount + length _gathRules
)
_manualDeps =
(
Set.toList $ Map.findWithDefault Set.empty con_ $ Map.findWithDefault Map.empty _lhsInt _lhsImanualAttrDepMap
)
_lhsOadditionalDep =
(
Seq.fromList [ (vertex True occA, vertex False occB)
| Dependency occA occB <- _manualDeps
, let vertex inout (OccAttr child nm)
| child == _LOC = findWithErr2 (AltAttr _LOC nm True) _altAttrs
| otherwise = findWithErr2 (AltAttr child nm inout) _altAttrs
vertex _ (OccRule nm)
= findWithErr2 (AltAttr _LOC (Ident ("_rule_" ++ show nm) (getPos nm)) True) _altAttrs
]
)
_rulesOsynsOfChildren =
(
_childrenIcollectChildrenSyns
)
_rulesOinhsOfChildren =
(
_childrenIcollectChildrenInhs
)
_mergeMap =
(
Map.findWithDefault Map.empty con_ _lhsImergeMap
)
_lhsOmergeDep =
(
_mergeDep1 Seq.>< _mergeDep2
)
_mergeDep1 =
(
Seq.fromList $
[ (childVert, synVert)
| childNm <- Map.keys _mergeMap
, synNm <- Map.keys (findWithErr2 childNm _childrenIcollectChildrenSyns)
, let childNm' = Ident (show childNm ++ "_merge") (getPos childNm)
childAttr = AltAttr _LOC childNm' True
synAttr = AltAttr childNm synNm True
childVert = findWithErr2 childAttr _altAttrs
synVert = findWithErr2 synAttr _altAttrs
]
)
_mergeDep2 =
(
Seq.fromList $
[ (mergedVert, sourceVert)
| (childNm, (_,cs)) <- Map.assocs _mergeMap
, c <- cs
, synNm <- Map.keys (findWithErr2 childNm _childrenIcollectChildrenSyns)
, let sourceAttr = AltAttr childNm synNm True
mergedAttr = AltAttr c synNm True
sourceVert = findWithErr2 sourceAttr _altAttrs
mergedVert = findWithErr2 mergedAttr _altAttrs
]
)
_aroundMap =
(
Map.findWithDefault Map.empty con_ _lhsIaroundMap
)
_aroundDep1 =
(
Seq.fromList $
[ (childVert, synVert)
| childNm <- Map.keys _aroundMap
, synNm <- Map.keys (findWithErr2 childNm _childrenIcollectChildrenSyns)
, let childNm' = Ident (show childNm ++ "_around") (getPos childNm)
childAttr = AltAttr _LOC childNm' True
synAttr = AltAttr childNm synNm True
childVert = findWithErr2 childAttr _altAttrs
synVert = findWithErr2 synAttr _altAttrs
]
)
_aroundDep2 =
(
Seq.fromList $
[ (childVert, inhVert)
| childNm <- Map.keys _aroundMap
, inhNm <- Map.keys (findWithErr2 childNm _childrenIcollectChildrenInhs)
, let childNm' = Ident (show childNm ++ "_around") (getPos childNm)
childAttr = AltAttr _LOC childNm' True
inhAttr = AltAttr childNm inhNm False
childVert = findWithErr2 childAttr _altAttrs
inhVert = findWithErr2 inhAttr _altAttrs
]
)
_lhsOaroundDep =
(
_aroundDep1 Seq.>< _aroundDep2
)
_lhsOcons =
(
[con_]
)
_typeSigsOtypeSigs =
(
Map.empty
)
_rulesOallTypeSigs =
(
_typeSigsItypeSigs
)
_cVisits =
(
if _lhsIo_dovisit
then let prodsVisitsMap = findWithErr1 "Production.cVisits.nt" _lhsInt _lhsIcVisitsMap
visits = findWithErr1 "Production.cVisits.con" con_ prodsVisitsMap
in visits
else let vss = nubBy eqCRuleDefines _gathRules ++ _childrenIsinglevisits
in [CVisit _lhsIinh _lhsIsyn vss [] False]
)
_lhsOcProduction =
(
CProduction con_ _cVisits _childrenIfields _childrenIterminals
)
_allfields =
(
_childrenIfields
)
_attrs =
(
map ((,) _LOC) _rulesIlocVars ++
map ((,) _INST) _rulesIinstVars ++
map ((,) _LHS) _inhnames ++
concat [map ((,) nm) (Map.keys as) | (nm,_,as) <- _childrenIattributes]
)
_inhnames =
(
Map.keys _lhsIinh
)
_synnames =
(
Map.keys _lhsIsyn
)
_lhsOdirectDep =
(
_rulesIdirectDep
)
_lhsOerrors =
(
_childrenIerrors Seq.>< _rulesIerrors
)
_lhsOinstDep =
(
_rulesIinstDep
)
_lhsOnAutoRules =
(
_rulesInAutoRules
)
_lhsOnExplicitRules =
(
_rulesInExplicitRules
)
_childrenOallfields =
(
_allfields
)
_childrenOallnts =
(
_lhsIallnts
)
_childrenOattrs =
(
_attrs
)
_childrenOinh =
(
_lhsIinh
)
_childrenOinhMap =
(
_lhsIinhMap
)
_childrenOmergeMap =
(
_mergeMap
)
_childrenOnt =
(
_lhsInt
)
_childrenOo_unbox =
(
_lhsIo_unbox
)
_childrenOsyn =
(
_lhsIsyn
)
_childrenOsynMap =
(
_lhsIsynMap
)
_rulesOallfields =
(
_allfields
)
_rulesOallnts =
(
_lhsIallnts
)
_rulesOaltAttrs =
(
_altAttrs
)
_rulesOattrs =
(
_attrs
)
_rulesOinh =
(
_lhsIinh
)
_rulesOmergeMap =
(
_mergeMap
)
_rulesOnt =
(
_lhsInt
)
_rulesOo_case =
(
_lhsIo_case
)
_rulesOo_cata =
(
_lhsIo_cata
)
_rulesOo_dovisit =
(
_lhsIo_dovisit
)
_rulesOo_newtypes =
(
_lhsIo_newtypes
)
_rulesOo_rename =
(
_lhsIo_rename
)
_rulesOo_sem =
(
_lhsIo_sem
)
_rulesOo_sig =
(
_lhsIo_sig
)
_rulesOo_wantvisit =
(
_lhsIo_wantvisit
)
_rulesOprefix =
(
_lhsIprefix
)
_rulesOsyn =
(
_lhsIsyn
)
( _childrenIattributes,_childrenIcollectChildrenInhs,_childrenIcollectChildrenSyns,_childrenIerrors,_childrenIfields,_childrenIgathAltAttrs,_childrenIgathRules,_childrenIinhs,_childrenInts,_childrenIsinglevisits,_childrenIterminals) =
children_ _childrenOallfields _childrenOallnts _childrenOattrs _childrenOcon _childrenOinh _childrenOinhMap _childrenOmergeMap _childrenOnt _childrenOo_unbox _childrenOsyn _childrenOsynMap
( _rulesIdirectDep,_rulesIerrors,_rulesIgathAltAttrs,_rulesIgathRules,_rulesIinstDep,_rulesIinstVars,_rulesIlocVars,_rulesInAutoRules,_rulesInExplicitRules) =
rules_ _rulesOallTypeSigs _rulesOallfields _rulesOallnts _rulesOaltAttrs _rulesOattrs _rulesOchildInhs _rulesOchildNts _rulesOcon _rulesOinh _rulesOinhsOfChildren _rulesOmergeMap _rulesOnt _rulesOo_case _rulesOo_cata _rulesOo_dovisit _rulesOo_newtypes _rulesOo_rename _rulesOo_sem _rulesOo_sig _rulesOo_wantvisit _rulesOprefix _rulesOsyn _rulesOsynsOfChildren
( _typeSigsItypeSigs) =
typeSigs_ _typeSigsOtypeSigs
in ( _lhsOadditionalDep,_lhsOaroundDep,_lhsOcProduction,_lhsOcons,_lhsOdirectDep,_lhsOerrors,_lhsOinstDep,_lhsOmergeDep,_lhsOnAutoRules,_lhsOnExplicitRules,_lhsOrules,_lhsOvcount))))
sem_Productions :: Productions ->
T_Productions
sem_Productions list =
(Prelude.foldr sem_Productions_Cons sem_Productions_Nil (Prelude.map sem_Production list))
newtype T_Productions = T_Productions (([Identifier]) ->
(Map ConstructorIdent (Map Identifier [Expression])) ->
CVisitsMap ->
Attributes ->
(Map Identifier Attributes) ->
AttrOrderMap ->
(Map ConstructorIdent (Map Identifier (Identifier,[Identifier]))) ->
Identifier ->
Bool ->
Bool ->
Bool ->
Bool ->
Bool ->
Bool ->
Bool ->
Bool ->
Bool ->
String ->
Attributes ->
(Map Identifier Attributes) ->
Int ->
( (Seq Edge),(Seq Edge),CProductions,([ConstructorIdent]),(Seq Edge),(Seq Error),(Seq Edge),(Seq Edge),Int,Int,(Seq (Vertex,CRule)),Int))
data Inh_Productions = Inh_Productions {allnts_Inh_Productions :: !(([Identifier])),aroundMap_Inh_Productions :: !((Map ConstructorIdent (Map Identifier [Expression]))),cVisitsMap_Inh_Productions :: !(CVisitsMap),inh_Inh_Productions :: !(Attributes),inhMap_Inh_Productions :: !((Map Identifier Attributes)),manualAttrDepMap_Inh_Productions :: !(AttrOrderMap),mergeMap_Inh_Productions :: !((Map ConstructorIdent (Map Identifier (Identifier,[Identifier])))),nt_Inh_Productions :: !(Identifier),o_case_Inh_Productions :: !(Bool),o_cata_Inh_Productions :: !(Bool),o_dovisit_Inh_Productions :: !(Bool),o_newtypes_Inh_Productions :: !(Bool),o_rename_Inh_Productions :: !(Bool),o_sem_Inh_Productions :: !(Bool),o_sig_Inh_Productions :: !(Bool),o_unbox_Inh_Productions :: !(Bool),o_wantvisit_Inh_Productions :: !(Bool),prefix_Inh_Productions :: !(String),syn_Inh_Productions :: !(Attributes),synMap_Inh_Productions :: !((Map Identifier Attributes)),vcount_Inh_Productions :: !(Int)}
data Syn_Productions = Syn_Productions {additionalDep_Syn_Productions :: !((Seq Edge)),aroundDep_Syn_Productions :: !((Seq Edge)),cProductions_Syn_Productions :: !(CProductions),cons_Syn_Productions :: !(([ConstructorIdent])),directDep_Syn_Productions :: !((Seq Edge)),errors_Syn_Productions :: !((Seq Error)),instDep_Syn_Productions :: !((Seq Edge)),mergeDep_Syn_Productions :: !((Seq Edge)),nAutoRules_Syn_Productions :: !(Int),nExplicitRules_Syn_Productions :: !(Int),rules_Syn_Productions :: !((Seq (Vertex,CRule))),vcount_Syn_Productions :: !(Int)}
wrap_Productions :: T_Productions ->
Inh_Productions ->
Syn_Productions
wrap_Productions (T_Productions sem) (Inh_Productions _lhsIallnts _lhsIaroundMap _lhsIcVisitsMap _lhsIinh _lhsIinhMap _lhsImanualAttrDepMap _lhsImergeMap _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_dovisit _lhsIo_newtypes _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_unbox _lhsIo_wantvisit _lhsIprefix _lhsIsyn _lhsIsynMap _lhsIvcount) =
(let ( _lhsOadditionalDep,_lhsOaroundDep,_lhsOcProductions,_lhsOcons,_lhsOdirectDep,_lhsOerrors,_lhsOinstDep,_lhsOmergeDep,_lhsOnAutoRules,_lhsOnExplicitRules,_lhsOrules,_lhsOvcount) = sem _lhsIallnts _lhsIaroundMap _lhsIcVisitsMap _lhsIinh _lhsIinhMap _lhsImanualAttrDepMap _lhsImergeMap _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_dovisit _lhsIo_newtypes _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_unbox _lhsIo_wantvisit _lhsIprefix _lhsIsyn _lhsIsynMap _lhsIvcount
in (Syn_Productions _lhsOadditionalDep _lhsOaroundDep _lhsOcProductions _lhsOcons _lhsOdirectDep _lhsOerrors _lhsOinstDep _lhsOmergeDep _lhsOnAutoRules _lhsOnExplicitRules _lhsOrules _lhsOvcount))
sem_Productions_Cons :: T_Production ->
T_Productions ->
T_Productions
sem_Productions_Cons (T_Production hd_) (T_Productions tl_) =
(T_Productions (\ _lhsIallnts
_lhsIaroundMap
_lhsIcVisitsMap
_lhsIinh
_lhsIinhMap
_lhsImanualAttrDepMap
_lhsImergeMap
_lhsInt
_lhsIo_case
_lhsIo_cata
_lhsIo_dovisit
_lhsIo_newtypes
_lhsIo_rename
_lhsIo_sem
_lhsIo_sig
_lhsIo_unbox
_lhsIo_wantvisit
_lhsIprefix
_lhsIsyn
_lhsIsynMap
_lhsIvcount ->
(let _lhsOcProductions :: CProductions
_lhsOadditionalDep :: (Seq Edge)
_lhsOaroundDep :: (Seq Edge)
_lhsOcons :: ([ConstructorIdent])
_lhsOdirectDep :: (Seq Edge)
_lhsOerrors :: (Seq Error)
_lhsOinstDep :: (Seq Edge)
_lhsOmergeDep :: (Seq Edge)
_lhsOnAutoRules :: Int
_lhsOnExplicitRules :: Int
_lhsOrules :: (Seq (Vertex,CRule))
_lhsOvcount :: Int
_hdOallnts :: ([Identifier])
_hdOaroundMap :: (Map ConstructorIdent (Map Identifier [Expression]))
_hdOcVisitsMap :: CVisitsMap
_hdOinh :: Attributes
_hdOinhMap :: (Map Identifier Attributes)
_hdOmanualAttrDepMap :: AttrOrderMap
_hdOmergeMap :: (Map ConstructorIdent (Map Identifier (Identifier,[Identifier])))
_hdOnt :: Identifier
_hdOo_case :: Bool
_hdOo_cata :: Bool
_hdOo_dovisit :: Bool
_hdOo_newtypes :: Bool
_hdOo_rename :: Bool
_hdOo_sem :: Bool
_hdOo_sig :: Bool
_hdOo_unbox :: Bool
_hdOo_wantvisit :: Bool
_hdOprefix :: String
_hdOsyn :: Attributes
_hdOsynMap :: (Map Identifier Attributes)
_hdOvcount :: Int
_tlOallnts :: ([Identifier])
_tlOaroundMap :: (Map ConstructorIdent (Map Identifier [Expression]))
_tlOcVisitsMap :: CVisitsMap
_tlOinh :: Attributes
_tlOinhMap :: (Map Identifier Attributes)
_tlOmanualAttrDepMap :: AttrOrderMap
_tlOmergeMap :: (Map ConstructorIdent (Map Identifier (Identifier,[Identifier])))
_tlOnt :: Identifier
_tlOo_case :: Bool
_tlOo_cata :: Bool
_tlOo_dovisit :: Bool
_tlOo_newtypes :: Bool
_tlOo_rename :: Bool
_tlOo_sem :: Bool
_tlOo_sig :: Bool
_tlOo_unbox :: Bool
_tlOo_wantvisit :: Bool
_tlOprefix :: String
_tlOsyn :: Attributes
_tlOsynMap :: (Map Identifier Attributes)
_tlOvcount :: Int
_hdIadditionalDep :: (Seq Edge)
_hdIaroundDep :: (Seq Edge)
_hdIcProduction :: CProduction
_hdIcons :: ([ConstructorIdent])
_hdIdirectDep :: (Seq Edge)
_hdIerrors :: (Seq Error)
_hdIinstDep :: (Seq Edge)
_hdImergeDep :: (Seq Edge)
_hdInAutoRules :: Int
_hdInExplicitRules :: Int
_hdIrules :: (Seq (Vertex,CRule))
_hdIvcount :: Int
_tlIadditionalDep :: (Seq Edge)
_tlIaroundDep :: (Seq Edge)
_tlIcProductions :: CProductions
_tlIcons :: ([ConstructorIdent])
_tlIdirectDep :: (Seq Edge)
_tlIerrors :: (Seq Error)
_tlIinstDep :: (Seq Edge)
_tlImergeDep :: (Seq Edge)
_tlInAutoRules :: Int
_tlInExplicitRules :: Int
_tlIrules :: (Seq (Vertex,CRule))
_tlIvcount :: Int
_lhsOcProductions =
(
_hdIcProduction : _tlIcProductions
)
_lhsOadditionalDep =
(
_hdIadditionalDep Seq.>< _tlIadditionalDep
)
_lhsOaroundDep =
(
_hdIaroundDep Seq.>< _tlIaroundDep
)
_lhsOcons =
(
_hdIcons ++ _tlIcons
)
_lhsOdirectDep =
(
_hdIdirectDep Seq.>< _tlIdirectDep
)
_lhsOerrors =
(
_hdIerrors Seq.>< _tlIerrors
)
_lhsOinstDep =
(
_hdIinstDep Seq.>< _tlIinstDep
)
_lhsOmergeDep =
(
_hdImergeDep Seq.>< _tlImergeDep
)
_lhsOnAutoRules =
(
_hdInAutoRules + _tlInAutoRules
)
_lhsOnExplicitRules =
(
_hdInExplicitRules + _tlInExplicitRules
)
_lhsOrules =
(
_hdIrules Seq.>< _tlIrules
)
_lhsOvcount =
(
_tlIvcount
)
_hdOallnts =
(
_lhsIallnts
)
_hdOaroundMap =
(
_lhsIaroundMap
)
_hdOcVisitsMap =
(
_lhsIcVisitsMap
)
_hdOinh =
(
_lhsIinh
)
_hdOinhMap =
(
_lhsIinhMap
)
_hdOmanualAttrDepMap =
(
_lhsImanualAttrDepMap
)
_hdOmergeMap =
(
_lhsImergeMap
)
_hdOnt =
(
_lhsInt
)
_hdOo_case =
(
_lhsIo_case
)
_hdOo_cata =
(
_lhsIo_cata
)
_hdOo_dovisit =
(
_lhsIo_dovisit
)
_hdOo_newtypes =
(
_lhsIo_newtypes
)
_hdOo_rename =
(
_lhsIo_rename
)
_hdOo_sem =
(
_lhsIo_sem
)
_hdOo_sig =
(
_lhsIo_sig
)
_hdOo_unbox =
(
_lhsIo_unbox
)
_hdOo_wantvisit =
(
_lhsIo_wantvisit
)
_hdOprefix =
(
_lhsIprefix
)
_hdOsyn =
(
_lhsIsyn
)
_hdOsynMap =
(
_lhsIsynMap
)
_hdOvcount =
(
_lhsIvcount
)
_tlOallnts =
(
_lhsIallnts
)
_tlOaroundMap =
(
_lhsIaroundMap
)
_tlOcVisitsMap =
(
_lhsIcVisitsMap
)
_tlOinh =
(
_lhsIinh
)
_tlOinhMap =
(
_lhsIinhMap
)
_tlOmanualAttrDepMap =
(
_lhsImanualAttrDepMap
)
_tlOmergeMap =
(
_lhsImergeMap
)
_tlOnt =
(
_lhsInt
)
_tlOo_case =
(
_lhsIo_case
)
_tlOo_cata =
(
_lhsIo_cata
)
_tlOo_dovisit =
(
_lhsIo_dovisit
)
_tlOo_newtypes =
(
_lhsIo_newtypes
)
_tlOo_rename =
(
_lhsIo_rename
)
_tlOo_sem =
(
_lhsIo_sem
)
_tlOo_sig =
(
_lhsIo_sig
)
_tlOo_unbox =
(
_lhsIo_unbox
)
_tlOo_wantvisit =
(
_lhsIo_wantvisit
)
_tlOprefix =
(
_lhsIprefix
)
_tlOsyn =
(
_lhsIsyn
)
_tlOsynMap =
(
_lhsIsynMap
)
_tlOvcount =
(
_hdIvcount
)
( _hdIadditionalDep,_hdIaroundDep,_hdIcProduction,_hdIcons,_hdIdirectDep,_hdIerrors,_hdIinstDep,_hdImergeDep,_hdInAutoRules,_hdInExplicitRules,_hdIrules,_hdIvcount) =
hd_ _hdOallnts _hdOaroundMap _hdOcVisitsMap _hdOinh _hdOinhMap _hdOmanualAttrDepMap _hdOmergeMap _hdOnt _hdOo_case _hdOo_cata _hdOo_dovisit _hdOo_newtypes _hdOo_rename _hdOo_sem _hdOo_sig _hdOo_unbox _hdOo_wantvisit _hdOprefix _hdOsyn _hdOsynMap _hdOvcount
( _tlIadditionalDep,_tlIaroundDep,_tlIcProductions,_tlIcons,_tlIdirectDep,_tlIerrors,_tlIinstDep,_tlImergeDep,_tlInAutoRules,_tlInExplicitRules,_tlIrules,_tlIvcount) =
tl_ _tlOallnts _tlOaroundMap _tlOcVisitsMap _tlOinh _tlOinhMap _tlOmanualAttrDepMap _tlOmergeMap _tlOnt _tlOo_case _tlOo_cata _tlOo_dovisit _tlOo_newtypes _tlOo_rename _tlOo_sem _tlOo_sig _tlOo_unbox _tlOo_wantvisit _tlOprefix _tlOsyn _tlOsynMap _tlOvcount
in ( _lhsOadditionalDep,_lhsOaroundDep,_lhsOcProductions,_lhsOcons,_lhsOdirectDep,_lhsOerrors,_lhsOinstDep,_lhsOmergeDep,_lhsOnAutoRules,_lhsOnExplicitRules,_lhsOrules,_lhsOvcount))))
sem_Productions_Nil :: T_Productions
sem_Productions_Nil =
(T_Productions (\ _lhsIallnts
_lhsIaroundMap
_lhsIcVisitsMap
_lhsIinh
_lhsIinhMap
_lhsImanualAttrDepMap
_lhsImergeMap
_lhsInt
_lhsIo_case
_lhsIo_cata
_lhsIo_dovisit
_lhsIo_newtypes
_lhsIo_rename
_lhsIo_sem
_lhsIo_sig
_lhsIo_unbox
_lhsIo_wantvisit
_lhsIprefix
_lhsIsyn
_lhsIsynMap
_lhsIvcount ->
(let _lhsOcProductions :: CProductions
_lhsOadditionalDep :: (Seq Edge)
_lhsOaroundDep :: (Seq Edge)
_lhsOcons :: ([ConstructorIdent])
_lhsOdirectDep :: (Seq Edge)
_lhsOerrors :: (Seq Error)
_lhsOinstDep :: (Seq Edge)
_lhsOmergeDep :: (Seq Edge)
_lhsOnAutoRules :: Int
_lhsOnExplicitRules :: Int
_lhsOrules :: (Seq (Vertex,CRule))
_lhsOvcount :: Int
_lhsOcProductions =
(
[]
)
_lhsOadditionalDep =
(
Seq.empty
)
_lhsOaroundDep =
(
Seq.empty
)
_lhsOcons =
(
[]
)
_lhsOdirectDep =
(
Seq.empty
)
_lhsOerrors =
(
Seq.empty
)
_lhsOinstDep =
(
Seq.empty
)
_lhsOmergeDep =
(
Seq.empty
)
_lhsOnAutoRules =
(
0
)
_lhsOnExplicitRules =
(
0
)
_lhsOrules =
(
Seq.empty
)
_lhsOvcount =
(
_lhsIvcount
)
in ( _lhsOadditionalDep,_lhsOaroundDep,_lhsOcProductions,_lhsOcons,_lhsOdirectDep,_lhsOerrors,_lhsOinstDep,_lhsOmergeDep,_lhsOnAutoRules,_lhsOnExplicitRules,_lhsOrules,_lhsOvcount))))
sem_Rule :: Rule ->
T_Rule
sem_Rule (Rule _mbName _pattern _rhs _owrt _origin _explicit _pure _identity _mbError _eager) =
(sem_Rule_Rule _mbName (sem_Pattern _pattern) (sem_Expression _rhs) _owrt _origin _explicit _pure _identity _mbError _eager)
newtype T_Rule = T_Rule ((Map Identifier Type) ->
([(Identifier,Type,ChildKind)]) ->
([Identifier]) ->
(Map AltAttr Vertex) ->
([(Identifier,Identifier)]) ->
(Map Identifier Attributes) ->
(Map Identifier NontermIdent) ->
Identifier ->
Attributes ->
(Map Identifier Attributes) ->
(Map Identifier (Identifier,[Identifier])) ->
Identifier ->
Bool ->
Bool ->
Bool ->
Bool ->
Bool ->
Bool ->
Bool ->
Bool ->
String ->
Attributes ->
(Map Identifier Attributes) ->
( (Seq Edge),(Seq Error),([AltAttr]),(Seq CRule),(Seq Edge),([Identifier]),([Identifier]),Int,Int))
data Inh_Rule = Inh_Rule {allTypeSigs_Inh_Rule :: !((Map Identifier Type)),allfields_Inh_Rule :: !(([(Identifier,Type,ChildKind)])),allnts_Inh_Rule :: !(([Identifier])),altAttrs_Inh_Rule :: !((Map AltAttr Vertex)),attrs_Inh_Rule :: !(([(Identifier,Identifier)])),childInhs_Inh_Rule :: !((Map Identifier Attributes)),childNts_Inh_Rule :: !((Map Identifier NontermIdent)),con_Inh_Rule :: !(Identifier),inh_Inh_Rule :: !(Attributes),inhsOfChildren_Inh_Rule :: !((Map Identifier Attributes)),mergeMap_Inh_Rule :: !((Map Identifier (Identifier,[Identifier]))),nt_Inh_Rule :: !(Identifier),o_case_Inh_Rule :: !(Bool),o_cata_Inh_Rule :: !(Bool),o_dovisit_Inh_Rule :: !(Bool),o_newtypes_Inh_Rule :: !(Bool),o_rename_Inh_Rule :: !(Bool),o_sem_Inh_Rule :: !(Bool),o_sig_Inh_Rule :: !(Bool),o_wantvisit_Inh_Rule :: !(Bool),prefix_Inh_Rule :: !(String),syn_Inh_Rule :: !(Attributes),synsOfChildren_Inh_Rule :: !((Map Identifier Attributes))}
data Syn_Rule = Syn_Rule {directDep_Syn_Rule :: !((Seq Edge)),errors_Syn_Rule :: !((Seq Error)),gathAltAttrs_Syn_Rule :: !(([AltAttr])),gathRules_Syn_Rule :: !((Seq CRule)),instDep_Syn_Rule :: !((Seq Edge)),instVars_Syn_Rule :: !(([Identifier])),locVars_Syn_Rule :: !(([Identifier])),nAutoRules_Syn_Rule :: !(Int),nExplicitRules_Syn_Rule :: !(Int)}
wrap_Rule :: T_Rule ->
Inh_Rule ->
Syn_Rule
wrap_Rule (T_Rule sem) (Inh_Rule _lhsIallTypeSigs _lhsIallfields _lhsIallnts _lhsIaltAttrs _lhsIattrs _lhsIchildInhs _lhsIchildNts _lhsIcon _lhsIinh _lhsIinhsOfChildren _lhsImergeMap _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_dovisit _lhsIo_newtypes _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_wantvisit _lhsIprefix _lhsIsyn _lhsIsynsOfChildren) =
(let ( _lhsOdirectDep,_lhsOerrors,_lhsOgathAltAttrs,_lhsOgathRules,_lhsOinstDep,_lhsOinstVars,_lhsOlocVars,_lhsOnAutoRules,_lhsOnExplicitRules) = sem _lhsIallTypeSigs _lhsIallfields _lhsIallnts _lhsIaltAttrs _lhsIattrs _lhsIchildInhs _lhsIchildNts _lhsIcon _lhsIinh _lhsIinhsOfChildren _lhsImergeMap _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_dovisit _lhsIo_newtypes _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_wantvisit _lhsIprefix _lhsIsyn _lhsIsynsOfChildren
in (Syn_Rule _lhsOdirectDep _lhsOerrors _lhsOgathAltAttrs _lhsOgathRules _lhsOinstDep _lhsOinstVars _lhsOlocVars _lhsOnAutoRules _lhsOnExplicitRules))
sem_Rule_Rule :: (Maybe Identifier) ->
T_Pattern ->
T_Expression ->
Bool ->
String ->
Bool ->
Bool ->
Bool ->
(Maybe Error) ->
Bool ->
T_Rule
sem_Rule_Rule mbName_ (T_Pattern pattern_) (T_Expression rhs_) owrt_ origin_ explicit_ pure_ identity_ mbError_ eager_ =
(T_Rule (\ _lhsIallTypeSigs
_lhsIallfields
_lhsIallnts
_lhsIaltAttrs
_lhsIattrs
_lhsIchildInhs
_lhsIchildNts
_lhsIcon
_lhsIinh
_lhsIinhsOfChildren
_lhsImergeMap
_lhsInt
_lhsIo_case
_lhsIo_cata
_lhsIo_dovisit
_lhsIo_newtypes
_lhsIo_rename
_lhsIo_sem
_lhsIo_sig
_lhsIo_wantvisit
_lhsIprefix
_lhsIsyn
_lhsIsynsOfChildren ->
(let _lhsOnExplicitRules :: Int
_lhsOnAutoRules :: Int
_lhsOdirectDep :: (Seq Edge)
_lhsOinstDep :: (Seq Edge)
_lhsOerrors :: (Seq Error)
_lhsOgathAltAttrs :: ([AltAttr])
_lhsOgathRules :: (Seq CRule)
_lhsOinstVars :: ([Identifier])
_lhsOlocVars :: ([Identifier])
_patternOallTypeSigs :: (Map Identifier Type)
_patternOaltAttrs :: (Map AltAttr Vertex)
_patternOcon :: Identifier
_patternOinh :: Attributes
_patternOnt :: Identifier
_patternOsyn :: Attributes
_rhsOallfields :: ([(Identifier,Type,ChildKind)])
_rhsOallnts :: ([Identifier])
_rhsOattrs :: ([(Identifier,Identifier)])
_rhsOcon :: Identifier
_rhsOmergeMap :: (Map Identifier (Identifier,[Identifier]))
_rhsOnt :: Identifier
_patternIcopy :: Pattern
_patternIerrors :: (Seq Error)
_patternIgathAltAttrs :: ([AltAttr])
_patternIinstVars :: ([Identifier])
_patternIlocVars :: ([Identifier])
_patternIpatternAttrs :: ([(Identifier,Identifier,Bool)])
_rhsIallRhsVars :: (Set (Identifier,Identifier))
_rhsIcopy :: Expression
_rhsIerrors :: (Seq Error)
_rhsItextLines :: ([String])
_rhsIusedAttrs :: ([(Identifier,Identifier)])
_rhsIusedFields :: ([Identifier])
_rhsIusedLocals :: ([Identifier])
_lhsOnExplicitRules =
(
if explicit_
then 1
else 0
)
_lhsOnAutoRules =
(
if startsWith "use rule" origin_ || startsWith "copy rule" origin_
then 1
else 0
)
_defines =
(
let tp field attr | field == _LOC || field == _INST
= Map.lookup attr _lhsIallTypeSigs
| field == _LHS = Map.lookup attr _lhsIsyn
| otherwise = Map.lookup attr (findWithErr1 "Rule.defines.tp" field _lhsIchildInhs)
typ :: Pattern -> Maybe Type
typ (Alias field attr _) = tp field attr
typ (Underscore _) = Nothing
typ _ = Nothing
in Map.fromList [ (findWithErr1 "Rule.defines" aa _lhsIaltAttrs, (field,attr,(tp field attr)))
| (field,attr,isLocalOrInst) <- _patternIpatternAttrs
, let aa = AltAttr field attr isLocalOrInst
]
)
_gathRules =
(
let childnt field = Map.lookup field _lhsIchildNts
in Seq.fromList [ CRule attr False True _lhsInt _lhsIcon field (childnt field) tp _patternIcopy _rhsItextLines _defines owrt_ origin_ _rhsIallRhsVars explicit_ mbName_
| (field,attr,tp) <- Map.elems _defines
]
)
_lhsOdirectDep =
(
let defined = Map.keys _defines
used = [ Map.lookup (AltAttr field attr True) _lhsIaltAttrs | (field,attr) <- _rhsIusedAttrs]
++ [ Map.lookup (AltAttr _LOC attr True) _lhsIaltAttrs | attr <- _rhsIusedLocals ++ _rhsIusedFields ]
in Seq.fromList [ (x,y) | Just x <- used, y <- defined ]
)
_instDep1 =
(
Seq.fromList $
[ (instVert, synVert)
| (field,instNm,_) <- Map.elems _defines
, field == _INST
, synNm <- Map.keys (findWithErr2 instNm _lhsIsynsOfChildren)
, let instAttr = AltAttr _INST instNm True
synAttr = AltAttr instNm synNm True
instVert = findWithErr2 instAttr _lhsIaltAttrs
synVert = findWithErr2 synAttr _lhsIaltAttrs
]
)
_instDep2 =
(
Seq.fromList $
[ (instVert, inhVert)
| (field,instNm,_) <- Map.elems _defines
, field == _INST
, inhNm <- Map.keys (findWithErr2 instNm _lhsIinhsOfChildren)
, let instAttr = AltAttr _INST instNm True
inhAttr = AltAttr instNm inhNm False
instVert = findWithErr2 instAttr _lhsIaltAttrs
inhVert = findWithErr2 inhAttr _lhsIaltAttrs
]
)
_lhsOinstDep =
(
_instDep1 Seq.>< _instDep2
)
_lhsOerrors =
(
_patternIerrors Seq.>< _rhsIerrors
)
_lhsOgathAltAttrs =
(
_patternIgathAltAttrs
)
_lhsOgathRules =
(
_gathRules
)
_lhsOinstVars =
(
_patternIinstVars
)
_lhsOlocVars =
(
_patternIlocVars
)
_patternOallTypeSigs =
(
_lhsIallTypeSigs
)
_patternOaltAttrs =
(
_lhsIaltAttrs
)
_patternOcon =
(
_lhsIcon
)
_patternOinh =
(
_lhsIinh
)
_patternOnt =
(
_lhsInt
)
_patternOsyn =
(
_lhsIsyn
)
_rhsOallfields =
(
_lhsIallfields
)
_rhsOallnts =
(
_lhsIallnts
)
_rhsOattrs =
(
_lhsIattrs
)
_rhsOcon =
(
_lhsIcon
)
_rhsOmergeMap =
(
_lhsImergeMap
)
_rhsOnt =
(
_lhsInt
)
( _patternIcopy,_patternIerrors,_patternIgathAltAttrs,_patternIinstVars,_patternIlocVars,_patternIpatternAttrs) =
pattern_ _patternOallTypeSigs _patternOaltAttrs _patternOcon _patternOinh _patternOnt _patternOsyn
( _rhsIallRhsVars,_rhsIcopy,_rhsIerrors,_rhsItextLines,_rhsIusedAttrs,_rhsIusedFields,_rhsIusedLocals) =
rhs_ _rhsOallfields _rhsOallnts _rhsOattrs _rhsOcon _rhsOmergeMap _rhsOnt
in ( _lhsOdirectDep,_lhsOerrors,_lhsOgathAltAttrs,_lhsOgathRules,_lhsOinstDep,_lhsOinstVars,_lhsOlocVars,_lhsOnAutoRules,_lhsOnExplicitRules))))
sem_Rules :: Rules ->
T_Rules
sem_Rules list =
(Prelude.foldr sem_Rules_Cons sem_Rules_Nil (Prelude.map sem_Rule list))
newtype T_Rules = T_Rules ((Map Identifier Type) ->
([(Identifier,Type,ChildKind)]) ->
([Identifier]) ->
(Map AltAttr Vertex) ->
([(Identifier,Identifier)]) ->
(Map Identifier Attributes) ->
(Map Identifier NontermIdent) ->
Identifier ->
Attributes ->
(Map Identifier Attributes) ->
(Map Identifier (Identifier,[Identifier])) ->
Identifier ->
Bool ->
Bool ->
Bool ->
Bool ->
Bool ->
Bool ->
Bool ->
Bool ->
String ->
Attributes ->
(Map Identifier Attributes) ->
( (Seq Edge),(Seq Error),([AltAttr]),(Seq CRule),(Seq Edge),([Identifier]),([Identifier]),Int,Int))
data Inh_Rules = Inh_Rules {allTypeSigs_Inh_Rules :: !((Map Identifier Type)),allfields_Inh_Rules :: !(([(Identifier,Type,ChildKind)])),allnts_Inh_Rules :: !(([Identifier])),altAttrs_Inh_Rules :: !((Map AltAttr Vertex)),attrs_Inh_Rules :: !(([(Identifier,Identifier)])),childInhs_Inh_Rules :: !((Map Identifier Attributes)),childNts_Inh_Rules :: !((Map Identifier NontermIdent)),con_Inh_Rules :: !(Identifier),inh_Inh_Rules :: !(Attributes),inhsOfChildren_Inh_Rules :: !((Map Identifier Attributes)),mergeMap_Inh_Rules :: !((Map Identifier (Identifier,[Identifier]))),nt_Inh_Rules :: !(Identifier),o_case_Inh_Rules :: !(Bool),o_cata_Inh_Rules :: !(Bool),o_dovisit_Inh_Rules :: !(Bool),o_newtypes_Inh_Rules :: !(Bool),o_rename_Inh_Rules :: !(Bool),o_sem_Inh_Rules :: !(Bool),o_sig_Inh_Rules :: !(Bool),o_wantvisit_Inh_Rules :: !(Bool),prefix_Inh_Rules :: !(String),syn_Inh_Rules :: !(Attributes),synsOfChildren_Inh_Rules :: !((Map Identifier Attributes))}
data Syn_Rules = Syn_Rules {directDep_Syn_Rules :: !((Seq Edge)),errors_Syn_Rules :: !((Seq Error)),gathAltAttrs_Syn_Rules :: !(([AltAttr])),gathRules_Syn_Rules :: !((Seq CRule)),instDep_Syn_Rules :: !((Seq Edge)),instVars_Syn_Rules :: !(([Identifier])),locVars_Syn_Rules :: !(([Identifier])),nAutoRules_Syn_Rules :: !(Int),nExplicitRules_Syn_Rules :: !(Int)}
wrap_Rules :: T_Rules ->
Inh_Rules ->
Syn_Rules
wrap_Rules (T_Rules sem) (Inh_Rules _lhsIallTypeSigs _lhsIallfields _lhsIallnts _lhsIaltAttrs _lhsIattrs _lhsIchildInhs _lhsIchildNts _lhsIcon _lhsIinh _lhsIinhsOfChildren _lhsImergeMap _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_dovisit _lhsIo_newtypes _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_wantvisit _lhsIprefix _lhsIsyn _lhsIsynsOfChildren) =
(let ( _lhsOdirectDep,_lhsOerrors,_lhsOgathAltAttrs,_lhsOgathRules,_lhsOinstDep,_lhsOinstVars,_lhsOlocVars,_lhsOnAutoRules,_lhsOnExplicitRules) = sem _lhsIallTypeSigs _lhsIallfields _lhsIallnts _lhsIaltAttrs _lhsIattrs _lhsIchildInhs _lhsIchildNts _lhsIcon _lhsIinh _lhsIinhsOfChildren _lhsImergeMap _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_dovisit _lhsIo_newtypes _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_wantvisit _lhsIprefix _lhsIsyn _lhsIsynsOfChildren
in (Syn_Rules _lhsOdirectDep _lhsOerrors _lhsOgathAltAttrs _lhsOgathRules _lhsOinstDep _lhsOinstVars _lhsOlocVars _lhsOnAutoRules _lhsOnExplicitRules))
sem_Rules_Cons :: T_Rule ->
T_Rules ->
T_Rules
sem_Rules_Cons (T_Rule hd_) (T_Rules tl_) =
(T_Rules (\ _lhsIallTypeSigs
_lhsIallfields
_lhsIallnts
_lhsIaltAttrs
_lhsIattrs
_lhsIchildInhs
_lhsIchildNts
_lhsIcon
_lhsIinh
_lhsIinhsOfChildren
_lhsImergeMap
_lhsInt
_lhsIo_case
_lhsIo_cata
_lhsIo_dovisit
_lhsIo_newtypes
_lhsIo_rename
_lhsIo_sem
_lhsIo_sig
_lhsIo_wantvisit
_lhsIprefix
_lhsIsyn
_lhsIsynsOfChildren ->
(let _lhsOdirectDep :: (Seq Edge)
_lhsOerrors :: (Seq Error)
_lhsOgathAltAttrs :: ([AltAttr])
_lhsOgathRules :: (Seq CRule)
_lhsOinstDep :: (Seq Edge)
_lhsOinstVars :: ([Identifier])
_lhsOlocVars :: ([Identifier])
_lhsOnAutoRules :: Int
_lhsOnExplicitRules :: Int
_hdOallTypeSigs :: (Map Identifier Type)
_hdOallfields :: ([(Identifier,Type,ChildKind)])
_hdOallnts :: ([Identifier])
_hdOaltAttrs :: (Map AltAttr Vertex)
_hdOattrs :: ([(Identifier,Identifier)])
_hdOchildInhs :: (Map Identifier Attributes)
_hdOchildNts :: (Map Identifier NontermIdent)
_hdOcon :: Identifier
_hdOinh :: Attributes
_hdOinhsOfChildren :: (Map Identifier Attributes)
_hdOmergeMap :: (Map Identifier (Identifier,[Identifier]))
_hdOnt :: Identifier
_hdOo_case :: Bool
_hdOo_cata :: Bool
_hdOo_dovisit :: Bool
_hdOo_newtypes :: Bool
_hdOo_rename :: Bool
_hdOo_sem :: Bool
_hdOo_sig :: Bool
_hdOo_wantvisit :: Bool
_hdOprefix :: String
_hdOsyn :: Attributes
_hdOsynsOfChildren :: (Map Identifier Attributes)
_tlOallTypeSigs :: (Map Identifier Type)
_tlOallfields :: ([(Identifier,Type,ChildKind)])
_tlOallnts :: ([Identifier])
_tlOaltAttrs :: (Map AltAttr Vertex)
_tlOattrs :: ([(Identifier,Identifier)])
_tlOchildInhs :: (Map Identifier Attributes)
_tlOchildNts :: (Map Identifier NontermIdent)
_tlOcon :: Identifier
_tlOinh :: Attributes
_tlOinhsOfChildren :: (Map Identifier Attributes)
_tlOmergeMap :: (Map Identifier (Identifier,[Identifier]))
_tlOnt :: Identifier
_tlOo_case :: Bool
_tlOo_cata :: Bool
_tlOo_dovisit :: Bool
_tlOo_newtypes :: Bool
_tlOo_rename :: Bool
_tlOo_sem :: Bool
_tlOo_sig :: Bool
_tlOo_wantvisit :: Bool
_tlOprefix :: String
_tlOsyn :: Attributes
_tlOsynsOfChildren :: (Map Identifier Attributes)
_hdIdirectDep :: (Seq Edge)
_hdIerrors :: (Seq Error)
_hdIgathAltAttrs :: ([AltAttr])
_hdIgathRules :: (Seq CRule)
_hdIinstDep :: (Seq Edge)
_hdIinstVars :: ([Identifier])
_hdIlocVars :: ([Identifier])
_hdInAutoRules :: Int
_hdInExplicitRules :: Int
_tlIdirectDep :: (Seq Edge)
_tlIerrors :: (Seq Error)
_tlIgathAltAttrs :: ([AltAttr])
_tlIgathRules :: (Seq CRule)
_tlIinstDep :: (Seq Edge)
_tlIinstVars :: ([Identifier])
_tlIlocVars :: ([Identifier])
_tlInAutoRules :: Int
_tlInExplicitRules :: Int
_lhsOdirectDep =
(
_hdIdirectDep Seq.>< _tlIdirectDep
)
_lhsOerrors =
(
_hdIerrors Seq.>< _tlIerrors
)
_lhsOgathAltAttrs =
(
_hdIgathAltAttrs ++ _tlIgathAltAttrs
)
_lhsOgathRules =
(
_hdIgathRules Seq.>< _tlIgathRules
)
_lhsOinstDep =
(
_hdIinstDep Seq.>< _tlIinstDep
)
_lhsOinstVars =
(
_hdIinstVars ++ _tlIinstVars
)
_lhsOlocVars =
(
_hdIlocVars ++ _tlIlocVars
)
_lhsOnAutoRules =
(
_hdInAutoRules + _tlInAutoRules
)
_lhsOnExplicitRules =
(
_hdInExplicitRules + _tlInExplicitRules
)
_hdOallTypeSigs =
(
_lhsIallTypeSigs
)
_hdOallfields =
(
_lhsIallfields
)
_hdOallnts =
(
_lhsIallnts
)
_hdOaltAttrs =
(
_lhsIaltAttrs
)
_hdOattrs =
(
_lhsIattrs
)
_hdOchildInhs =
(
_lhsIchildInhs
)
_hdOchildNts =
(
_lhsIchildNts
)
_hdOcon =
(
_lhsIcon
)
_hdOinh =
(
_lhsIinh
)
_hdOinhsOfChildren =
(
_lhsIinhsOfChildren
)
_hdOmergeMap =
(
_lhsImergeMap
)
_hdOnt =
(
_lhsInt
)
_hdOo_case =
(
_lhsIo_case
)
_hdOo_cata =
(
_lhsIo_cata
)
_hdOo_dovisit =
(
_lhsIo_dovisit
)
_hdOo_newtypes =
(
_lhsIo_newtypes
)
_hdOo_rename =
(
_lhsIo_rename
)
_hdOo_sem =
(
_lhsIo_sem
)
_hdOo_sig =
(
_lhsIo_sig
)
_hdOo_wantvisit =
(
_lhsIo_wantvisit
)
_hdOprefix =
(
_lhsIprefix
)
_hdOsyn =
(
_lhsIsyn
)
_hdOsynsOfChildren =
(
_lhsIsynsOfChildren
)
_tlOallTypeSigs =
(
_lhsIallTypeSigs
)
_tlOallfields =
(
_lhsIallfields
)
_tlOallnts =
(
_lhsIallnts
)
_tlOaltAttrs =
(
_lhsIaltAttrs
)
_tlOattrs =
(
_lhsIattrs
)
_tlOchildInhs =
(
_lhsIchildInhs
)
_tlOchildNts =
(
_lhsIchildNts
)
_tlOcon =
(
_lhsIcon
)
_tlOinh =
(
_lhsIinh
)
_tlOinhsOfChildren =
(
_lhsIinhsOfChildren
)
_tlOmergeMap =
(
_lhsImergeMap
)
_tlOnt =
(
_lhsInt
)
_tlOo_case =
(
_lhsIo_case
)
_tlOo_cata =
(
_lhsIo_cata
)
_tlOo_dovisit =
(
_lhsIo_dovisit
)
_tlOo_newtypes =
(
_lhsIo_newtypes
)
_tlOo_rename =
(
_lhsIo_rename
)
_tlOo_sem =
(
_lhsIo_sem
)
_tlOo_sig =
(
_lhsIo_sig
)
_tlOo_wantvisit =
(
_lhsIo_wantvisit
)
_tlOprefix =
(
_lhsIprefix
)
_tlOsyn =
(
_lhsIsyn
)
_tlOsynsOfChildren =
(
_lhsIsynsOfChildren
)
( _hdIdirectDep,_hdIerrors,_hdIgathAltAttrs,_hdIgathRules,_hdIinstDep,_hdIinstVars,_hdIlocVars,_hdInAutoRules,_hdInExplicitRules) =
hd_ _hdOallTypeSigs _hdOallfields _hdOallnts _hdOaltAttrs _hdOattrs _hdOchildInhs _hdOchildNts _hdOcon _hdOinh _hdOinhsOfChildren _hdOmergeMap _hdOnt _hdOo_case _hdOo_cata _hdOo_dovisit _hdOo_newtypes _hdOo_rename _hdOo_sem _hdOo_sig _hdOo_wantvisit _hdOprefix _hdOsyn _hdOsynsOfChildren
( _tlIdirectDep,_tlIerrors,_tlIgathAltAttrs,_tlIgathRules,_tlIinstDep,_tlIinstVars,_tlIlocVars,_tlInAutoRules,_tlInExplicitRules) =
tl_ _tlOallTypeSigs _tlOallfields _tlOallnts _tlOaltAttrs _tlOattrs _tlOchildInhs _tlOchildNts _tlOcon _tlOinh _tlOinhsOfChildren _tlOmergeMap _tlOnt _tlOo_case _tlOo_cata _tlOo_dovisit _tlOo_newtypes _tlOo_rename _tlOo_sem _tlOo_sig _tlOo_wantvisit _tlOprefix _tlOsyn _tlOsynsOfChildren
in ( _lhsOdirectDep,_lhsOerrors,_lhsOgathAltAttrs,_lhsOgathRules,_lhsOinstDep,_lhsOinstVars,_lhsOlocVars,_lhsOnAutoRules,_lhsOnExplicitRules))))
sem_Rules_Nil :: T_Rules
sem_Rules_Nil =
(T_Rules (\ _lhsIallTypeSigs
_lhsIallfields
_lhsIallnts
_lhsIaltAttrs
_lhsIattrs
_lhsIchildInhs
_lhsIchildNts
_lhsIcon
_lhsIinh
_lhsIinhsOfChildren
_lhsImergeMap
_lhsInt
_lhsIo_case
_lhsIo_cata
_lhsIo_dovisit
_lhsIo_newtypes
_lhsIo_rename
_lhsIo_sem
_lhsIo_sig
_lhsIo_wantvisit
_lhsIprefix
_lhsIsyn
_lhsIsynsOfChildren ->
(let _lhsOdirectDep :: (Seq Edge)
_lhsOerrors :: (Seq Error)
_lhsOgathAltAttrs :: ([AltAttr])
_lhsOgathRules :: (Seq CRule)
_lhsOinstDep :: (Seq Edge)
_lhsOinstVars :: ([Identifier])
_lhsOlocVars :: ([Identifier])
_lhsOnAutoRules :: Int
_lhsOnExplicitRules :: Int
_lhsOdirectDep =
(
Seq.empty
)
_lhsOerrors =
(
Seq.empty
)
_lhsOgathAltAttrs =
(
[]
)
_lhsOgathRules =
(
Seq.empty
)
_lhsOinstDep =
(
Seq.empty
)
_lhsOinstVars =
(
[]
)
_lhsOlocVars =
(
[]
)
_lhsOnAutoRules =
(
0
)
_lhsOnExplicitRules =
(
0
)
in ( _lhsOdirectDep,_lhsOerrors,_lhsOgathAltAttrs,_lhsOgathRules,_lhsOinstDep,_lhsOinstVars,_lhsOlocVars,_lhsOnAutoRules,_lhsOnExplicitRules))))
sem_TypeSig :: TypeSig ->
T_TypeSig
sem_TypeSig (TypeSig _name _tp) =
(sem_TypeSig_TypeSig _name _tp)
newtype T_TypeSig = T_TypeSig ((Map Identifier Type) ->
( (Map Identifier Type)))
data Inh_TypeSig = Inh_TypeSig {typeSigs_Inh_TypeSig :: !((Map Identifier Type))}
data Syn_TypeSig = Syn_TypeSig {typeSigs_Syn_TypeSig :: !((Map Identifier Type))}
wrap_TypeSig :: T_TypeSig ->
Inh_TypeSig ->
Syn_TypeSig
wrap_TypeSig (T_TypeSig sem) (Inh_TypeSig _lhsItypeSigs) =
(let ( _lhsOtypeSigs) = sem _lhsItypeSigs
in (Syn_TypeSig _lhsOtypeSigs))
sem_TypeSig_TypeSig :: Identifier ->
Type ->
T_TypeSig
sem_TypeSig_TypeSig name_ tp_ =
(T_TypeSig (\ _lhsItypeSigs ->
(let _lhsOtypeSigs :: (Map Identifier Type)
_lhsOtypeSigs =
(
Map.insert name_ tp_ _lhsItypeSigs
)
in ( _lhsOtypeSigs))))
sem_TypeSigs :: TypeSigs ->
T_TypeSigs
sem_TypeSigs list =
(Prelude.foldr sem_TypeSigs_Cons sem_TypeSigs_Nil (Prelude.map sem_TypeSig list))
newtype T_TypeSigs = T_TypeSigs ((Map Identifier Type) ->
( (Map Identifier Type)))
data Inh_TypeSigs = Inh_TypeSigs {typeSigs_Inh_TypeSigs :: !((Map Identifier Type))}
data Syn_TypeSigs = Syn_TypeSigs {typeSigs_Syn_TypeSigs :: !((Map Identifier Type))}
wrap_TypeSigs :: T_TypeSigs ->
Inh_TypeSigs ->
Syn_TypeSigs
wrap_TypeSigs (T_TypeSigs sem) (Inh_TypeSigs _lhsItypeSigs) =
(let ( _lhsOtypeSigs) = sem _lhsItypeSigs
in (Syn_TypeSigs _lhsOtypeSigs))
sem_TypeSigs_Cons :: T_TypeSig ->
T_TypeSigs ->
T_TypeSigs
sem_TypeSigs_Cons (T_TypeSig hd_) (T_TypeSigs tl_) =
(T_TypeSigs (\ _lhsItypeSigs ->
(let _lhsOtypeSigs :: (Map Identifier Type)
_hdOtypeSigs :: (Map Identifier Type)
_tlOtypeSigs :: (Map Identifier Type)
_hdItypeSigs :: (Map Identifier Type)
_tlItypeSigs :: (Map Identifier Type)
_lhsOtypeSigs =
(
_tlItypeSigs
)
_hdOtypeSigs =
(
_lhsItypeSigs
)
_tlOtypeSigs =
(
_hdItypeSigs
)
( _hdItypeSigs) =
hd_ _hdOtypeSigs
( _tlItypeSigs) =
tl_ _tlOtypeSigs
in ( _lhsOtypeSigs))))
sem_TypeSigs_Nil :: T_TypeSigs
sem_TypeSigs_Nil =
(T_TypeSigs (\ _lhsItypeSigs ->
(let _lhsOtypeSigs :: (Map Identifier Type)
_lhsOtypeSigs =
(
_lhsItypeSigs
)
in ( _lhsOtypeSigs))))