uuagc 0.9.38.5 → 0.9.38.6
raw patch · 12 files changed
+4968/−334 lines, 12 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- src-derived/ExecutionPlan.hs +148/−0
- src-derived/ExecutionPlan2Hs.hs +3717/−0
- src-derived/GenerateCode.hs +5/−5
- src-derived/HsToken.hs +2/−1
- src-derived/KWOrder.hs +426/−279
- src/Ag.hs +5/−2
- src/CommonTypes.hs +2/−0
- src/KennedyWarren.hs +553/−13
- src/Knuth1.hs +105/−31
- src/Version.hs +1/−1
- uuagc.cabal +3/−1
- uuagc.cabal-for-ghc-6.6 +1/−1
+ src-derived/ExecutionPlan.hs view
@@ -0,0 +1,148 @@+++-- UUAGC 0.9.38.2 (ExecutionPlan.ag)+module ExecutionPlan where+{-# LINE 2 "ExecutionPlan.ag" #-}++-- VisitSyntax.ag imports+import Patterns (Pattern(..),Patterns)+import Expression (Expression(..))+import CommonTypes++import qualified Data.Set as Set+{-# LINE 14 "../src-derived/ExecutionPlan.hs" #-}+-- EChild ------------------------------------------------------+{-+ alternatives:+ alternative EChild:+ child name : {Identifier}+ child tp : {Type}+ child virtual : {Maybe (Maybe Type)}+-}+data EChild = EChild (Identifier) (Type) ((Maybe (Maybe Type))) +-- EChildren ---------------------------------------------------+{-+ alternatives:+ alternative Cons:+ child hd : EChild + child tl : EChildren + alternative Nil:+-}+type EChildren = [EChild ]+-- ENonterminal ------------------------------------------------+{-+ alternatives:+ alternative ENonterminal:+ child nt : {NontermIdent}+ child params : {[Identifier]}+ child initial : {StateIdentifier}+ child initialv : {Maybe VisitIdentifier}+ child prods : EProductions +-}+data ENonterminal = ENonterminal (NontermIdent) (([Identifier])) (StateIdentifier) ((Maybe VisitIdentifier)) (EProductions ) +-- ENonterminals -----------------------------------------------+{-+ alternatives:+ alternative Cons:+ child hd : ENonterminal + child tl : ENonterminals + alternative Nil:+-}+type ENonterminals = [ENonterminal ]+-- EProduction -------------------------------------------------+{-+ alternatives:+ alternative EProduction:+ child con : {ConstructorIdent}+ child rules : ERules + child children : EChildren + child visits : Visits +-}+data EProduction = EProduction (ConstructorIdent) (ERules ) (EChildren ) (Visits ) +-- EProductions ------------------------------------------------+{-+ alternatives:+ alternative Cons:+ child hd : EProduction + child tl : EProductions + alternative Nil:+-}+type EProductions = [EProduction ]+-- ERule -------------------------------------------------------+{-+ alternatives:+ alternative ERule:+ child name : {Identifier}+ child pattern : {Pattern}+ child rhs : {Expression}+ child owrt : {Bool}+ child origin : {String}+ child explicit : {Bool}+-}+data ERule = ERule (Identifier) (Pattern) (Expression) (Bool) (String) (Bool) +-- ERules ------------------------------------------------------+{-+ alternatives:+ alternative Cons:+ child hd : ERule + child tl : ERules + alternative Nil:+-}+type ERules = [ERule ]+-- ExecutionPlan -----------------------------------------------+{-+ alternatives:+ alternative ExecutionPlan:+ child nonts : ENonterminals + child typeSyns : {TypeSyns}+ child wrappers : {Set.Set NontermIdent}+-}+data ExecutionPlan = ExecutionPlan (ENonterminals ) (TypeSyns) ((Set.Set NontermIdent)) +-- Visit -------------------------------------------------------+{-+ alternatives:+ alternative Visit:+ child ident : {VisitIdentifier}+ child from : {StateIdentifier}+ child to : {StateIdentifier}+ child inh : {Set.Set Identifier}+ child syn : {Set.Set Identifier}+ child steps : VisitSteps +-}+data Visit = Visit (VisitIdentifier) (StateIdentifier) (StateIdentifier) ((Set.Set Identifier)) ((Set.Set Identifier)) (VisitSteps ) +-- VisitStep ---------------------------------------------------+{-+ alternatives:+ alternative ChildIntro:+ child child : {Identifier}+ alternative ChildVisit:+ child child : {Identifier}+ child nonterm : {NontermIdent}+ child visit : {VisitIdentifier}+ alternative Sem:+ child name : {Identifier}+ alternative Sim:+ child steps : VisitSteps +-}+data VisitStep = ChildIntro (Identifier) + | ChildVisit (Identifier) (NontermIdent) (VisitIdentifier) + | Sem (Identifier) + | Sim (VisitSteps ) +-- VisitSteps --------------------------------------------------+{-+ alternatives:+ alternative Cons:+ child hd : VisitStep + child tl : VisitSteps + alternative Nil:+-}+type VisitSteps = [VisitStep ]+-- Visits ------------------------------------------------------+{-+ alternatives:+ alternative Cons:+ child hd : Visit + child tl : Visits + alternative Nil:+-}+type Visits = [Visit ]
+ src-derived/ExecutionPlan2Hs.hs view
@@ -0,0 +1,3717 @@+++-- UUAGC 0.9.38.2 (ExecutionPlan2Hs.ag)+module ExecutionPlan2Hs where+{-# LINE 7 "ExecutionPlan2Hs.ag" #-}++import ExecutionPlan+import Pretty+import PPUtil+import Options+import Data.Maybe+import Debug.Trace++import TokenDef+import HsToken++import qualified Data.Set as Set+import qualified Data.Map as Map+{-# LINE 20 "../src-derived/ExecutionPlan2Hs.hs" #-}++{-# LINE 2 "./ExecutionPlan.ag" #-}++-- VisitSyntax.ag imports+import Patterns (Pattern(..),Patterns)+import Expression (Expression(..))+import CommonTypes++import qualified Data.Set as Set+{-# LINE 30 "../src-derived/ExecutionPlan2Hs.hs" #-}++{-# LINE 2 "./Patterns.ag" #-}++-- Patterns.ag imports+import UU.Scanner.Position(Pos)+import CommonTypes (ConstructorIdent,Identifier)+{-# LINE 37 "../src-derived/ExecutionPlan2Hs.hs" #-}++{-# LINE 2 "./Expression.ag" #-}++import UU.Scanner.Position(Pos)+import HsToken+{-# LINE 43 "../src-derived/ExecutionPlan2Hs.hs" #-}++{-# LINE 2 "./HsToken.ag" #-}++import CommonTypes+import UU.Scanner.Position(Pos)+{-# LINE 49 "../src-derived/ExecutionPlan2Hs.hs" #-}+{-# LINE 393 "ExecutionPlan2Hs.ag" #-}++uwSetUnion :: (Ord a, Ord b) => Map.Map a (Set.Set b) -> Map.Map a (Set.Set b) -> Map.Map a (Set.Set b)+uwSetUnion = Map.unionWith Set.union+{-# LINE 54 "../src-derived/ExecutionPlan2Hs.hs" #-}+-- EChild ------------------------------------------------------+{-+ visit 0:+ inherited attribute:+ nt : NontermIdent+ synthesized attributes:+ argnames : PP_Doc + argnamesw : PP_Doc + argtps : PP_Doc + childintros : Map.Map Identifier PP_Doc+ datatype : PP_Doc+ terminaldefs : Set.Set String+ alternatives:+ alternative EChild:+ child name : {Identifier}+ child tp : {Type}+ child virtual : {Maybe (Maybe Type)}+ visit 0:+ local argnames : _+-}+-- cata+sem_EChild :: EChild ->+ T_EChild +sem_EChild (EChild _name _tp _virtual ) =+ (sem_EChild_EChild _name _tp _virtual )+-- semantic domain+newtype T_EChild = T_EChild (NontermIdent ->+ ( ( PP_Doc ),( PP_Doc ),( PP_Doc ),(Map.Map Identifier PP_Doc),PP_Doc,(Set.Set String)))+data Inh_EChild = Inh_EChild {nt_Inh_EChild :: NontermIdent}+data Syn_EChild = Syn_EChild {argnames_Syn_EChild :: ( PP_Doc ),argnamesw_Syn_EChild :: ( PP_Doc ),argtps_Syn_EChild :: ( PP_Doc ),childintros_Syn_EChild :: (Map.Map Identifier PP_Doc),datatype_Syn_EChild :: PP_Doc,terminaldefs_Syn_EChild :: (Set.Set String)}+wrap_EChild :: T_EChild ->+ Inh_EChild ->+ Syn_EChild +wrap_EChild (T_EChild sem ) (Inh_EChild _lhsInt ) =+ (let ( _lhsOargnames,_lhsOargnamesw,_lhsOargtps,_lhsOchildintros,_lhsOdatatype,_lhsOterminaldefs) = sem _lhsInt + in (Syn_EChild _lhsOargnames _lhsOargnamesw _lhsOargtps _lhsOchildintros _lhsOdatatype _lhsOterminaldefs ))+sem_EChild_EChild :: Identifier ->+ Type ->+ (Maybe (Maybe Type)) ->+ T_EChild +sem_EChild_EChild name_ tp_ virtual_ =+ (T_EChild (\ _lhsInt ->+ (let _lhsOdatatype :: PP_Doc+ _lhsOargnamesw :: ( PP_Doc )+ _lhsOargtps :: ( PP_Doc )+ _lhsOchildintros :: (Map.Map Identifier PP_Doc)+ _lhsOterminaldefs :: (Set.Set String)+ _lhsOargnames :: ( PP_Doc )+ -- "ExecutionPlan2Hs.ag"(line 90, column 12)+ _lhsOdatatype =+ ({-# LINE 90 "ExecutionPlan2Hs.ag" #-}+ if isJust virtual_+ then empty+ else pp $ typeToHaskellString (Just _lhsInt) [] tp_+ {-# LINE 109 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 112, column 12)+ _lhsOargnamesw =+ ({-# LINE 112 "ExecutionPlan2Hs.ag" #-}+ if isJust virtual_+ then empty+ else if isNonterminal tp_+ then "(" >#< "sem_" >|< extractNonterminal tp_ >#< "field_" >|< name_ >#< ")"+ else text $ locname name_+ {-# LINE 119 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 256, column 12)+ _lhsOargtps =+ ({-# LINE 256 "ExecutionPlan2Hs.ag" #-}+ if isJust virtual_+ then empty+ else if isNonterminal tp_+ then ("T_" >|< extractNonterminal tp_) >#< "->"+ else (text $ show tp_) >#< "->"+ {-# LINE 129 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 261, column 12)+ _argnames =+ ({-# LINE 261 "ExecutionPlan2Hs.ag" #-}+ if isJust virtual_+ then empty+ else if isNonterminal tp_+ then "field_" >|< name_+ else text $ locname name_+ {-# LINE 139 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 327, column 12)+ _lhsOchildintros =+ ({-# LINE 327 "ExecutionPlan2Hs.ag" #-}+ Map.singleton name_ $ locname name_ >#< "<-" >#< "return" >#< "$" >#<+ if isJust virtual_+ then "sem_" >|< extractNonterminal tp_ >#< instname name_+ else "field_" >|< name_+ {-# LINE 148 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 404, column 12)+ _lhsOterminaldefs =+ ({-# LINE 404 "ExecutionPlan2Hs.ag" #-}+ if isJust virtual_ || isNonterminal tp_+ then Set.empty+ else Set.singleton $ locname name_+ {-# LINE 156 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (from local)+ _lhsOargnames =+ ({-# LINE 251 "ExecutionPlan2Hs.ag" #-}+ _argnames+ {-# LINE 162 "ExecutionPlan2Hs.hs" #-}+ )+ in ( _lhsOargnames,_lhsOargnamesw,_lhsOargtps,_lhsOchildintros,_lhsOdatatype,_lhsOterminaldefs))) )+-- EChildren ---------------------------------------------------+{-+ visit 0:+ inherited attribute:+ nt : NontermIdent+ synthesized attributes:+ argnames : [PP_Doc] + argnamesw : [PP_Doc]+ argtps : [PP_Doc] + childintros : Map.Map Identifier PP_Doc+ datatype : [PP_Doc]+ terminaldefs : Set.Set String+ alternatives:+ alternative Cons:+ child hd : EChild + child tl : EChildren + alternative Nil:+-}+-- cata+sem_EChildren :: EChildren ->+ T_EChildren +sem_EChildren list =+ (Prelude.foldr sem_EChildren_Cons sem_EChildren_Nil (Prelude.map sem_EChild list) )+-- semantic domain+newtype T_EChildren = T_EChildren (NontermIdent ->+ ( ( [PP_Doc] ),([PP_Doc]),( [PP_Doc] ),(Map.Map Identifier PP_Doc),([PP_Doc]),(Set.Set String)))+data Inh_EChildren = Inh_EChildren {nt_Inh_EChildren :: NontermIdent}+data Syn_EChildren = Syn_EChildren {argnames_Syn_EChildren :: ( [PP_Doc] ),argnamesw_Syn_EChildren :: ([PP_Doc]),argtps_Syn_EChildren :: ( [PP_Doc] ),childintros_Syn_EChildren :: (Map.Map Identifier PP_Doc),datatype_Syn_EChildren :: ([PP_Doc]),terminaldefs_Syn_EChildren :: (Set.Set String)}+wrap_EChildren :: T_EChildren ->+ Inh_EChildren ->+ Syn_EChildren +wrap_EChildren (T_EChildren sem ) (Inh_EChildren _lhsInt ) =+ (let ( _lhsOargnames,_lhsOargnamesw,_lhsOargtps,_lhsOchildintros,_lhsOdatatype,_lhsOterminaldefs) = sem _lhsInt + in (Syn_EChildren _lhsOargnames _lhsOargnamesw _lhsOargtps _lhsOchildintros _lhsOdatatype _lhsOterminaldefs ))+sem_EChildren_Cons :: T_EChild ->+ T_EChildren ->+ T_EChildren +sem_EChildren_Cons (T_EChild hd_ ) (T_EChildren tl_ ) =+ (T_EChildren (\ _lhsInt ->+ (let _lhsOargnames :: ( [PP_Doc] )+ _lhsOargnamesw :: ([PP_Doc])+ _lhsOargtps :: ( [PP_Doc] )+ _lhsOchildintros :: (Map.Map Identifier PP_Doc)+ _lhsOdatatype :: ([PP_Doc])+ _lhsOterminaldefs :: (Set.Set String)+ _hdOnt :: NontermIdent+ _tlOnt :: NontermIdent+ _hdIargnames :: ( PP_Doc )+ _hdIargnamesw :: ( PP_Doc )+ _hdIargtps :: ( PP_Doc )+ _hdIchildintros :: (Map.Map Identifier PP_Doc)+ _hdIdatatype :: PP_Doc+ _hdIterminaldefs :: (Set.Set String)+ _tlIargnames :: ( [PP_Doc] )+ _tlIargnamesw :: ([PP_Doc])+ _tlIargtps :: ( [PP_Doc] )+ _tlIchildintros :: (Map.Map Identifier PP_Doc)+ _tlIdatatype :: ([PP_Doc])+ _tlIterminaldefs :: (Set.Set String)+ -- use rule "ExecutionPlan2Hs.ag"(line 253, column 31)+ _lhsOargnames =+ ({-# LINE 253 "ExecutionPlan2Hs.ag" #-}+ _hdIargnames : _tlIargnames+ {-# LINE 228 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 109, column 32)+ _lhsOargnamesw =+ ({-# LINE 109 "ExecutionPlan2Hs.ag" #-}+ _hdIargnamesw : _tlIargnamesw+ {-# LINE 234 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 252, column 31)+ _lhsOargtps =+ ({-# LINE 252 "ExecutionPlan2Hs.ag" #-}+ _hdIargtps : _tlIargtps+ {-# LINE 240 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 318, column 41)+ _lhsOchildintros =+ ({-# LINE 318 "ExecutionPlan2Hs.ag" #-}+ _hdIchildintros `Map.union` _tlIchildintros+ {-# LINE 246 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 87, column 51)+ _lhsOdatatype =+ ({-# LINE 87 "ExecutionPlan2Hs.ag" #-}+ _hdIdatatype : _tlIdatatype+ {-# LINE 252 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 401, column 42)+ _lhsOterminaldefs =+ ({-# LINE 401 "ExecutionPlan2Hs.ag" #-}+ _hdIterminaldefs `Set.union` _tlIterminaldefs+ {-# LINE 258 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOnt =+ ({-# LINE 86 "ExecutionPlan2Hs.ag" #-}+ _lhsInt+ {-# LINE 264 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOnt =+ ({-# LINE 87 "ExecutionPlan2Hs.ag" #-}+ _lhsInt+ {-# LINE 270 "ExecutionPlan2Hs.hs" #-}+ )+ ( _hdIargnames,_hdIargnamesw,_hdIargtps,_hdIchildintros,_hdIdatatype,_hdIterminaldefs) =+ hd_ _hdOnt + ( _tlIargnames,_tlIargnamesw,_tlIargtps,_tlIchildintros,_tlIdatatype,_tlIterminaldefs) =+ tl_ _tlOnt + in ( _lhsOargnames,_lhsOargnamesw,_lhsOargtps,_lhsOchildintros,_lhsOdatatype,_lhsOterminaldefs))) )+sem_EChildren_Nil :: T_EChildren +sem_EChildren_Nil =+ (T_EChildren (\ _lhsInt ->+ (let _lhsOargnames :: ( [PP_Doc] )+ _lhsOargnamesw :: ([PP_Doc])+ _lhsOargtps :: ( [PP_Doc] )+ _lhsOchildintros :: (Map.Map Identifier PP_Doc)+ _lhsOdatatype :: ([PP_Doc])+ _lhsOterminaldefs :: (Set.Set String)+ -- use rule "ExecutionPlan2Hs.ag"(line 253, column 31)+ _lhsOargnames =+ ({-# LINE 253 "ExecutionPlan2Hs.ag" #-}+ []+ {-# LINE 290 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 109, column 32)+ _lhsOargnamesw =+ ({-# LINE 109 "ExecutionPlan2Hs.ag" #-}+ []+ {-# LINE 296 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 252, column 31)+ _lhsOargtps =+ ({-# LINE 252 "ExecutionPlan2Hs.ag" #-}+ []+ {-# LINE 302 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 318, column 41)+ _lhsOchildintros =+ ({-# LINE 318 "ExecutionPlan2Hs.ag" #-}+ Map.empty+ {-# LINE 308 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 87, column 51)+ _lhsOdatatype =+ ({-# LINE 87 "ExecutionPlan2Hs.ag" #-}+ []+ {-# LINE 314 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 401, column 42)+ _lhsOterminaldefs =+ ({-# LINE 401 "ExecutionPlan2Hs.ag" #-}+ Set.empty+ {-# LINE 320 "ExecutionPlan2Hs.hs" #-}+ )+ in ( _lhsOargnames,_lhsOargnamesw,_lhsOargtps,_lhsOchildintros,_lhsOdatatype,_lhsOterminaldefs))) )+-- ENonterminal ------------------------------------------------+{-+ visit 0:+ inherited attributes:+ allchildvisit : Map.Map VisitIdentifier (Identifier -> PP_Doc)+ avisitdefs : Map.Map VisitIdentifier (Set.Set Identifier)+ avisituses : Map.Map VisitIdentifier (Set.Set Identifier)+ inhmap : Map.Map NontermIdent Attributes+ options : Options+ synmap : Map.Map NontermIdent Attributes+ typeSyns : TypeSyns+ wrappers : Set.Set NontermIdent+ synthesized attributes:+ childvisit : Map.Map VisitIdentifier (Identifier -> PP_Doc)+ debugoutput : PP_Doc+ visitdefs : Map.Map VisitIdentifier (Set.Set Identifier)+ visituses : Map.Map VisitIdentifier (Set.Set Identifier)+ alternatives:+ alternative ENonterminal:+ child nt : {NontermIdent}+ child params : {[Identifier]}+ child initial : {StateIdentifier}+ child initialv : {Maybe VisitIdentifier}+ child prods : EProductions + visit 0:+ local datatype : _+ local sem_nt : _+ local outedges : _+ local inedges : _+ local allstates : _+ local t_init : _+ local t_states : _+ local k_states : _+ local wr_inh : _+ local wr_syn : _+ local genwrap : _+ local wr_inhs : _+ local wr_syns : _+ local inhlist : _+ local synlist : _+ local wrapper : _+-}+-- cata+sem_ENonterminal :: ENonterminal ->+ T_ENonterminal +sem_ENonterminal (ENonterminal _nt _params _initial _initialv _prods ) =+ (sem_ENonterminal_ENonterminal _nt _params _initial _initialv (sem_EProductions _prods ) )+-- semantic domain+newtype T_ENonterminal = T_ENonterminal ((Map.Map VisitIdentifier (Identifier -> PP_Doc)) ->+ (Map.Map VisitIdentifier (Set.Set Identifier)) ->+ (Map.Map VisitIdentifier (Set.Set Identifier)) ->+ (Map.Map NontermIdent Attributes) ->+ Options ->+ (Map.Map NontermIdent Attributes) ->+ TypeSyns ->+ (Set.Set NontermIdent) ->+ ( (Map.Map VisitIdentifier (Identifier -> PP_Doc)),PP_Doc,(Map.Map VisitIdentifier (Set.Set Identifier)),(Map.Map VisitIdentifier (Set.Set Identifier))))+data Inh_ENonterminal = Inh_ENonterminal {allchildvisit_Inh_ENonterminal :: (Map.Map VisitIdentifier (Identifier -> PP_Doc)),avisitdefs_Inh_ENonterminal :: (Map.Map VisitIdentifier (Set.Set Identifier)),avisituses_Inh_ENonterminal :: (Map.Map VisitIdentifier (Set.Set Identifier)),inhmap_Inh_ENonterminal :: (Map.Map NontermIdent Attributes),options_Inh_ENonterminal :: Options,synmap_Inh_ENonterminal :: (Map.Map NontermIdent Attributes),typeSyns_Inh_ENonterminal :: TypeSyns,wrappers_Inh_ENonterminal :: (Set.Set NontermIdent)}+data Syn_ENonterminal = Syn_ENonterminal {childvisit_Syn_ENonterminal :: (Map.Map VisitIdentifier (Identifier -> PP_Doc)),debugoutput_Syn_ENonterminal :: PP_Doc,visitdefs_Syn_ENonterminal :: (Map.Map VisitIdentifier (Set.Set Identifier)),visituses_Syn_ENonterminal :: (Map.Map VisitIdentifier (Set.Set Identifier))}+wrap_ENonterminal :: T_ENonterminal ->+ Inh_ENonterminal ->+ Syn_ENonterminal +wrap_ENonterminal (T_ENonterminal sem ) (Inh_ENonterminal _lhsIallchildvisit _lhsIavisitdefs _lhsIavisituses _lhsIinhmap _lhsIoptions _lhsIsynmap _lhsItypeSyns _lhsIwrappers ) =+ (let ( _lhsOchildvisit,_lhsOdebugoutput,_lhsOvisitdefs,_lhsOvisituses) = sem _lhsIallchildvisit _lhsIavisitdefs _lhsIavisituses _lhsIinhmap _lhsIoptions _lhsIsynmap _lhsItypeSyns _lhsIwrappers + in (Syn_ENonterminal _lhsOchildvisit _lhsOdebugoutput _lhsOvisitdefs _lhsOvisituses ))+sem_ENonterminal_ENonterminal :: NontermIdent ->+ ([Identifier]) ->+ StateIdentifier ->+ (Maybe VisitIdentifier) ->+ T_EProductions ->+ T_ENonterminal +sem_ENonterminal_ENonterminal nt_ params_ initial_ initialv_ (T_EProductions prods_ ) =+ (T_ENonterminal (\ _lhsIallchildvisit+ _lhsIavisitdefs+ _lhsIavisituses+ _lhsIinhmap+ _lhsIoptions+ _lhsIsynmap+ _lhsItypeSyns+ _lhsIwrappers ->+ (let _prodsOrename :: Bool+ _lhsOdebugoutput :: PP_Doc+ _prodsOinhmap :: Attributes+ _prodsOsynmap :: Attributes+ _prodsOnt :: NontermIdent+ _prodsOinitial :: StateIdentifier+ _prodsOallstates :: (Set.Set StateIdentifier)+ _lhsOchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))+ _lhsOvisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _lhsOvisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _prodsOallchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))+ _prodsOavisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _prodsOavisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _prodsIallvisits :: ([(VisitIdentifier,StateIdentifier, StateIdentifier)])+ _prodsIchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))+ _prodsIdatatype :: ([PP_Doc])+ _prodsIsem_nt :: PP_Doc+ _prodsIsem_prod :: PP_Doc+ _prodsIt_visits :: PP_Doc+ _prodsIvisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _prodsIvisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))+ -- "ExecutionPlan2Hs.ag"(line 34, column 18)+ _prodsOrename =+ ({-# LINE 34 "ExecutionPlan2Hs.ag" #-}+ rename _lhsIoptions+ {-# LINE 428 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 54, column 18)+ _lhsOdebugoutput =+ ({-# LINE 54 "ExecutionPlan2Hs.ag" #-}+ (if dataTypes _lhsIoptions then _datatype else empty)+ >-< (if nt_ `Set.member` _lhsIwrappers+ then _wr_inh+ >-< _wr_syn+ >-< _wrapper+ else empty)+ >-< _sem_nt+ >-< _t_init+ >-< _t_states+ >-< _k_states+ >-< _prodsIt_visits+ >-< _prodsIsem_prod+ {-# LINE 445 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 74, column 18)+ _datatype =+ ({-# LINE 74 "ExecutionPlan2Hs.ag" #-}+ case lookup nt_ _lhsItypeSyns of+ Nothing -> "data" >#< nt_ >#< (vlist $ ("=" >#< head _prodsIdatatype)+ : (map ("|" >#<) $ tail _prodsIdatatype))+ Just (List t) -> "type" >#< nt_ >#< "=" >#< "[" >#< show t >#< "]"+ Just x -> error $ "Type " ++ show x ++ " is not supported yet"+ {-# LINE 455 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 96, column 18)+ _sem_nt =+ ({-# LINE 96 "ExecutionPlan2Hs.ag" #-}+ "sem_" >|< nt_ >#< "::" >#< nt_ >#< "->" >#< "T_" >|< nt_+ >-< case lookup nt_ _lhsItypeSyns of+ Nothing -> _prodsIsem_nt+ Just (List t) -> "sem_" >|< nt_ >#< "list" >#< "=" >#< "Prelude.foldr sem_"+ >|< nt_ >|< "_Cons" >#< "sem_" >|< nt_ >|< "_Nil"+ >#< "(" >#< "Prelude.map sem_" >|< show t >#< "list" >#< ")"+ {-# LINE 466 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 132, column 19)+ (Just _prodsOinhmap ) =+ ({-# LINE 132 "ExecutionPlan2Hs.ag" #-}+ Map.lookup nt_ _lhsIinhmap+ {-# LINE 472 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 133, column 19)+ (Just _prodsOsynmap ) =+ ({-# LINE 133 "ExecutionPlan2Hs.ag" #-}+ Map.lookup nt_ _lhsIsynmap+ {-# LINE 478 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 149, column 18)+ _outedges =+ ({-# LINE 149 "ExecutionPlan2Hs.ag" #-}+ Set.fromList $ map (\(_,f,_) -> f) _prodsIallvisits+ {-# LINE 484 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 150, column 18)+ _inedges =+ ({-# LINE 150 "ExecutionPlan2Hs.ag" #-}+ Set.fromList $ map (\(_,_,t) -> t) _prodsIallvisits+ {-# LINE 490 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 151, column 18)+ _allstates =+ ({-# LINE 151 "ExecutionPlan2Hs.ag" #-}+ Set.insert initial_ $ _inedges `Set.union` _outedges+ {-# LINE 496 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 152, column 18)+ _t_init =+ ({-# LINE 152 "ExecutionPlan2Hs.ag" #-}+ "type" >#< "T_" >|< nt_ >#< "=" >#< "T_" >|< nt_ >|< "_s" >|< initial_+ {-# LINE 502 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 153, column 18)+ _t_states =+ ({-# LINE 153 "ExecutionPlan2Hs.ag" #-}+ vlist $ map (\st ->+ let nt_st = nt_ >|< "_s" >|< st+ t_st = "T_" >|< nt_st+ k_st = "K_" >|< nt_st+ c_st = "C_" >|< nt_st+ inv_st = "inv_" >|< nt_st+ in "data" >#< t_st >#< "where" >#< c_st >#< "::" >#< "{" >#< inv_st >#< "::"+ >#< "forall t." >#< k_st >#< "t" >#< "->" >#< "t" >#< "}"+ >#< "->" >#< t_st+ ) $ Set.toList _allstates+ {-# LINE 517 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 166, column 18)+ _k_states =+ ({-# LINE 166 "ExecutionPlan2Hs.ag" #-}+ vlist $ map (\st ->+ let nt_st = nt_ >|< "_s" >|< st+ k_st = "K_" >|< nt_st+ outg = filter (\(v,f,t) -> f == st) _prodsIallvisits+ visitlist = vlist $ map (\(v,f,t) ->+ "K_" >|< nt_ >|< "_v" >|< v >#< "::" >#< k_st >#< "T_" >|< nt_ >|< "_v" >|< v+ ) outg+ in "data" >#< k_st >#< "k" >#< "where"+ >-< indent 3 visitlist) $ Set.toList _allstates+ {-# LINE 531 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 194, column 18)+ _prodsOnt =+ ({-# LINE 194 "ExecutionPlan2Hs.ag" #-}+ nt_+ {-# LINE 537 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 210, column 18)+ _wr_inh =+ ({-# LINE 210 "ExecutionPlan2Hs.ag" #-}+ _genwrap "Inh" _wr_inhs+ {-# LINE 543 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 211, column 18)+ _wr_syn =+ ({-# LINE 211 "ExecutionPlan2Hs.ag" #-}+ _genwrap "Syn" _wr_syns+ {-# LINE 549 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 212, column 18)+ _genwrap =+ ({-# LINE 212 "ExecutionPlan2Hs.ag" #-}+ \nm attr -> "data" >#< nm >|< "_" >|< nt_ >#< "=" >#< nm >|< "_" >|< nt_ >#< "{"+ >#< (ppCommas $ map (\(i,t) -> i >|< "_" >|< nm >|< "_" >|< nt_ >#< "::"+ >#< typeToHaskellString (Just nt_) [] t) attr) >#< "}"+ {-# LINE 557 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 215, column 18)+ _wr_inhs =+ ({-# LINE 215 "ExecutionPlan2Hs.ag" #-}+ Map.toList $ fromJust $ Map.lookup nt_ _lhsIinhmap+ {-# LINE 563 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 216, column 18)+ _wr_syns =+ ({-# LINE 216 "ExecutionPlan2Hs.ag" #-}+ Map.toList $ fromJust $ Map.lookup nt_ _lhsIsynmap+ {-# LINE 569 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 217, column 18)+ _inhlist =+ ({-# LINE 217 "ExecutionPlan2Hs.ag" #-}+ map (lhsname True . fst) _wr_inhs+ {-# LINE 575 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 218, column 18)+ _synlist =+ ({-# LINE 218 "ExecutionPlan2Hs.ag" #-}+ map (lhsname False . fst) _wr_syns+ {-# LINE 581 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 219, column 18)+ _wrapper =+ ({-# LINE 219 "ExecutionPlan2Hs.ag" #-}+ ("wrap_" >|< nt_ >#< "::" >#< "T_" >|< nt_ >#< "->"+ >#< "Inh_" >|< nt_ >#< "->" >#< "Syn_" >|< nt_)+ >-<+ (("wrap_" >|< nt_ >#< "sem" >#< "(" >#< "Inh_" >|< nt_+ >#< ppSpaced _inhlist >#< ")" >#< "=")+ >-<+ indent 3 ("let" >#< "(" >#< ppCommas _synlist >#< "," >#< "_" >#< ")" >#< "="+ >#< "runIdentity" >#< "$" >#< "(" >#< "inv_" >|< nt_ >|< "_s" >|< initial_+ >#< "sem" >#< "K_" >|< nt_ >|< "_v" >|< fromJust initialv_ >#< ")"+ >#< ppSpaced _inhlist+ >-<+ "in " >#< "(" >#< "Syn_" >|< nt_ >#< ppSpaced _synlist >#< ")")+ )+ {-# LINE 599 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 247, column 33)+ _prodsOinitial =+ ({-# LINE 247 "ExecutionPlan2Hs.ag" #-}+ initial_+ {-# LINE 605 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 248, column 33)+ _prodsOallstates =+ ({-# LINE 248 "ExecutionPlan2Hs.ag" #-}+ _allstates+ {-# LINE 611 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 379, column 36)+ _lhsOchildvisit =+ ({-# LINE 379 "ExecutionPlan2Hs.ag" #-}+ _prodsIchildvisit+ {-# LINE 617 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 436, column 36)+ _lhsOvisitdefs =+ ({-# LINE 436 "ExecutionPlan2Hs.ag" #-}+ _prodsIvisitdefs+ {-# LINE 623 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 437, column 36)+ _lhsOvisituses =+ ({-# LINE 437 "ExecutionPlan2Hs.ag" #-}+ _prodsIvisituses+ {-# LINE 629 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _prodsOallchildvisit =+ ({-# LINE 378 "ExecutionPlan2Hs.ag" #-}+ _lhsIallchildvisit+ {-# LINE 635 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _prodsOavisitdefs =+ ({-# LINE 446 "ExecutionPlan2Hs.ag" #-}+ _lhsIavisitdefs+ {-# LINE 641 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _prodsOavisituses =+ ({-# LINE 447 "ExecutionPlan2Hs.ag" #-}+ _lhsIavisituses+ {-# LINE 647 "ExecutionPlan2Hs.hs" #-}+ )+ ( _prodsIallvisits,_prodsIchildvisit,_prodsIdatatype,_prodsIsem_nt,_prodsIsem_prod,_prodsIt_visits,_prodsIvisitdefs,_prodsIvisituses) =+ prods_ _prodsOallchildvisit _prodsOallstates _prodsOavisitdefs _prodsOavisituses _prodsOinhmap _prodsOinitial _prodsOnt _prodsOrename _prodsOsynmap + in ( _lhsOchildvisit,_lhsOdebugoutput,_lhsOvisitdefs,_lhsOvisituses))) )+-- ENonterminals -----------------------------------------------+{-+ visit 0:+ inherited attributes:+ allchildvisit : Map.Map VisitIdentifier (Identifier -> PP_Doc)+ avisitdefs : Map.Map VisitIdentifier (Set.Set Identifier)+ avisituses : Map.Map VisitIdentifier (Set.Set Identifier)+ inhmap : Map.Map NontermIdent Attributes+ options : Options+ synmap : Map.Map NontermIdent Attributes+ typeSyns : TypeSyns+ wrappers : Set.Set NontermIdent+ synthesized attributes:+ childvisit : Map.Map VisitIdentifier (Identifier -> PP_Doc)+ debugoutput : PP_Doc+ visitdefs : Map.Map VisitIdentifier (Set.Set Identifier)+ visituses : Map.Map VisitIdentifier (Set.Set Identifier)+ alternatives:+ alternative Cons:+ child hd : ENonterminal + child tl : ENonterminals + alternative Nil:+-}+-- cata+sem_ENonterminals :: ENonterminals ->+ T_ENonterminals +sem_ENonterminals list =+ (Prelude.foldr sem_ENonterminals_Cons sem_ENonterminals_Nil (Prelude.map sem_ENonterminal list) )+-- semantic domain+newtype T_ENonterminals = T_ENonterminals ((Map.Map VisitIdentifier (Identifier -> PP_Doc)) ->+ (Map.Map VisitIdentifier (Set.Set Identifier)) ->+ (Map.Map VisitIdentifier (Set.Set Identifier)) ->+ (Map.Map NontermIdent Attributes) ->+ Options ->+ (Map.Map NontermIdent Attributes) ->+ TypeSyns ->+ (Set.Set NontermIdent) ->+ ( (Map.Map VisitIdentifier (Identifier -> PP_Doc)),PP_Doc,(Map.Map VisitIdentifier (Set.Set Identifier)),(Map.Map VisitIdentifier (Set.Set Identifier))))+data Inh_ENonterminals = Inh_ENonterminals {allchildvisit_Inh_ENonterminals :: (Map.Map VisitIdentifier (Identifier -> PP_Doc)),avisitdefs_Inh_ENonterminals :: (Map.Map VisitIdentifier (Set.Set Identifier)),avisituses_Inh_ENonterminals :: (Map.Map VisitIdentifier (Set.Set Identifier)),inhmap_Inh_ENonterminals :: (Map.Map NontermIdent Attributes),options_Inh_ENonterminals :: Options,synmap_Inh_ENonterminals :: (Map.Map NontermIdent Attributes),typeSyns_Inh_ENonterminals :: TypeSyns,wrappers_Inh_ENonterminals :: (Set.Set NontermIdent)}+data Syn_ENonterminals = Syn_ENonterminals {childvisit_Syn_ENonterminals :: (Map.Map VisitIdentifier (Identifier -> PP_Doc)),debugoutput_Syn_ENonterminals :: PP_Doc,visitdefs_Syn_ENonterminals :: (Map.Map VisitIdentifier (Set.Set Identifier)),visituses_Syn_ENonterminals :: (Map.Map VisitIdentifier (Set.Set Identifier))}+wrap_ENonterminals :: T_ENonterminals ->+ Inh_ENonterminals ->+ Syn_ENonterminals +wrap_ENonterminals (T_ENonterminals sem ) (Inh_ENonterminals _lhsIallchildvisit _lhsIavisitdefs _lhsIavisituses _lhsIinhmap _lhsIoptions _lhsIsynmap _lhsItypeSyns _lhsIwrappers ) =+ (let ( _lhsOchildvisit,_lhsOdebugoutput,_lhsOvisitdefs,_lhsOvisituses) = sem _lhsIallchildvisit _lhsIavisitdefs _lhsIavisituses _lhsIinhmap _lhsIoptions _lhsIsynmap _lhsItypeSyns _lhsIwrappers + in (Syn_ENonterminals _lhsOchildvisit _lhsOdebugoutput _lhsOvisitdefs _lhsOvisituses ))+sem_ENonterminals_Cons :: T_ENonterminal ->+ T_ENonterminals ->+ T_ENonterminals +sem_ENonterminals_Cons (T_ENonterminal hd_ ) (T_ENonterminals tl_ ) =+ (T_ENonterminals (\ _lhsIallchildvisit+ _lhsIavisitdefs+ _lhsIavisituses+ _lhsIinhmap+ _lhsIoptions+ _lhsIsynmap+ _lhsItypeSyns+ _lhsIwrappers ->+ (let _lhsOchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))+ _lhsOdebugoutput :: PP_Doc+ _lhsOvisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _lhsOvisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _hdOallchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))+ _hdOavisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _hdOavisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _hdOinhmap :: (Map.Map NontermIdent Attributes)+ _hdOoptions :: Options+ _hdOsynmap :: (Map.Map NontermIdent Attributes)+ _hdOtypeSyns :: TypeSyns+ _hdOwrappers :: (Set.Set NontermIdent)+ _tlOallchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))+ _tlOavisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _tlOavisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _tlOinhmap :: (Map.Map NontermIdent Attributes)+ _tlOoptions :: Options+ _tlOsynmap :: (Map.Map NontermIdent Attributes)+ _tlOtypeSyns :: TypeSyns+ _tlOwrappers :: (Set.Set NontermIdent)+ _hdIchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))+ _hdIdebugoutput :: PP_Doc+ _hdIvisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _hdIvisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _tlIchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))+ _tlIdebugoutput :: PP_Doc+ _tlIvisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _tlIvisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))+ -- use rule "ExecutionPlan2Hs.ag"(line 379, column 36)+ _lhsOchildvisit =+ ({-# LINE 379 "ExecutionPlan2Hs.ag" #-}+ _hdIchildvisit `Map.union` _tlIchildvisit+ {-# LINE 742 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 48, column 85)+ _lhsOdebugoutput =+ ({-# LINE 48 "ExecutionPlan2Hs.ag" #-}+ _hdIdebugoutput >-< _tlIdebugoutput+ {-# LINE 748 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 436, column 36)+ _lhsOvisitdefs =+ ({-# LINE 436 "ExecutionPlan2Hs.ag" #-}+ _hdIvisitdefs `uwSetUnion` _tlIvisitdefs+ {-# LINE 754 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 437, column 36)+ _lhsOvisituses =+ ({-# LINE 437 "ExecutionPlan2Hs.ag" #-}+ _hdIvisituses `uwSetUnion` _tlIvisituses+ {-# LINE 760 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOallchildvisit =+ ({-# LINE 378 "ExecutionPlan2Hs.ag" #-}+ _lhsIallchildvisit+ {-# LINE 766 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOavisitdefs =+ ({-# LINE 446 "ExecutionPlan2Hs.ag" #-}+ _lhsIavisitdefs+ {-# LINE 772 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOavisituses =+ ({-# LINE 447 "ExecutionPlan2Hs.ag" #-}+ _lhsIavisituses+ {-# LINE 778 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOinhmap =+ ({-# LINE 122 "ExecutionPlan2Hs.ag" #-}+ _lhsIinhmap+ {-# LINE 784 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOoptions =+ ({-# LINE 30 "ExecutionPlan2Hs.ag" #-}+ _lhsIoptions+ {-# LINE 790 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOsynmap =+ ({-# LINE 123 "ExecutionPlan2Hs.ag" #-}+ _lhsIsynmap+ {-# LINE 796 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOtypeSyns =+ ({-# LINE 68 "ExecutionPlan2Hs.ag" #-}+ _lhsItypeSyns+ {-# LINE 802 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOwrappers =+ ({-# LINE 48 "ExecutionPlan2Hs.ag" #-}+ _lhsIwrappers+ {-# LINE 808 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOallchildvisit =+ ({-# LINE 378 "ExecutionPlan2Hs.ag" #-}+ _lhsIallchildvisit+ {-# LINE 814 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOavisitdefs =+ ({-# LINE 446 "ExecutionPlan2Hs.ag" #-}+ _lhsIavisitdefs+ {-# LINE 820 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOavisituses =+ ({-# LINE 447 "ExecutionPlan2Hs.ag" #-}+ _lhsIavisituses+ {-# LINE 826 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOinhmap =+ ({-# LINE 122 "ExecutionPlan2Hs.ag" #-}+ _lhsIinhmap+ {-# LINE 832 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOoptions =+ ({-# LINE 30 "ExecutionPlan2Hs.ag" #-}+ _lhsIoptions+ {-# LINE 838 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOsynmap =+ ({-# LINE 123 "ExecutionPlan2Hs.ag" #-}+ _lhsIsynmap+ {-# LINE 844 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOtypeSyns =+ ({-# LINE 68 "ExecutionPlan2Hs.ag" #-}+ _lhsItypeSyns+ {-# LINE 850 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOwrappers =+ ({-# LINE 48 "ExecutionPlan2Hs.ag" #-}+ _lhsIwrappers+ {-# LINE 856 "ExecutionPlan2Hs.hs" #-}+ )+ ( _hdIchildvisit,_hdIdebugoutput,_hdIvisitdefs,_hdIvisituses) =+ hd_ _hdOallchildvisit _hdOavisitdefs _hdOavisituses _hdOinhmap _hdOoptions _hdOsynmap _hdOtypeSyns _hdOwrappers + ( _tlIchildvisit,_tlIdebugoutput,_tlIvisitdefs,_tlIvisituses) =+ tl_ _tlOallchildvisit _tlOavisitdefs _tlOavisituses _tlOinhmap _tlOoptions _tlOsynmap _tlOtypeSyns _tlOwrappers + in ( _lhsOchildvisit,_lhsOdebugoutput,_lhsOvisitdefs,_lhsOvisituses))) )+sem_ENonterminals_Nil :: T_ENonterminals +sem_ENonterminals_Nil =+ (T_ENonterminals (\ _lhsIallchildvisit+ _lhsIavisitdefs+ _lhsIavisituses+ _lhsIinhmap+ _lhsIoptions+ _lhsIsynmap+ _lhsItypeSyns+ _lhsIwrappers ->+ (let _lhsOchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))+ _lhsOdebugoutput :: PP_Doc+ _lhsOvisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _lhsOvisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))+ -- use rule "ExecutionPlan2Hs.ag"(line 379, column 36)+ _lhsOchildvisit =+ ({-# LINE 379 "ExecutionPlan2Hs.ag" #-}+ Map.empty+ {-# LINE 881 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 48, column 85)+ _lhsOdebugoutput =+ ({-# LINE 48 "ExecutionPlan2Hs.ag" #-}+ empty+ {-# LINE 887 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 436, column 36)+ _lhsOvisitdefs =+ ({-# LINE 436 "ExecutionPlan2Hs.ag" #-}+ Map.empty+ {-# LINE 893 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 437, column 36)+ _lhsOvisituses =+ ({-# LINE 437 "ExecutionPlan2Hs.ag" #-}+ Map.empty+ {-# LINE 899 "ExecutionPlan2Hs.hs" #-}+ )+ in ( _lhsOchildvisit,_lhsOdebugoutput,_lhsOvisitdefs,_lhsOvisituses))) )+-- EProduction -------------------------------------------------+{-+ visit 0:+ inherited attributes:+ allchildvisit : Map.Map VisitIdentifier (Identifier -> PP_Doc)+ allstates : Set.Set StateIdentifier+ avisitdefs : Map.Map VisitIdentifier (Set.Set Identifier)+ avisituses : Map.Map VisitIdentifier (Set.Set Identifier)+ inhmap : Attributes+ initial : StateIdentifier+ nt : NontermIdent+ rename : Bool+ synmap : Attributes+ synthesized attributes:+ allvisits : [(VisitIdentifier,StateIdentifier, StateIdentifier)]+ childvisit : Map.Map VisitIdentifier (Identifier -> PP_Doc)+ datatype : PP_Doc+ sem_nt : PP_Doc+ sem_prod : PP_Doc+ t_visits : PP_Doc+ visitdefs : Map.Map VisitIdentifier (Set.Set Identifier)+ visituses : Map.Map VisitIdentifier (Set.Set Identifier)+ alternatives:+ alternative EProduction:+ child con : {ConstructorIdent}+ child rules : ERules + child children : EChildren + child visits : Visits + visit 0:+ local args : _+ local statefns : _+ local stargs : _+ local stks : _+ local stvisits : _+ local stvs : _+-}+-- cata+sem_EProduction :: EProduction ->+ T_EProduction +sem_EProduction (EProduction _con _rules _children _visits ) =+ (sem_EProduction_EProduction _con (sem_ERules _rules ) (sem_EChildren _children ) (sem_Visits _visits ) )+-- semantic domain+newtype T_EProduction = T_EProduction ((Map.Map VisitIdentifier (Identifier -> PP_Doc)) ->+ (Set.Set StateIdentifier) ->+ (Map.Map VisitIdentifier (Set.Set Identifier)) ->+ (Map.Map VisitIdentifier (Set.Set Identifier)) ->+ Attributes ->+ StateIdentifier ->+ NontermIdent ->+ Bool ->+ Attributes ->+ ( ([(VisitIdentifier,StateIdentifier, StateIdentifier)]),(Map.Map VisitIdentifier (Identifier -> PP_Doc)),PP_Doc,PP_Doc,PP_Doc,PP_Doc,(Map.Map VisitIdentifier (Set.Set Identifier)),(Map.Map VisitIdentifier (Set.Set Identifier))))+data Inh_EProduction = Inh_EProduction {allchildvisit_Inh_EProduction :: (Map.Map VisitIdentifier (Identifier -> PP_Doc)),allstates_Inh_EProduction :: (Set.Set StateIdentifier),avisitdefs_Inh_EProduction :: (Map.Map VisitIdentifier (Set.Set Identifier)),avisituses_Inh_EProduction :: (Map.Map VisitIdentifier (Set.Set Identifier)),inhmap_Inh_EProduction :: Attributes,initial_Inh_EProduction :: StateIdentifier,nt_Inh_EProduction :: NontermIdent,rename_Inh_EProduction :: Bool,synmap_Inh_EProduction :: Attributes}+data Syn_EProduction = Syn_EProduction {allvisits_Syn_EProduction :: ([(VisitIdentifier,StateIdentifier, StateIdentifier)]),childvisit_Syn_EProduction :: (Map.Map VisitIdentifier (Identifier -> PP_Doc)),datatype_Syn_EProduction :: PP_Doc,sem_nt_Syn_EProduction :: PP_Doc,sem_prod_Syn_EProduction :: PP_Doc,t_visits_Syn_EProduction :: PP_Doc,visitdefs_Syn_EProduction :: (Map.Map VisitIdentifier (Set.Set Identifier)),visituses_Syn_EProduction :: (Map.Map VisitIdentifier (Set.Set Identifier))}+wrap_EProduction :: T_EProduction ->+ Inh_EProduction ->+ Syn_EProduction +wrap_EProduction (T_EProduction sem ) (Inh_EProduction _lhsIallchildvisit _lhsIallstates _lhsIavisitdefs _lhsIavisituses _lhsIinhmap _lhsIinitial _lhsInt _lhsIrename _lhsIsynmap ) =+ (let ( _lhsOallvisits,_lhsOchildvisit,_lhsOdatatype,_lhsOsem_nt,_lhsOsem_prod,_lhsOt_visits,_lhsOvisitdefs,_lhsOvisituses) = sem _lhsIallchildvisit _lhsIallstates _lhsIavisitdefs _lhsIavisituses _lhsIinhmap _lhsIinitial _lhsInt _lhsIrename _lhsIsynmap + in (Syn_EProduction _lhsOallvisits _lhsOchildvisit _lhsOdatatype _lhsOsem_nt _lhsOsem_prod _lhsOt_visits _lhsOvisitdefs _lhsOvisituses ))+sem_EProduction_EProduction :: ConstructorIdent ->+ T_ERules ->+ T_EChildren ->+ T_Visits ->+ T_EProduction +sem_EProduction_EProduction con_ (T_ERules rules_ ) (T_EChildren children_ ) (T_Visits visits_ ) =+ (T_EProduction (\ _lhsIallchildvisit+ _lhsIallstates+ _lhsIavisitdefs+ _lhsIavisituses+ _lhsIinhmap+ _lhsIinitial+ _lhsInt+ _lhsIrename+ _lhsIsynmap ->+ (let _lhsOdatatype :: PP_Doc+ _lhsOsem_nt :: PP_Doc+ _rulesOusedrules :: (Set.Set Identifier)+ _lhsOsem_prod :: PP_Doc+ _visitsOmrules :: (Map.Map Identifier PP_Doc)+ _visitsOchildintros :: (Map.Map Identifier PP_Doc)+ _visitsOallintramap :: (Map.Map StateIdentifier (Set.Set String))+ _visitsOterminaldefs :: (Set.Set String)+ _visitsOruledefs :: (Map.Map Identifier (Set.Set String))+ _visitsOruleuses :: (Map.Map Identifier (Set.Set String))+ _lhsOchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))+ _lhsOt_visits :: PP_Doc+ _lhsOvisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _lhsOvisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _lhsOallvisits :: ([(VisitIdentifier,StateIdentifier, StateIdentifier)])+ _childrenOnt :: NontermIdent+ _visitsOallchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))+ _visitsOavisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _visitsOavisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _visitsOinhmap :: Attributes+ _visitsOnt :: NontermIdent+ _visitsOsynmap :: Attributes+ _rulesImrules :: (Map.Map Identifier PP_Doc)+ _rulesIruledefs :: (Map.Map Identifier (Set.Set String))+ _rulesIruleuses :: (Map.Map Identifier (Set.Set String))+ _rulesIsem_rules :: PP_Doc+ _childrenIargnames :: ( [PP_Doc] )+ _childrenIargnamesw :: ([PP_Doc])+ _childrenIargtps :: ( [PP_Doc] )+ _childrenIchildintros :: (Map.Map Identifier PP_Doc)+ _childrenIdatatype :: ([PP_Doc])+ _childrenIterminaldefs :: (Set.Set String)+ _visitsIallvisits :: ([(VisitIdentifier,StateIdentifier, StateIdentifier)])+ _visitsIchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))+ _visitsIintramap :: (Map.Map StateIdentifier (Set.Set String))+ _visitsIsem_visit :: ( [(StateIdentifier,PP_Doc)] )+ _visitsIt_visits :: PP_Doc+ _visitsIusedrules :: (Set.Set Identifier)+ _visitsIvisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _visitsIvisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))+ -- "ExecutionPlan2Hs.ag"(line 84, column 17)+ _lhsOdatatype =+ ({-# LINE 84 "ExecutionPlan2Hs.ag" #-}+ conname _lhsIrename _lhsInt con_ >#< ppSpaced _childrenIdatatype+ {-# LINE 1021 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 105, column 17)+ _lhsOsem_nt =+ ({-# LINE 105 "ExecutionPlan2Hs.ag" #-}+ "sem_" >|< _lhsInt >#< "(" >#< conname _lhsIrename _lhsInt con_ >#< ppSpaced _childrenIargnames >#< ")"+ >#< "=" >#< "sem_" >|< _lhsInt >|< "_" >|< con_ >#< ppSpaced _childrenIargnamesw+ {-# LINE 1028 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 182, column 17)+ _rulesOusedrules =+ ({-# LINE 182 "ExecutionPlan2Hs.ag" #-}+ _visitsIusedrules+ {-# LINE 1034 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 268, column 17)+ _args =+ ({-# LINE 268 "ExecutionPlan2Hs.ag" #-}+ _childrenIargnames+ {-# LINE 1040 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 269, column 17)+ _lhsOsem_prod =+ ({-# LINE 269 "ExecutionPlan2Hs.ag" #-}+ "sem_" >|< _lhsInt >|< "_" >|< con_ >#< "::" >#< ppSpaced _childrenIargtps >#< "T_" >|< _lhsInt+ >-< "sem_" >|< _lhsInt >|< "_" >|< con_ >#< ppSpaced _args >#< "="+ >#< "st" >|< _lhsIinitial >#< "where"+ >-< (indent 3 $ vlist _statefns >-< _rulesIsem_rules)+ {-# LINE 1049 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 273, column 17)+ _statefns =+ ({-# LINE 273 "ExecutionPlan2Hs.ag" #-}+ map (\st -> "st" >|< st >#< _stargs st >#< "=" >#<+ "C_" >|< _lhsInt >|< "_s" >|< st >#< "k" >|< st >#< "where"+ >-< indent 3 (_stks st >-< _stvs st)+ ) $ Set.toList _lhsIallstates+ {-# LINE 1058 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 277, column 17)+ _stargs =+ ({-# LINE 277 "ExecutionPlan2Hs.ag" #-}+ \st -> ppSpaced $ Set.toList $ maybe Set.empty id $ Map.lookup st _visitsIintramap+ {-# LINE 1064 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 278, column 17)+ _stks =+ ({-# LINE 278 "ExecutionPlan2Hs.ag" #-}+ \st -> "k" >|< st >#< "::" >#< "K_" >|< _lhsInt >|< "_s" >|< st >#< "t" >#< "->" >#< "t"+ >-< vlist (map (\(v,f,t) -> "k" >|< st >#< "K_" >|< _lhsInt >|< "_v" >|< v >#< "="+ >#< "v" >|< v) $ _stvisits st)+ >-< if null (_stvisits st)+ then "k" >|< st >#< "_" >#< "=" >#< "error \"unreachable\""+ else empty+ {-# LINE 1075 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 284, column 17)+ _stvisits =+ ({-# LINE 284 "ExecutionPlan2Hs.ag" #-}+ \st -> filter (\(v,f,t) -> f == st) _visitsIallvisits+ {-# LINE 1081 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 285, column 17)+ _stvs =+ ({-# LINE 285 "ExecutionPlan2Hs.ag" #-}+ \st -> vlist $ map snd $ filter (\(f,pp) -> f == st) _visitsIsem_visit+ {-# LINE 1087 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 286, column 17)+ _visitsOmrules =+ ({-# LINE 286 "ExecutionPlan2Hs.ag" #-}+ _rulesImrules+ {-# LINE 1093 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 324, column 17)+ _visitsOchildintros =+ ({-# LINE 324 "ExecutionPlan2Hs.ag" #-}+ _childrenIchildintros+ {-# LINE 1099 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 409, column 17)+ _visitsOallintramap =+ ({-# LINE 409 "ExecutionPlan2Hs.ag" #-}+ _visitsIintramap+ {-# LINE 1105 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 410, column 17)+ _visitsOterminaldefs =+ ({-# LINE 410 "ExecutionPlan2Hs.ag" #-}+ _childrenIterminaldefs+ {-# LINE 1111 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 429, column 17)+ _visitsOruledefs =+ ({-# LINE 429 "ExecutionPlan2Hs.ag" #-}+ _rulesIruledefs+ {-# LINE 1117 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 430, column 17)+ _visitsOruleuses =+ ({-# LINE 430 "ExecutionPlan2Hs.ag" #-}+ _rulesIruleuses+ {-# LINE 1123 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 379, column 36)+ _lhsOchildvisit =+ ({-# LINE 379 "ExecutionPlan2Hs.ag" #-}+ _visitsIchildvisit+ {-# LINE 1129 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 188, column 54)+ _lhsOt_visits =+ ({-# LINE 188 "ExecutionPlan2Hs.ag" #-}+ _visitsIt_visits+ {-# LINE 1135 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 436, column 36)+ _lhsOvisitdefs =+ ({-# LINE 436 "ExecutionPlan2Hs.ag" #-}+ _visitsIvisitdefs+ {-# LINE 1141 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 437, column 36)+ _lhsOvisituses =+ ({-# LINE 437 "ExecutionPlan2Hs.ag" #-}+ _visitsIvisituses+ {-# LINE 1147 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (up)+ _lhsOallvisits =+ ({-# LINE 138 "ExecutionPlan2Hs.ag" #-}+ _visitsIallvisits+ {-# LINE 1153 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _childrenOnt =+ ({-# LINE 87 "ExecutionPlan2Hs.ag" #-}+ _lhsInt+ {-# LINE 1159 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _visitsOallchildvisit =+ ({-# LINE 378 "ExecutionPlan2Hs.ag" #-}+ _lhsIallchildvisit+ {-# LINE 1165 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _visitsOavisitdefs =+ ({-# LINE 446 "ExecutionPlan2Hs.ag" #-}+ _lhsIavisitdefs+ {-# LINE 1171 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _visitsOavisituses =+ ({-# LINE 447 "ExecutionPlan2Hs.ag" #-}+ _lhsIavisituses+ {-# LINE 1177 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _visitsOinhmap =+ ({-# LINE 128 "ExecutionPlan2Hs.ag" #-}+ _lhsIinhmap+ {-# LINE 1183 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _visitsOnt =+ ({-# LINE 188 "ExecutionPlan2Hs.ag" #-}+ _lhsInt+ {-# LINE 1189 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _visitsOsynmap =+ ({-# LINE 129 "ExecutionPlan2Hs.ag" #-}+ _lhsIsynmap+ {-# LINE 1195 "ExecutionPlan2Hs.hs" #-}+ )+ ( _rulesImrules,_rulesIruledefs,_rulesIruleuses,_rulesIsem_rules) =+ rules_ _rulesOusedrules + ( _childrenIargnames,_childrenIargnamesw,_childrenIargtps,_childrenIchildintros,_childrenIdatatype,_childrenIterminaldefs) =+ children_ _childrenOnt + ( _visitsIallvisits,_visitsIchildvisit,_visitsIintramap,_visitsIsem_visit,_visitsIt_visits,_visitsIusedrules,_visitsIvisitdefs,_visitsIvisituses) =+ visits_ _visitsOallchildvisit _visitsOallintramap _visitsOavisitdefs _visitsOavisituses _visitsOchildintros _visitsOinhmap _visitsOmrules _visitsOnt _visitsOruledefs _visitsOruleuses _visitsOsynmap _visitsOterminaldefs + in ( _lhsOallvisits,_lhsOchildvisit,_lhsOdatatype,_lhsOsem_nt,_lhsOsem_prod,_lhsOt_visits,_lhsOvisitdefs,_lhsOvisituses))) )+-- EProductions ------------------------------------------------+{-+ visit 0:+ inherited attributes:+ allchildvisit : Map.Map VisitIdentifier (Identifier -> PP_Doc)+ allstates : Set.Set StateIdentifier+ avisitdefs : Map.Map VisitIdentifier (Set.Set Identifier)+ avisituses : Map.Map VisitIdentifier (Set.Set Identifier)+ inhmap : Attributes+ initial : StateIdentifier+ nt : NontermIdent+ rename : Bool+ synmap : Attributes+ synthesized attributes:+ allvisits : [(VisitIdentifier,StateIdentifier, StateIdentifier)]+ childvisit : Map.Map VisitIdentifier (Identifier -> PP_Doc)+ datatype : [PP_Doc]+ sem_nt : PP_Doc+ sem_prod : PP_Doc+ t_visits : PP_Doc+ visitdefs : Map.Map VisitIdentifier (Set.Set Identifier)+ visituses : Map.Map VisitIdentifier (Set.Set Identifier)+ alternatives:+ alternative Cons:+ child hd : EProduction + child tl : EProductions + alternative Nil:+-}+-- cata+sem_EProductions :: EProductions ->+ T_EProductions +sem_EProductions list =+ (Prelude.foldr sem_EProductions_Cons sem_EProductions_Nil (Prelude.map sem_EProduction list) )+-- semantic domain+newtype T_EProductions = T_EProductions ((Map.Map VisitIdentifier (Identifier -> PP_Doc)) ->+ (Set.Set StateIdentifier) ->+ (Map.Map VisitIdentifier (Set.Set Identifier)) ->+ (Map.Map VisitIdentifier (Set.Set Identifier)) ->+ Attributes ->+ StateIdentifier ->+ NontermIdent ->+ Bool ->+ Attributes ->+ ( ([(VisitIdentifier,StateIdentifier, StateIdentifier)]),(Map.Map VisitIdentifier (Identifier -> PP_Doc)),([PP_Doc]),PP_Doc,PP_Doc,PP_Doc,(Map.Map VisitIdentifier (Set.Set Identifier)),(Map.Map VisitIdentifier (Set.Set Identifier))))+data Inh_EProductions = Inh_EProductions {allchildvisit_Inh_EProductions :: (Map.Map VisitIdentifier (Identifier -> PP_Doc)),allstates_Inh_EProductions :: (Set.Set StateIdentifier),avisitdefs_Inh_EProductions :: (Map.Map VisitIdentifier (Set.Set Identifier)),avisituses_Inh_EProductions :: (Map.Map VisitIdentifier (Set.Set Identifier)),inhmap_Inh_EProductions :: Attributes,initial_Inh_EProductions :: StateIdentifier,nt_Inh_EProductions :: NontermIdent,rename_Inh_EProductions :: Bool,synmap_Inh_EProductions :: Attributes}+data Syn_EProductions = Syn_EProductions {allvisits_Syn_EProductions :: ([(VisitIdentifier,StateIdentifier, StateIdentifier)]),childvisit_Syn_EProductions :: (Map.Map VisitIdentifier (Identifier -> PP_Doc)),datatype_Syn_EProductions :: ([PP_Doc]),sem_nt_Syn_EProductions :: PP_Doc,sem_prod_Syn_EProductions :: PP_Doc,t_visits_Syn_EProductions :: PP_Doc,visitdefs_Syn_EProductions :: (Map.Map VisitIdentifier (Set.Set Identifier)),visituses_Syn_EProductions :: (Map.Map VisitIdentifier (Set.Set Identifier))}+wrap_EProductions :: T_EProductions ->+ Inh_EProductions ->+ Syn_EProductions +wrap_EProductions (T_EProductions sem ) (Inh_EProductions _lhsIallchildvisit _lhsIallstates _lhsIavisitdefs _lhsIavisituses _lhsIinhmap _lhsIinitial _lhsInt _lhsIrename _lhsIsynmap ) =+ (let ( _lhsOallvisits,_lhsOchildvisit,_lhsOdatatype,_lhsOsem_nt,_lhsOsem_prod,_lhsOt_visits,_lhsOvisitdefs,_lhsOvisituses) = sem _lhsIallchildvisit _lhsIallstates _lhsIavisitdefs _lhsIavisituses _lhsIinhmap _lhsIinitial _lhsInt _lhsIrename _lhsIsynmap + in (Syn_EProductions _lhsOallvisits _lhsOchildvisit _lhsOdatatype _lhsOsem_nt _lhsOsem_prod _lhsOt_visits _lhsOvisitdefs _lhsOvisituses ))+sem_EProductions_Cons :: T_EProduction ->+ T_EProductions ->+ T_EProductions +sem_EProductions_Cons (T_EProduction hd_ ) (T_EProductions tl_ ) =+ (T_EProductions (\ _lhsIallchildvisit+ _lhsIallstates+ _lhsIavisitdefs+ _lhsIavisituses+ _lhsIinhmap+ _lhsIinitial+ _lhsInt+ _lhsIrename+ _lhsIsynmap ->+ (let _lhsOallvisits :: ([(VisitIdentifier,StateIdentifier, StateIdentifier)])+ _lhsOt_visits :: PP_Doc+ _lhsOchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))+ _lhsOdatatype :: ([PP_Doc])+ _lhsOsem_nt :: PP_Doc+ _lhsOsem_prod :: PP_Doc+ _lhsOvisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _lhsOvisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _hdOallchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))+ _hdOallstates :: (Set.Set StateIdentifier)+ _hdOavisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _hdOavisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _hdOinhmap :: Attributes+ _hdOinitial :: StateIdentifier+ _hdOnt :: NontermIdent+ _hdOrename :: Bool+ _hdOsynmap :: Attributes+ _tlOallchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))+ _tlOallstates :: (Set.Set StateIdentifier)+ _tlOavisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _tlOavisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _tlOinhmap :: Attributes+ _tlOinitial :: StateIdentifier+ _tlOnt :: NontermIdent+ _tlOrename :: Bool+ _tlOsynmap :: Attributes+ _hdIallvisits :: ([(VisitIdentifier,StateIdentifier, StateIdentifier)])+ _hdIchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))+ _hdIdatatype :: PP_Doc+ _hdIsem_nt :: PP_Doc+ _hdIsem_prod :: PP_Doc+ _hdIt_visits :: PP_Doc+ _hdIvisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _hdIvisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _tlIallvisits :: ([(VisitIdentifier,StateIdentifier, StateIdentifier)])+ _tlIchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))+ _tlIdatatype :: ([PP_Doc])+ _tlIsem_nt :: PP_Doc+ _tlIsem_prod :: PP_Doc+ _tlIt_visits :: PP_Doc+ _tlIvisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _tlIvisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))+ -- "ExecutionPlan2Hs.ag"(line 144, column 10)+ _lhsOallvisits =+ ({-# LINE 144 "ExecutionPlan2Hs.ag" #-}+ _hdIallvisits+ {-# LINE 1315 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 191, column 10)+ _lhsOt_visits =+ ({-# LINE 191 "ExecutionPlan2Hs.ag" #-}+ _hdIt_visits+ {-# LINE 1321 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 379, column 36)+ _lhsOchildvisit =+ ({-# LINE 379 "ExecutionPlan2Hs.ag" #-}+ _hdIchildvisit `Map.union` _tlIchildvisit+ {-# LINE 1327 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 81, column 34)+ _lhsOdatatype =+ ({-# LINE 81 "ExecutionPlan2Hs.ag" #-}+ _hdIdatatype : _tlIdatatype+ {-# LINE 1333 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 103, column 44)+ _lhsOsem_nt =+ ({-# LINE 103 "ExecutionPlan2Hs.ag" #-}+ _hdIsem_nt >-< _tlIsem_nt+ {-# LINE 1339 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 244, column 34)+ _lhsOsem_prod =+ ({-# LINE 244 "ExecutionPlan2Hs.ag" #-}+ _hdIsem_prod >-< _tlIsem_prod+ {-# LINE 1345 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 436, column 36)+ _lhsOvisitdefs =+ ({-# LINE 436 "ExecutionPlan2Hs.ag" #-}+ _hdIvisitdefs `uwSetUnion` _tlIvisitdefs+ {-# LINE 1351 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 437, column 36)+ _lhsOvisituses =+ ({-# LINE 437 "ExecutionPlan2Hs.ag" #-}+ _hdIvisituses `uwSetUnion` _tlIvisituses+ {-# LINE 1357 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOallchildvisit =+ ({-# LINE 378 "ExecutionPlan2Hs.ag" #-}+ _lhsIallchildvisit+ {-# LINE 1363 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOallstates =+ ({-# LINE 246 "ExecutionPlan2Hs.ag" #-}+ _lhsIallstates+ {-# LINE 1369 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOavisitdefs =+ ({-# LINE 446 "ExecutionPlan2Hs.ag" #-}+ _lhsIavisitdefs+ {-# LINE 1375 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOavisituses =+ ({-# LINE 447 "ExecutionPlan2Hs.ag" #-}+ _lhsIavisituses+ {-# LINE 1381 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOinhmap =+ ({-# LINE 128 "ExecutionPlan2Hs.ag" #-}+ _lhsIinhmap+ {-# LINE 1387 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOinitial =+ ({-# LINE 246 "ExecutionPlan2Hs.ag" #-}+ _lhsIinitial+ {-# LINE 1393 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOnt =+ ({-# LINE 188 "ExecutionPlan2Hs.ag" #-}+ _lhsInt+ {-# LINE 1399 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOrename =+ ({-# LINE 31 "ExecutionPlan2Hs.ag" #-}+ _lhsIrename+ {-# LINE 1405 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOsynmap =+ ({-# LINE 129 "ExecutionPlan2Hs.ag" #-}+ _lhsIsynmap+ {-# LINE 1411 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOallchildvisit =+ ({-# LINE 378 "ExecutionPlan2Hs.ag" #-}+ _lhsIallchildvisit+ {-# LINE 1417 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOallstates =+ ({-# LINE 246 "ExecutionPlan2Hs.ag" #-}+ _lhsIallstates+ {-# LINE 1423 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOavisitdefs =+ ({-# LINE 446 "ExecutionPlan2Hs.ag" #-}+ _lhsIavisitdefs+ {-# LINE 1429 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOavisituses =+ ({-# LINE 447 "ExecutionPlan2Hs.ag" #-}+ _lhsIavisituses+ {-# LINE 1435 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOinhmap =+ ({-# LINE 128 "ExecutionPlan2Hs.ag" #-}+ _lhsIinhmap+ {-# LINE 1441 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOinitial =+ ({-# LINE 246 "ExecutionPlan2Hs.ag" #-}+ _lhsIinitial+ {-# LINE 1447 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOnt =+ ({-# LINE 188 "ExecutionPlan2Hs.ag" #-}+ _lhsInt+ {-# LINE 1453 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOrename =+ ({-# LINE 31 "ExecutionPlan2Hs.ag" #-}+ _lhsIrename+ {-# LINE 1459 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOsynmap =+ ({-# LINE 129 "ExecutionPlan2Hs.ag" #-}+ _lhsIsynmap+ {-# LINE 1465 "ExecutionPlan2Hs.hs" #-}+ )+ ( _hdIallvisits,_hdIchildvisit,_hdIdatatype,_hdIsem_nt,_hdIsem_prod,_hdIt_visits,_hdIvisitdefs,_hdIvisituses) =+ hd_ _hdOallchildvisit _hdOallstates _hdOavisitdefs _hdOavisituses _hdOinhmap _hdOinitial _hdOnt _hdOrename _hdOsynmap + ( _tlIallvisits,_tlIchildvisit,_tlIdatatype,_tlIsem_nt,_tlIsem_prod,_tlIt_visits,_tlIvisitdefs,_tlIvisituses) =+ tl_ _tlOallchildvisit _tlOallstates _tlOavisitdefs _tlOavisituses _tlOinhmap _tlOinitial _tlOnt _tlOrename _tlOsynmap + in ( _lhsOallvisits,_lhsOchildvisit,_lhsOdatatype,_lhsOsem_nt,_lhsOsem_prod,_lhsOt_visits,_lhsOvisitdefs,_lhsOvisituses))) )+sem_EProductions_Nil :: T_EProductions +sem_EProductions_Nil =+ (T_EProductions (\ _lhsIallchildvisit+ _lhsIallstates+ _lhsIavisitdefs+ _lhsIavisituses+ _lhsIinhmap+ _lhsIinitial+ _lhsInt+ _lhsIrename+ _lhsIsynmap ->+ (let _lhsOallvisits :: ([(VisitIdentifier,StateIdentifier, StateIdentifier)])+ _lhsOchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))+ _lhsOdatatype :: ([PP_Doc])+ _lhsOsem_nt :: PP_Doc+ _lhsOsem_prod :: PP_Doc+ _lhsOt_visits :: PP_Doc+ _lhsOvisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _lhsOvisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))+ -- "ExecutionPlan2Hs.ag"(line 145, column 10)+ _lhsOallvisits =+ ({-# LINE 145 "ExecutionPlan2Hs.ag" #-}+ error "Every nonterminal should have at least 1 production"+ {-# LINE 1495 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 379, column 36)+ _lhsOchildvisit =+ ({-# LINE 379 "ExecutionPlan2Hs.ag" #-}+ Map.empty+ {-# LINE 1501 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 81, column 34)+ _lhsOdatatype =+ ({-# LINE 81 "ExecutionPlan2Hs.ag" #-}+ []+ {-# LINE 1507 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 103, column 44)+ _lhsOsem_nt =+ ({-# LINE 103 "ExecutionPlan2Hs.ag" #-}+ empty+ {-# LINE 1513 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 244, column 34)+ _lhsOsem_prod =+ ({-# LINE 244 "ExecutionPlan2Hs.ag" #-}+ empty+ {-# LINE 1519 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 188, column 54)+ _lhsOt_visits =+ ({-# LINE 188 "ExecutionPlan2Hs.ag" #-}+ empty+ {-# LINE 1525 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 436, column 36)+ _lhsOvisitdefs =+ ({-# LINE 436 "ExecutionPlan2Hs.ag" #-}+ Map.empty+ {-# LINE 1531 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 437, column 36)+ _lhsOvisituses =+ ({-# LINE 437 "ExecutionPlan2Hs.ag" #-}+ Map.empty+ {-# LINE 1537 "ExecutionPlan2Hs.hs" #-}+ )+ in ( _lhsOallvisits,_lhsOchildvisit,_lhsOdatatype,_lhsOsem_nt,_lhsOsem_prod,_lhsOt_visits,_lhsOvisitdefs,_lhsOvisituses))) )+-- ERule -------------------------------------------------------+{-+ visit 0:+ inherited attribute:+ usedrules : Set.Set Identifier+ synthesized attributes:+ mrules : Map.Map Identifier PP_Doc+ ruledefs : Map.Map Identifier (Set.Set String)+ ruleuses : Map.Map Identifier (Set.Set String)+ sem_rules : PP_Doc+ alternatives:+ alternative ERule:+ child name : {Identifier}+ child pattern : Pattern + child rhs : Expression + child owrt : {Bool}+ child origin : {String}+ child explicit : {Bool}+ visit 0:+ local attrlst : _+-}+-- cata+sem_ERule :: ERule ->+ T_ERule +sem_ERule (ERule _name _pattern _rhs _owrt _origin _explicit ) =+ (sem_ERule_ERule _name (sem_Pattern _pattern ) (sem_Expression _rhs ) _owrt _origin _explicit )+-- semantic domain+newtype T_ERule = T_ERule ((Set.Set Identifier) ->+ ( (Map.Map Identifier PP_Doc),(Map.Map Identifier (Set.Set String)),(Map.Map Identifier (Set.Set String)),PP_Doc))+data Inh_ERule = Inh_ERule {usedrules_Inh_ERule :: (Set.Set Identifier)}+data Syn_ERule = Syn_ERule {mrules_Syn_ERule :: (Map.Map Identifier PP_Doc),ruledefs_Syn_ERule :: (Map.Map Identifier (Set.Set String)),ruleuses_Syn_ERule :: (Map.Map Identifier (Set.Set String)),sem_rules_Syn_ERule :: PP_Doc}+wrap_ERule :: T_ERule ->+ Inh_ERule ->+ Syn_ERule +wrap_ERule (T_ERule sem ) (Inh_ERule _lhsIusedrules ) =+ (let ( _lhsOmrules,_lhsOruledefs,_lhsOruleuses,_lhsOsem_rules) = sem _lhsIusedrules + in (Syn_ERule _lhsOmrules _lhsOruledefs _lhsOruleuses _lhsOsem_rules ))+sem_ERule_ERule :: Identifier ->+ T_Pattern ->+ T_Expression ->+ Bool ->+ String ->+ Bool ->+ T_ERule +sem_ERule_ERule name_ (T_Pattern pattern_ ) (T_Expression rhs_ ) owrt_ origin_ explicit_ =+ (T_ERule (\ _lhsIusedrules ->+ (let _lhsOsem_rules :: PP_Doc+ _lhsOmrules :: (Map.Map Identifier PP_Doc)+ _lhsOruledefs :: (Map.Map Identifier (Set.Set String))+ _lhsOruleuses :: (Map.Map Identifier (Set.Set String))+ _patternIattrs :: (Set.Set String)+ _patternIcopy :: Pattern + _patternIsem_lhs :: PP_Doc+ _rhsIattrs :: (Set.Set String)+ _rhsIsemfunc :: PP_Doc+ -- "ExecutionPlan2Hs.ag"(line 337, column 11)+ _lhsOsem_rules =+ ({-# LINE 337 "ExecutionPlan2Hs.ag" #-}+ if Set.member name_ _lhsIusedrules+ then (name_ >#< "=" >#<+ (if Set.null _rhsIattrs+ then empty+ else "\\" >|< _attrlst >#< "->")+ >#< _rhsIsemfunc)+ else empty+ {-# LINE 1605 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 344, column 11)+ _attrlst =+ ({-# LINE 344 "ExecutionPlan2Hs.ag" #-}+ ppSpaced $ Set.toList _rhsIattrs+ {-# LINE 1611 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 345, column 11)+ _lhsOmrules =+ ({-# LINE 345 "ExecutionPlan2Hs.ag" #-}+ Map.singleton name_ $ _patternIsem_lhs >#< "<-" >#< "return" >#< "$" >#< name_ >#< _attrlst+ {-# LINE 1617 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 425, column 11)+ _lhsOruledefs =+ ({-# LINE 425 "ExecutionPlan2Hs.ag" #-}+ Map.singleton name_ _patternIattrs+ {-# LINE 1623 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 426, column 11)+ _lhsOruleuses =+ ({-# LINE 426 "ExecutionPlan2Hs.ag" #-}+ Map.singleton name_ _rhsIattrs+ {-# LINE 1629 "ExecutionPlan2Hs.hs" #-}+ )+ ( _patternIattrs,_patternIcopy,_patternIsem_lhs) =+ pattern_ + ( _rhsIattrs,_rhsIsemfunc) =+ rhs_ + in ( _lhsOmrules,_lhsOruledefs,_lhsOruleuses,_lhsOsem_rules))) )+-- ERules ------------------------------------------------------+{-+ visit 0:+ inherited attribute:+ usedrules : Set.Set Identifier+ synthesized attributes:+ mrules : Map.Map Identifier PP_Doc+ ruledefs : Map.Map Identifier (Set.Set String)+ ruleuses : Map.Map Identifier (Set.Set String)+ sem_rules : PP_Doc+ alternatives:+ alternative Cons:+ child hd : ERule + child tl : ERules + alternative Nil:+-}+-- cata+sem_ERules :: ERules ->+ T_ERules +sem_ERules list =+ (Prelude.foldr sem_ERules_Cons sem_ERules_Nil (Prelude.map sem_ERule list) )+-- semantic domain+newtype T_ERules = T_ERules ((Set.Set Identifier) ->+ ( (Map.Map Identifier PP_Doc),(Map.Map Identifier (Set.Set String)),(Map.Map Identifier (Set.Set String)),PP_Doc))+data Inh_ERules = Inh_ERules {usedrules_Inh_ERules :: (Set.Set Identifier)}+data Syn_ERules = Syn_ERules {mrules_Syn_ERules :: (Map.Map Identifier PP_Doc),ruledefs_Syn_ERules :: (Map.Map Identifier (Set.Set String)),ruleuses_Syn_ERules :: (Map.Map Identifier (Set.Set String)),sem_rules_Syn_ERules :: PP_Doc}+wrap_ERules :: T_ERules ->+ Inh_ERules ->+ Syn_ERules +wrap_ERules (T_ERules sem ) (Inh_ERules _lhsIusedrules ) =+ (let ( _lhsOmrules,_lhsOruledefs,_lhsOruleuses,_lhsOsem_rules) = sem _lhsIusedrules + in (Syn_ERules _lhsOmrules _lhsOruledefs _lhsOruleuses _lhsOsem_rules ))+sem_ERules_Cons :: T_ERule ->+ T_ERules ->+ T_ERules +sem_ERules_Cons (T_ERule hd_ ) (T_ERules tl_ ) =+ (T_ERules (\ _lhsIusedrules ->+ (let _lhsOmrules :: (Map.Map Identifier PP_Doc)+ _lhsOruledefs :: (Map.Map Identifier (Set.Set String))+ _lhsOruleuses :: (Map.Map Identifier (Set.Set String))+ _lhsOsem_rules :: PP_Doc+ _hdOusedrules :: (Set.Set Identifier)+ _tlOusedrules :: (Set.Set Identifier)+ _hdImrules :: (Map.Map Identifier PP_Doc)+ _hdIruledefs :: (Map.Map Identifier (Set.Set String))+ _hdIruleuses :: (Map.Map Identifier (Set.Set String))+ _hdIsem_rules :: PP_Doc+ _tlImrules :: (Map.Map Identifier PP_Doc)+ _tlIruledefs :: (Map.Map Identifier (Set.Set String))+ _tlIruleuses :: (Map.Map Identifier (Set.Set String))+ _tlIsem_rules :: PP_Doc+ -- use rule "ExecutionPlan2Hs.ag"(line 334, column 32)+ _lhsOmrules =+ ({-# LINE 334 "ExecutionPlan2Hs.ag" #-}+ _hdImrules `Map.union` _tlImrules+ {-# LINE 1691 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 418, column 34)+ _lhsOruledefs =+ ({-# LINE 418 "ExecutionPlan2Hs.ag" #-}+ _hdIruledefs `uwSetUnion` _tlIruledefs+ {-# LINE 1697 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 419, column 34)+ _lhsOruleuses =+ ({-# LINE 419 "ExecutionPlan2Hs.ag" #-}+ _hdIruleuses `uwSetUnion` _tlIruleuses+ {-# LINE 1703 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 333, column 35)+ _lhsOsem_rules =+ ({-# LINE 333 "ExecutionPlan2Hs.ag" #-}+ _hdIsem_rules >-< _tlIsem_rules+ {-# LINE 1709 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOusedrules =+ ({-# LINE 176 "ExecutionPlan2Hs.ag" #-}+ _lhsIusedrules+ {-# LINE 1715 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOusedrules =+ ({-# LINE 176 "ExecutionPlan2Hs.ag" #-}+ _lhsIusedrules+ {-# LINE 1721 "ExecutionPlan2Hs.hs" #-}+ )+ ( _hdImrules,_hdIruledefs,_hdIruleuses,_hdIsem_rules) =+ hd_ _hdOusedrules + ( _tlImrules,_tlIruledefs,_tlIruleuses,_tlIsem_rules) =+ tl_ _tlOusedrules + in ( _lhsOmrules,_lhsOruledefs,_lhsOruleuses,_lhsOsem_rules))) )+sem_ERules_Nil :: T_ERules +sem_ERules_Nil =+ (T_ERules (\ _lhsIusedrules ->+ (let _lhsOmrules :: (Map.Map Identifier PP_Doc)+ _lhsOruledefs :: (Map.Map Identifier (Set.Set String))+ _lhsOruleuses :: (Map.Map Identifier (Set.Set String))+ _lhsOsem_rules :: PP_Doc+ -- use rule "ExecutionPlan2Hs.ag"(line 334, column 32)+ _lhsOmrules =+ ({-# LINE 334 "ExecutionPlan2Hs.ag" #-}+ Map.empty+ {-# LINE 1739 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 418, column 34)+ _lhsOruledefs =+ ({-# LINE 418 "ExecutionPlan2Hs.ag" #-}+ Map.empty+ {-# LINE 1745 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 419, column 34)+ _lhsOruleuses =+ ({-# LINE 419 "ExecutionPlan2Hs.ag" #-}+ Map.empty+ {-# LINE 1751 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 333, column 35)+ _lhsOsem_rules =+ ({-# LINE 333 "ExecutionPlan2Hs.ag" #-}+ empty+ {-# LINE 1757 "ExecutionPlan2Hs.hs" #-}+ )+ in ( _lhsOmrules,_lhsOruledefs,_lhsOruleuses,_lhsOsem_rules))) )+-- ExecutionPlan -----------------------------------------------+{-+ visit 0:+ inherited attributes:+ importBlocks : PP_Doc+ inhmap : Map.Map NontermIdent Attributes+ mainName : String+ moduleHeader : String -> String -> String -> Bool -> String+ options : Options+ pragmaBlocks : String+ synmap : Map.Map NontermIdent Attributes+ textBlocks : PP_Doc+ synthesized attribute:+ debugoutput : PP_Doc+ alternatives:+ alternative ExecutionPlan:+ child nonts : ENonterminals + child typeSyns : {TypeSyns}+ child wrappers : {Set.Set NontermIdent}+-}+-- cata+sem_ExecutionPlan :: ExecutionPlan ->+ T_ExecutionPlan +sem_ExecutionPlan (ExecutionPlan _nonts _typeSyns _wrappers ) =+ (sem_ExecutionPlan_ExecutionPlan (sem_ENonterminals _nonts ) _typeSyns _wrappers )+-- semantic domain+newtype T_ExecutionPlan = T_ExecutionPlan (PP_Doc ->+ (Map.Map NontermIdent Attributes) ->+ String ->+ (String -> String -> String -> Bool -> String) ->+ Options ->+ String ->+ (Map.Map NontermIdent Attributes) ->+ PP_Doc ->+ ( PP_Doc))+data Inh_ExecutionPlan = Inh_ExecutionPlan {importBlocks_Inh_ExecutionPlan :: PP_Doc,inhmap_Inh_ExecutionPlan :: (Map.Map NontermIdent Attributes),mainName_Inh_ExecutionPlan :: String,moduleHeader_Inh_ExecutionPlan :: (String -> String -> String -> Bool -> String),options_Inh_ExecutionPlan :: Options,pragmaBlocks_Inh_ExecutionPlan :: String,synmap_Inh_ExecutionPlan :: (Map.Map NontermIdent Attributes),textBlocks_Inh_ExecutionPlan :: PP_Doc}+data Syn_ExecutionPlan = Syn_ExecutionPlan {debugoutput_Syn_ExecutionPlan :: PP_Doc}+wrap_ExecutionPlan :: T_ExecutionPlan ->+ Inh_ExecutionPlan ->+ Syn_ExecutionPlan +wrap_ExecutionPlan (T_ExecutionPlan sem ) (Inh_ExecutionPlan _lhsIimportBlocks _lhsIinhmap _lhsImainName _lhsImoduleHeader _lhsIoptions _lhsIpragmaBlocks _lhsIsynmap _lhsItextBlocks ) =+ (let ( _lhsOdebugoutput) = sem _lhsIimportBlocks _lhsIinhmap _lhsImainName _lhsImoduleHeader _lhsIoptions _lhsIpragmaBlocks _lhsIsynmap _lhsItextBlocks + in (Syn_ExecutionPlan _lhsOdebugoutput ))+sem_ExecutionPlan_ExecutionPlan :: T_ENonterminals ->+ TypeSyns ->+ (Set.Set NontermIdent) ->+ T_ExecutionPlan +sem_ExecutionPlan_ExecutionPlan (T_ENonterminals nonts_ ) typeSyns_ wrappers_ =+ (T_ExecutionPlan (\ _lhsIimportBlocks+ _lhsIinhmap+ _lhsImainName+ _lhsImoduleHeader+ _lhsIoptions+ _lhsIpragmaBlocks+ _lhsIsynmap+ _lhsItextBlocks ->+ (let _lhsOdebugoutput :: PP_Doc+ _nontsOwrappers :: (Set.Set NontermIdent)+ _nontsOtypeSyns :: TypeSyns+ _nontsOallchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))+ _nontsOavisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _nontsOavisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _nontsOinhmap :: (Map.Map NontermIdent Attributes)+ _nontsOoptions :: Options+ _nontsOsynmap :: (Map.Map NontermIdent Attributes)+ _nontsIchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))+ _nontsIdebugoutput :: PP_Doc+ _nontsIvisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _nontsIvisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))+ -- "ExecutionPlan2Hs.ag"(line 40, column 19)+ _lhsOdebugoutput =+ ({-# LINE 40 "ExecutionPlan2Hs.ag" #-}+ "{-# LANGUAGE Rank2Types, GADTs, EmptyDataDecls #-}"+ >-< _lhsIpragmaBlocks+ >-< _lhsImoduleHeader _lhsImainName "" "" False+ >-< "import Control.Monad.Identity"+ >-< _lhsIimportBlocks+ >-< _lhsItextBlocks+ >-< _nontsIdebugoutput+ {-# LINE 1839 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 51, column 19)+ _nontsOwrappers =+ ({-# LINE 51 "ExecutionPlan2Hs.ag" #-}+ wrappers_+ {-# LINE 1845 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 71, column 19)+ _nontsOtypeSyns =+ ({-# LINE 71 "ExecutionPlan2Hs.ag" #-}+ typeSyns_+ {-# LINE 1851 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 384, column 19)+ _nontsOallchildvisit =+ ({-# LINE 384 "ExecutionPlan2Hs.ag" #-}+ _nontsIchildvisit+ {-# LINE 1857 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 450, column 19)+ _nontsOavisitdefs =+ ({-# LINE 450 "ExecutionPlan2Hs.ag" #-}+ _nontsIvisitdefs+ {-# LINE 1863 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 451, column 19)+ _nontsOavisituses =+ ({-# LINE 451 "ExecutionPlan2Hs.ag" #-}+ _nontsIvisituses+ {-# LINE 1869 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _nontsOinhmap =+ ({-# LINE 122 "ExecutionPlan2Hs.ag" #-}+ _lhsIinhmap+ {-# LINE 1875 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _nontsOoptions =+ ({-# LINE 30 "ExecutionPlan2Hs.ag" #-}+ _lhsIoptions+ {-# LINE 1881 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _nontsOsynmap =+ ({-# LINE 123 "ExecutionPlan2Hs.ag" #-}+ _lhsIsynmap+ {-# LINE 1887 "ExecutionPlan2Hs.hs" #-}+ )+ ( _nontsIchildvisit,_nontsIdebugoutput,_nontsIvisitdefs,_nontsIvisituses) =+ nonts_ _nontsOallchildvisit _nontsOavisitdefs _nontsOavisituses _nontsOinhmap _nontsOoptions _nontsOsynmap _nontsOtypeSyns _nontsOwrappers + in ( _lhsOdebugoutput))) )+-- Expression --------------------------------------------------+{-+ visit 0:+ synthesized attributes:+ attrs : Set.Set String+ semfunc : PP_Doc+ alternatives:+ alternative Expression:+ child pos : {Pos}+ child tks : {[HsToken]}+-}+-- cata+sem_Expression :: Expression ->+ T_Expression +sem_Expression (Expression _pos _tks ) =+ (sem_Expression_Expression _pos _tks )+-- semantic domain+newtype T_Expression = T_Expression (( (Set.Set String),PP_Doc))+data Inh_Expression = Inh_Expression {}+data Syn_Expression = Syn_Expression {attrs_Syn_Expression :: (Set.Set String),semfunc_Syn_Expression :: PP_Doc}+wrap_Expression :: T_Expression ->+ Inh_Expression ->+ Syn_Expression +wrap_Expression (T_Expression sem ) (Inh_Expression ) =+ (let ( _lhsOattrs,_lhsOsemfunc) = sem + in (Syn_Expression _lhsOattrs _lhsOsemfunc ))+sem_Expression_Expression :: Pos ->+ ([HsToken]) ->+ T_Expression +sem_Expression_Expression pos_ tks_ =+ (T_Expression (let _lhsOattrs :: (Set.Set String)+ _lhsOsemfunc :: PP_Doc+ -- "ExecutionPlan2Hs.ag"(line 368, column 16)+ _lhsOattrs =+ ({-# LINE 368 "ExecutionPlan2Hs.ag" #-}+ Set.unions $ map (\tok -> attrs_Syn_HsToken (wrap_HsToken (sem_HsToken tok) Inh_HsToken)) tks_+ {-# LINE 1928 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 369, column 16)+ _lhsOsemfunc =+ ({-# LINE 369 "ExecutionPlan2Hs.ag" #-}+ vlist $ showTokens $ map (\tok -> tok_Syn_HsToken (wrap_HsToken (sem_HsToken tok) Inh_HsToken)) tks_+ {-# LINE 1934 "ExecutionPlan2Hs.hs" #-}+ )+ in ( _lhsOattrs,_lhsOsemfunc)) )+-- HsToken -----------------------------------------------------+{-+ visit 0:+ synthesized attributes:+ attrs : Set.Set String+ tok : (Pos,String)+ alternatives:+ alternative AGField:+ child field : {Identifier}+ child attr : {Identifier}+ child pos : {Pos}+ child rdesc : {Maybe String}+ visit 0:+ local addTrace : _+ alternative AGLocal:+ child var : {Identifier}+ child pos : {Pos}+ child rdesc : {Maybe String}+ visit 0:+ local tok : _+ alternative CharToken:+ child value : {String}+ child pos : {Pos}+ alternative Err:+ child mesg : {String}+ child pos : {Pos}+ alternative HsToken:+ child value : {String}+ child pos : {Pos}+ alternative StrToken:+ child value : {String}+ child pos : {Pos}+-}+-- cata+sem_HsToken :: HsToken ->+ T_HsToken +sem_HsToken (AGField _field _attr _pos _rdesc ) =+ (sem_HsToken_AGField _field _attr _pos _rdesc )+sem_HsToken (AGLocal _var _pos _rdesc ) =+ (sem_HsToken_AGLocal _var _pos _rdesc )+sem_HsToken (CharToken _value _pos ) =+ (sem_HsToken_CharToken _value _pos )+sem_HsToken (Err _mesg _pos ) =+ (sem_HsToken_Err _mesg _pos )+sem_HsToken (HsToken _value _pos ) =+ (sem_HsToken_HsToken _value _pos )+sem_HsToken (StrToken _value _pos ) =+ (sem_HsToken_StrToken _value _pos )+-- semantic domain+newtype T_HsToken = T_HsToken (( (Set.Set String),((Pos,String))))+data Inh_HsToken = Inh_HsToken {}+data Syn_HsToken = Syn_HsToken {attrs_Syn_HsToken :: (Set.Set String),tok_Syn_HsToken :: ((Pos,String))}+wrap_HsToken :: T_HsToken ->+ Inh_HsToken ->+ Syn_HsToken +wrap_HsToken (T_HsToken sem ) (Inh_HsToken ) =+ (let ( _lhsOattrs,_lhsOtok) = sem + in (Syn_HsToken _lhsOattrs _lhsOtok ))+sem_HsToken_AGField :: Identifier ->+ Identifier ->+ Pos ->+ (Maybe String) ->+ T_HsToken +sem_HsToken_AGField field_ attr_ pos_ rdesc_ =+ (T_HsToken (let _lhsOattrs :: (Set.Set String)+ _lhsOtok :: ((Pos,String))+ -- "ExecutionPlan2Hs.ag"(line 363, column 15)+ _lhsOattrs =+ ({-# LINE 363 "ExecutionPlan2Hs.ag" #-}+ Set.singleton $ attrname True field_ attr_+ {-# LINE 2007 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 482, column 8)+ _addTrace =+ ({-# LINE 482 "ExecutionPlan2Hs.ag" #-}+ case rdesc_ of+ Just d -> \x -> "(trace " ++ show (d ++ " -> " ++ show field_ ++ "." ++ show attr_) ++ " (" ++ x ++ "))"+ Nothing -> id+ {-# LINE 2015 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 485, column 8)+ _lhsOtok =+ ({-# LINE 485 "ExecutionPlan2Hs.ag" #-}+ (pos_, _addTrace $ attrname True field_ attr_)+ {-# LINE 2021 "ExecutionPlan2Hs.hs" #-}+ )+ in ( _lhsOattrs,_lhsOtok)) )+sem_HsToken_AGLocal :: Identifier ->+ Pos ->+ (Maybe String) ->+ T_HsToken +sem_HsToken_AGLocal var_ pos_ rdesc_ =+ (T_HsToken (let _lhsOattrs :: (Set.Set String)+ _lhsOtok :: ((Pos,String))+ -- "ExecutionPlan2Hs.ag"(line 362, column 15)+ _lhsOattrs =+ ({-# LINE 362 "ExecutionPlan2Hs.ag" #-}+ Set.singleton $ locname var_+ {-# LINE 2035 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 477, column 15)+ _tok =+ ({-# LINE 477 "ExecutionPlan2Hs.ag" #-}+ (pos_,locname var_)+ {-# LINE 2041 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (from local)+ _lhsOtok =+ ({-# LINE 480 "ExecutionPlan2Hs.ag" #-}+ _tok+ {-# LINE 2047 "ExecutionPlan2Hs.hs" #-}+ )+ in ( _lhsOattrs,_lhsOtok)) )+sem_HsToken_CharToken :: String ->+ Pos ->+ T_HsToken +sem_HsToken_CharToken value_ pos_ =+ (T_HsToken (let _lhsOtok :: ((Pos,String))+ _lhsOattrs :: (Set.Set String)+ -- "ExecutionPlan2Hs.ag"(line 489, column 16)+ _lhsOtok =+ ({-# LINE 489 "ExecutionPlan2Hs.ag" #-}+ (pos_, if null value_+ then ""+ else showCharShort (head value_)+ )+ {-# LINE 2063 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 360, column 37)+ _lhsOattrs =+ ({-# LINE 360 "ExecutionPlan2Hs.ag" #-}+ Set.empty+ {-# LINE 2069 "ExecutionPlan2Hs.hs" #-}+ )+ in ( _lhsOattrs,_lhsOtok)) )+sem_HsToken_Err :: String ->+ Pos ->+ T_HsToken +sem_HsToken_Err mesg_ pos_ =+ (T_HsToken (let _lhsOtok :: ((Pos,String))+ _lhsOattrs :: (Set.Set String)+ -- "ExecutionPlan2Hs.ag"(line 495, column 16)+ _lhsOtok =+ ({-# LINE 495 "ExecutionPlan2Hs.ag" #-}+ (pos_, "")+ {-# LINE 2082 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 360, column 37)+ _lhsOattrs =+ ({-# LINE 360 "ExecutionPlan2Hs.ag" #-}+ Set.empty+ {-# LINE 2088 "ExecutionPlan2Hs.hs" #-}+ )+ in ( _lhsOattrs,_lhsOtok)) )+sem_HsToken_HsToken :: String ->+ Pos ->+ T_HsToken +sem_HsToken_HsToken value_ pos_ =+ (T_HsToken (let _lhsOtok :: ((Pos,String))+ _lhsOattrs :: (Set.Set String)+ -- "ExecutionPlan2Hs.ag"(line 487, column 14)+ _lhsOtok =+ ({-# LINE 487 "ExecutionPlan2Hs.ag" #-}+ (pos_, value_)+ {-# LINE 2101 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 360, column 37)+ _lhsOattrs =+ ({-# LINE 360 "ExecutionPlan2Hs.ag" #-}+ Set.empty+ {-# LINE 2107 "ExecutionPlan2Hs.hs" #-}+ )+ in ( _lhsOattrs,_lhsOtok)) )+sem_HsToken_StrToken :: String ->+ Pos ->+ T_HsToken +sem_HsToken_StrToken value_ pos_ =+ (T_HsToken (let _lhsOtok :: ((Pos,String))+ _lhsOattrs :: (Set.Set String)+ -- "ExecutionPlan2Hs.ag"(line 494, column 16)+ _lhsOtok =+ ({-# LINE 494 "ExecutionPlan2Hs.ag" #-}+ (pos_, showStrShort value_)+ {-# LINE 2120 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 360, column 37)+ _lhsOattrs =+ ({-# LINE 360 "ExecutionPlan2Hs.ag" #-}+ Set.empty+ {-# LINE 2126 "ExecutionPlan2Hs.hs" #-}+ )+ in ( _lhsOattrs,_lhsOtok)) )+-- HsTokens ----------------------------------------------------+{-+ visit 0:+ synthesized attribute:+ tks : [(Pos,String)]+ alternatives:+ alternative Cons:+ child hd : HsToken + child tl : HsTokens + alternative Nil:+-}+-- cata+sem_HsTokens :: HsTokens ->+ T_HsTokens +sem_HsTokens list =+ (Prelude.foldr sem_HsTokens_Cons sem_HsTokens_Nil (Prelude.map sem_HsToken list) )+-- semantic domain+newtype T_HsTokens = T_HsTokens (( ([(Pos,String)])))+data Inh_HsTokens = Inh_HsTokens {}+data Syn_HsTokens = Syn_HsTokens {tks_Syn_HsTokens :: ([(Pos,String)])}+wrap_HsTokens :: T_HsTokens ->+ Inh_HsTokens ->+ Syn_HsTokens +wrap_HsTokens (T_HsTokens sem ) (Inh_HsTokens ) =+ (let ( _lhsOtks) = sem + in (Syn_HsTokens _lhsOtks ))+sem_HsTokens_Cons :: T_HsToken ->+ T_HsTokens ->+ T_HsTokens +sem_HsTokens_Cons (T_HsToken hd_ ) (T_HsTokens tl_ ) =+ (T_HsTokens (let _lhsOtks :: ([(Pos,String)])+ _hdIattrs :: (Set.Set String)+ _hdItok :: ((Pos,String))+ _tlItks :: ([(Pos,String)])+ -- "ExecutionPlan2Hs.ag"(line 472, column 10)+ _lhsOtks =+ ({-# LINE 472 "ExecutionPlan2Hs.ag" #-}+ _hdItok : _tlItks+ {-# LINE 2167 "ExecutionPlan2Hs.hs" #-}+ )+ ( _hdIattrs,_hdItok) =+ hd_ + ( _tlItks) =+ tl_ + in ( _lhsOtks)) )+sem_HsTokens_Nil :: T_HsTokens +sem_HsTokens_Nil =+ (T_HsTokens (let _lhsOtks :: ([(Pos,String)])+ -- "ExecutionPlan2Hs.ag"(line 473, column 10)+ _lhsOtks =+ ({-# LINE 473 "ExecutionPlan2Hs.ag" #-}+ []+ {-# LINE 2181 "ExecutionPlan2Hs.hs" #-}+ )+ in ( _lhsOtks)) )+-- HsTokensRoot ------------------------------------------------+{-+ alternatives:+ alternative HsTokensRoot:+ child tokens : HsTokens +-}+-- cata+sem_HsTokensRoot :: HsTokensRoot ->+ T_HsTokensRoot +sem_HsTokensRoot (HsTokensRoot _tokens ) =+ (sem_HsTokensRoot_HsTokensRoot (sem_HsTokens _tokens ) )+-- semantic domain+newtype T_HsTokensRoot = T_HsTokensRoot (( ))+data Inh_HsTokensRoot = Inh_HsTokensRoot {}+data Syn_HsTokensRoot = Syn_HsTokensRoot {}+wrap_HsTokensRoot :: T_HsTokensRoot ->+ Inh_HsTokensRoot ->+ Syn_HsTokensRoot +wrap_HsTokensRoot (T_HsTokensRoot sem ) (Inh_HsTokensRoot ) =+ (let ( ) = sem + in (Syn_HsTokensRoot ))+sem_HsTokensRoot_HsTokensRoot :: T_HsTokens ->+ T_HsTokensRoot +sem_HsTokensRoot_HsTokensRoot (T_HsTokens tokens_ ) =+ (T_HsTokensRoot (let _tokensItks :: ([(Pos,String)])+ ( _tokensItks) =+ tokens_ + in ( )) )+-- Pattern -----------------------------------------------------+{-+ visit 0:+ synthesized attributes:+ attrs : Set.Set String+ copy : SELF + sem_lhs : PP_Doc+ alternatives:+ alternative Alias:+ child field : {Identifier}+ child attr : {Identifier}+ child pat : Pattern + child parts : Patterns + visit 0:+ local copy : _+ alternative Constr:+ child name : {ConstructorIdent}+ child pats : Patterns + visit 0:+ local copy : _+ alternative Irrefutable:+ child pat : Pattern + visit 0:+ local copy : _+ alternative Product:+ child pos : {Pos}+ child pats : Patterns + visit 0:+ local copy : _+ alternative Underscore:+ child pos : {Pos}+ visit 0:+ local copy : _+-}+-- cata+sem_Pattern :: Pattern ->+ T_Pattern +sem_Pattern (Alias _field _attr _pat _parts ) =+ (sem_Pattern_Alias _field _attr (sem_Pattern _pat ) (sem_Patterns _parts ) )+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 )+-- semantic domain+newtype T_Pattern = T_Pattern (( (Set.Set String),Pattern ,PP_Doc))+data Inh_Pattern = Inh_Pattern {}+data Syn_Pattern = Syn_Pattern {attrs_Syn_Pattern :: (Set.Set String),copy_Syn_Pattern :: Pattern ,sem_lhs_Syn_Pattern :: PP_Doc}+wrap_Pattern :: T_Pattern ->+ Inh_Pattern ->+ Syn_Pattern +wrap_Pattern (T_Pattern sem ) (Inh_Pattern ) =+ (let ( _lhsOattrs,_lhsOcopy,_lhsOsem_lhs) = sem + in (Syn_Pattern _lhsOattrs _lhsOcopy _lhsOsem_lhs ))+sem_Pattern_Alias :: Identifier ->+ Identifier ->+ T_Pattern ->+ T_Patterns ->+ T_Pattern +sem_Pattern_Alias field_ attr_ (T_Pattern pat_ ) (T_Patterns parts_ ) =+ (T_Pattern (let _lhsOsem_lhs :: PP_Doc+ _lhsOattrs :: (Set.Set String)+ _lhsOcopy :: Pattern + _patIattrs :: (Set.Set String)+ _patIcopy :: Pattern + _patIsem_lhs :: PP_Doc+ _partsIattrs :: (Set.Set String)+ _partsIcopy :: Patterns + _partsIsem_lhs :: ([PP_Doc])+ -- "ExecutionPlan2Hs.ag"(line 353, column 17)+ _lhsOsem_lhs =+ ({-# LINE 353 "ExecutionPlan2Hs.ag" #-}+ text $ attrname False field_ attr_+ {-# LINE 2288 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 354, column 17)+ _lhsOattrs =+ ({-# LINE 354 "ExecutionPlan2Hs.ag" #-}+ Set.singleton $ attrname False field_ attr_+ {-# LINE 2294 "ExecutionPlan2Hs.hs" #-}+ )+ -- self rule+ _copy =+ ({-# LINE 23 "./Patterns.ag" #-}+ Alias field_ attr_ _patIcopy _partsIcopy+ {-# LINE 2300 "ExecutionPlan2Hs.hs" #-}+ )+ -- self rule+ _lhsOcopy =+ ({-# LINE 23 "./Patterns.ag" #-}+ _copy+ {-# LINE 2306 "ExecutionPlan2Hs.hs" #-}+ )+ ( _patIattrs,_patIcopy,_patIsem_lhs) =+ pat_ + ( _partsIattrs,_partsIcopy,_partsIsem_lhs) =+ parts_ + in ( _lhsOattrs,_lhsOcopy,_lhsOsem_lhs)) )+sem_Pattern_Constr :: ConstructorIdent ->+ T_Patterns ->+ T_Pattern +sem_Pattern_Constr name_ (T_Patterns pats_ ) =+ (T_Pattern (let _lhsOsem_lhs :: PP_Doc+ _lhsOattrs :: (Set.Set String)+ _lhsOcopy :: Pattern + _patsIattrs :: (Set.Set String)+ _patsIcopy :: Patterns + _patsIsem_lhs :: ([PP_Doc])+ -- "ExecutionPlan2Hs.ag"(line 356, column 17)+ _lhsOsem_lhs =+ ({-# LINE 356 "ExecutionPlan2Hs.ag" #-}+ pp_parens $ name_ >#< hv_sp _patsIsem_lhs+ {-# LINE 2327 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 347, column 27)+ _lhsOattrs =+ ({-# LINE 347 "ExecutionPlan2Hs.ag" #-}+ _patsIattrs+ {-# LINE 2333 "ExecutionPlan2Hs.hs" #-}+ )+ -- self rule+ _copy =+ ({-# LINE 23 "./Patterns.ag" #-}+ Constr name_ _patsIcopy+ {-# LINE 2339 "ExecutionPlan2Hs.hs" #-}+ )+ -- self rule+ _lhsOcopy =+ ({-# LINE 23 "./Patterns.ag" #-}+ _copy+ {-# LINE 2345 "ExecutionPlan2Hs.hs" #-}+ )+ ( _patsIattrs,_patsIcopy,_patsIsem_lhs) =+ pats_ + in ( _lhsOattrs,_lhsOcopy,_lhsOsem_lhs)) )+sem_Pattern_Irrefutable :: T_Pattern ->+ T_Pattern +sem_Pattern_Irrefutable (T_Pattern pat_ ) =+ (T_Pattern (let _lhsOsem_lhs :: PP_Doc+ _lhsOattrs :: (Set.Set String)+ _lhsOcopy :: Pattern + _patIattrs :: (Set.Set String)+ _patIcopy :: Pattern + _patIsem_lhs :: PP_Doc+ -- "ExecutionPlan2Hs.ag"(line 358, column 17)+ _lhsOsem_lhs =+ ({-# LINE 358 "ExecutionPlan2Hs.ag" #-}+ text "~" >|< pp_parens _patIsem_lhs+ {-# LINE 2363 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 347, column 27)+ _lhsOattrs =+ ({-# LINE 347 "ExecutionPlan2Hs.ag" #-}+ _patIattrs+ {-# LINE 2369 "ExecutionPlan2Hs.hs" #-}+ )+ -- self rule+ _copy =+ ({-# LINE 23 "./Patterns.ag" #-}+ Irrefutable _patIcopy+ {-# LINE 2375 "ExecutionPlan2Hs.hs" #-}+ )+ -- self rule+ _lhsOcopy =+ ({-# LINE 23 "./Patterns.ag" #-}+ _copy+ {-# LINE 2381 "ExecutionPlan2Hs.hs" #-}+ )+ ( _patIattrs,_patIcopy,_patIsem_lhs) =+ pat_ + in ( _lhsOattrs,_lhsOcopy,_lhsOsem_lhs)) )+sem_Pattern_Product :: Pos ->+ T_Patterns ->+ T_Pattern +sem_Pattern_Product pos_ (T_Patterns pats_ ) =+ (T_Pattern (let _lhsOsem_lhs :: PP_Doc+ _lhsOattrs :: (Set.Set String)+ _lhsOcopy :: Pattern + _patsIattrs :: (Set.Set String)+ _patsIcopy :: Patterns + _patsIsem_lhs :: ([PP_Doc])+ -- "ExecutionPlan2Hs.ag"(line 355, column 17)+ _lhsOsem_lhs =+ ({-# LINE 355 "ExecutionPlan2Hs.ag" #-}+ pp_block "(" ")" "," _patsIsem_lhs+ {-# LINE 2400 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 347, column 27)+ _lhsOattrs =+ ({-# LINE 347 "ExecutionPlan2Hs.ag" #-}+ _patsIattrs+ {-# LINE 2406 "ExecutionPlan2Hs.hs" #-}+ )+ -- self rule+ _copy =+ ({-# LINE 23 "./Patterns.ag" #-}+ Product pos_ _patsIcopy+ {-# LINE 2412 "ExecutionPlan2Hs.hs" #-}+ )+ -- self rule+ _lhsOcopy =+ ({-# LINE 23 "./Patterns.ag" #-}+ _copy+ {-# LINE 2418 "ExecutionPlan2Hs.hs" #-}+ )+ ( _patsIattrs,_patsIcopy,_patsIsem_lhs) =+ pats_ + in ( _lhsOattrs,_lhsOcopy,_lhsOsem_lhs)) )+sem_Pattern_Underscore :: Pos ->+ T_Pattern +sem_Pattern_Underscore pos_ =+ (T_Pattern (let _lhsOsem_lhs :: PP_Doc+ _lhsOattrs :: (Set.Set String)+ _lhsOcopy :: Pattern + -- "ExecutionPlan2Hs.ag"(line 357, column 17)+ _lhsOsem_lhs =+ ({-# LINE 357 "ExecutionPlan2Hs.ag" #-}+ text "_"+ {-# LINE 2433 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 347, column 27)+ _lhsOattrs =+ ({-# LINE 347 "ExecutionPlan2Hs.ag" #-}+ Set.empty+ {-# LINE 2439 "ExecutionPlan2Hs.hs" #-}+ )+ -- self rule+ _copy =+ ({-# LINE 23 "./Patterns.ag" #-}+ Underscore pos_+ {-# LINE 2445 "ExecutionPlan2Hs.hs" #-}+ )+ -- self rule+ _lhsOcopy =+ ({-# LINE 23 "./Patterns.ag" #-}+ _copy+ {-# LINE 2451 "ExecutionPlan2Hs.hs" #-}+ )+ in ( _lhsOattrs,_lhsOcopy,_lhsOsem_lhs)) )+-- Patterns ----------------------------------------------------+{-+ visit 0:+ synthesized attributes:+ attrs : Set.Set String+ copy : SELF + sem_lhs : [PP_Doc]+ alternatives:+ alternative Cons:+ child hd : Pattern + child tl : Patterns + visit 0:+ local copy : _+ alternative Nil:+ visit 0:+ local copy : _+-}+-- cata+sem_Patterns :: Patterns ->+ T_Patterns +sem_Patterns list =+ (Prelude.foldr sem_Patterns_Cons sem_Patterns_Nil (Prelude.map sem_Pattern list) )+-- semantic domain+newtype T_Patterns = T_Patterns (( (Set.Set String),Patterns ,([PP_Doc])))+data Inh_Patterns = Inh_Patterns {}+data Syn_Patterns = Syn_Patterns {attrs_Syn_Patterns :: (Set.Set String),copy_Syn_Patterns :: Patterns ,sem_lhs_Syn_Patterns :: ([PP_Doc])}+wrap_Patterns :: T_Patterns ->+ Inh_Patterns ->+ Syn_Patterns +wrap_Patterns (T_Patterns sem ) (Inh_Patterns ) =+ (let ( _lhsOattrs,_lhsOcopy,_lhsOsem_lhs) = sem + in (Syn_Patterns _lhsOattrs _lhsOcopy _lhsOsem_lhs ))+sem_Patterns_Cons :: T_Pattern ->+ T_Patterns ->+ T_Patterns +sem_Patterns_Cons (T_Pattern hd_ ) (T_Patterns tl_ ) =+ (T_Patterns (let _lhsOattrs :: (Set.Set String)+ _lhsOsem_lhs :: ([PP_Doc])+ _lhsOcopy :: Patterns + _hdIattrs :: (Set.Set String)+ _hdIcopy :: Pattern + _hdIsem_lhs :: PP_Doc+ _tlIattrs :: (Set.Set String)+ _tlIcopy :: Patterns + _tlIsem_lhs :: ([PP_Doc])+ -- use rule "ExecutionPlan2Hs.ag"(line 349, column 27)+ _lhsOattrs =+ ({-# LINE 349 "ExecutionPlan2Hs.ag" #-}+ _hdIattrs `Set.union` _tlIattrs+ {-# LINE 2503 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 350, column 29)+ _lhsOsem_lhs =+ ({-# LINE 350 "ExecutionPlan2Hs.ag" #-}+ _hdIsem_lhs : _tlIsem_lhs+ {-# LINE 2509 "ExecutionPlan2Hs.hs" #-}+ )+ -- self rule+ _copy =+ ({-# LINE 23 "./Patterns.ag" #-}+ (:) _hdIcopy _tlIcopy+ {-# LINE 2515 "ExecutionPlan2Hs.hs" #-}+ )+ -- self rule+ _lhsOcopy =+ ({-# LINE 23 "./Patterns.ag" #-}+ _copy+ {-# LINE 2521 "ExecutionPlan2Hs.hs" #-}+ )+ ( _hdIattrs,_hdIcopy,_hdIsem_lhs) =+ hd_ + ( _tlIattrs,_tlIcopy,_tlIsem_lhs) =+ tl_ + in ( _lhsOattrs,_lhsOcopy,_lhsOsem_lhs)) )+sem_Patterns_Nil :: T_Patterns +sem_Patterns_Nil =+ (T_Patterns (let _lhsOattrs :: (Set.Set String)+ _lhsOsem_lhs :: ([PP_Doc])+ _lhsOcopy :: Patterns + -- use rule "ExecutionPlan2Hs.ag"(line 349, column 27)+ _lhsOattrs =+ ({-# LINE 349 "ExecutionPlan2Hs.ag" #-}+ Set.empty+ {-# LINE 2537 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 350, column 29)+ _lhsOsem_lhs =+ ({-# LINE 350 "ExecutionPlan2Hs.ag" #-}+ []+ {-# LINE 2543 "ExecutionPlan2Hs.hs" #-}+ )+ -- self rule+ _copy =+ ({-# LINE 23 "./Patterns.ag" #-}+ []+ {-# LINE 2549 "ExecutionPlan2Hs.hs" #-}+ )+ -- self rule+ _lhsOcopy =+ ({-# LINE 23 "./Patterns.ag" #-}+ _copy+ {-# LINE 2555 "ExecutionPlan2Hs.hs" #-}+ )+ in ( _lhsOattrs,_lhsOcopy,_lhsOsem_lhs)) )+-- Visit -------------------------------------------------------+{-+ visit 0:+ inherited attributes:+ allchildvisit : Map.Map VisitIdentifier (Identifier -> PP_Doc)+ allintramap : Map.Map StateIdentifier (Set.Set String)+ avisitdefs : Map.Map VisitIdentifier (Set.Set Identifier)+ avisituses : Map.Map VisitIdentifier (Set.Set Identifier)+ childintros : Map.Map Identifier PP_Doc+ inhmap : Attributes+ mrules : Map.Map Identifier PP_Doc+ nt : NontermIdent+ ruledefs : Map.Map Identifier (Set.Set String)+ ruleuses : Map.Map Identifier (Set.Set String)+ synmap : Attributes+ terminaldefs : Set.Set String+ synthesized attributes:+ allvisits : (VisitIdentifier,StateIdentifier, StateIdentifier)+ childvisit : Map.Map VisitIdentifier (Identifier -> PP_Doc)+ intramap : Map.Map StateIdentifier (Set.Set String)+ sem_visit : (StateIdentifier,PP_Doc) + t_visits : PP_Doc+ usedrules : Set.Set Identifier+ visitdefs : Map.Map VisitIdentifier (Set.Set Identifier)+ visituses : Map.Map VisitIdentifier (Set.Set Identifier)+ alternatives:+ alternative Visit:+ child ident : {VisitIdentifier}+ child from : {StateIdentifier}+ child to : {StateIdentifier}+ child inh : {Set.Set Identifier}+ child syn : {Set.Set Identifier}+ child steps : VisitSteps + visit 0:+ local inhpart : _+ local synpart : _+ local inhargs : _+ local synargs : _+ local nextargs : _+ local sem_steps : _+ local nextintra : _+ local uses : _+ local defs : _+-}+-- cata+sem_Visit :: Visit ->+ T_Visit +sem_Visit (Visit _ident _from _to _inh _syn _steps ) =+ (sem_Visit_Visit _ident _from _to _inh _syn (sem_VisitSteps _steps ) )+-- semantic domain+newtype T_Visit = T_Visit ((Map.Map VisitIdentifier (Identifier -> PP_Doc)) ->+ (Map.Map StateIdentifier (Set.Set String)) ->+ (Map.Map VisitIdentifier (Set.Set Identifier)) ->+ (Map.Map VisitIdentifier (Set.Set Identifier)) ->+ (Map.Map Identifier PP_Doc) ->+ Attributes ->+ (Map.Map Identifier PP_Doc) ->+ NontermIdent ->+ (Map.Map Identifier (Set.Set String)) ->+ (Map.Map Identifier (Set.Set String)) ->+ Attributes ->+ (Set.Set String) ->+ ( ((VisitIdentifier,StateIdentifier, StateIdentifier)),(Map.Map VisitIdentifier (Identifier -> PP_Doc)),(Map.Map StateIdentifier (Set.Set String)),( (StateIdentifier,PP_Doc) ),PP_Doc,(Set.Set Identifier),(Map.Map VisitIdentifier (Set.Set Identifier)),(Map.Map VisitIdentifier (Set.Set Identifier))))+data Inh_Visit = Inh_Visit {allchildvisit_Inh_Visit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc)),allintramap_Inh_Visit :: (Map.Map StateIdentifier (Set.Set String)),avisitdefs_Inh_Visit :: (Map.Map VisitIdentifier (Set.Set Identifier)),avisituses_Inh_Visit :: (Map.Map VisitIdentifier (Set.Set Identifier)),childintros_Inh_Visit :: (Map.Map Identifier PP_Doc),inhmap_Inh_Visit :: Attributes,mrules_Inh_Visit :: (Map.Map Identifier PP_Doc),nt_Inh_Visit :: NontermIdent,ruledefs_Inh_Visit :: (Map.Map Identifier (Set.Set String)),ruleuses_Inh_Visit :: (Map.Map Identifier (Set.Set String)),synmap_Inh_Visit :: Attributes,terminaldefs_Inh_Visit :: (Set.Set String)}+data Syn_Visit = Syn_Visit {allvisits_Syn_Visit :: ((VisitIdentifier,StateIdentifier, StateIdentifier)),childvisit_Syn_Visit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc)),intramap_Syn_Visit :: (Map.Map StateIdentifier (Set.Set String)),sem_visit_Syn_Visit :: ( (StateIdentifier,PP_Doc) ),t_visits_Syn_Visit :: PP_Doc,usedrules_Syn_Visit :: (Set.Set Identifier),visitdefs_Syn_Visit :: (Map.Map VisitIdentifier (Set.Set Identifier)),visituses_Syn_Visit :: (Map.Map VisitIdentifier (Set.Set Identifier))}+wrap_Visit :: T_Visit ->+ Inh_Visit ->+ Syn_Visit +wrap_Visit (T_Visit sem ) (Inh_Visit _lhsIallchildvisit _lhsIallintramap _lhsIavisitdefs _lhsIavisituses _lhsIchildintros _lhsIinhmap _lhsImrules _lhsInt _lhsIruledefs _lhsIruleuses _lhsIsynmap _lhsIterminaldefs ) =+ (let ( _lhsOallvisits,_lhsOchildvisit,_lhsOintramap,_lhsOsem_visit,_lhsOt_visits,_lhsOusedrules,_lhsOvisitdefs,_lhsOvisituses) = sem _lhsIallchildvisit _lhsIallintramap _lhsIavisitdefs _lhsIavisituses _lhsIchildintros _lhsIinhmap _lhsImrules _lhsInt _lhsIruledefs _lhsIruleuses _lhsIsynmap _lhsIterminaldefs + in (Syn_Visit _lhsOallvisits _lhsOchildvisit _lhsOintramap _lhsOsem_visit _lhsOt_visits _lhsOusedrules _lhsOvisitdefs _lhsOvisituses ))+sem_Visit_Visit :: VisitIdentifier ->+ StateIdentifier ->+ StateIdentifier ->+ (Set.Set Identifier) ->+ (Set.Set Identifier) ->+ T_VisitSteps ->+ T_Visit +sem_Visit_Visit ident_ from_ to_ inh_ syn_ (T_VisitSteps steps_ ) =+ (T_Visit (\ _lhsIallchildvisit+ _lhsIallintramap+ _lhsIavisitdefs+ _lhsIavisituses+ _lhsIchildintros+ _lhsIinhmap+ _lhsImrules+ _lhsInt+ _lhsIruledefs+ _lhsIruleuses+ _lhsIsynmap+ _lhsIterminaldefs ->+ (let _lhsOallvisits :: ((VisitIdentifier,StateIdentifier, StateIdentifier))+ _lhsOt_visits :: PP_Doc+ _lhsOsem_visit :: ( (StateIdentifier,PP_Doc) )+ _lhsOchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))+ _lhsOintramap :: (Map.Map StateIdentifier (Set.Set String))+ _lhsOvisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _lhsOvisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _lhsOusedrules :: (Set.Set Identifier)+ _stepsOallchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))+ _stepsOavisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _stepsOavisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _stepsOchildintros :: (Map.Map Identifier PP_Doc)+ _stepsOmrules :: (Map.Map Identifier PP_Doc)+ _stepsOruledefs :: (Map.Map Identifier (Set.Set String))+ _stepsOruleuses :: (Map.Map Identifier (Set.Set String))+ _stepsIdefs :: (Set.Set String)+ _stepsIsem_steps :: PP_Doc+ _stepsIusedrules :: (Set.Set Identifier)+ _stepsIuses :: (Set.Set String)+ -- "ExecutionPlan2Hs.ag"(line 141, column 11)+ _lhsOallvisits =+ ({-# LINE 141 "ExecutionPlan2Hs.ag" #-}+ (ident_, from_, to_)+ {-# LINE 2672 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 197, column 11)+ _lhsOt_visits =+ ({-# LINE 197 "ExecutionPlan2Hs.ag" #-}+ "type" >#< "T_" >|< _lhsInt >|< "_v" >|< ident_ >#< "=" >#< _inhpart >#<+ "Identity" >#< "(" >#< _synpart >#< "T_" >|< _lhsInt >|< "_s" >|< to_ >#< ")"+ {-# LINE 2679 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 199, column 11)+ _inhpart =+ ({-# LINE 199 "ExecutionPlan2Hs.ag" #-}+ if Set.null inh_+ then empty+ else (ppSpaced $ map (\i -> (\x -> x >#< "->") $ typeToHaskellString (Just _lhsInt) []+ $ fromJust $ Map.lookup i _lhsIinhmap) $ Set.toList inh_)+ {-# LINE 2688 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 203, column 11)+ _synpart =+ ({-# LINE 203 "ExecutionPlan2Hs.ag" #-}+ if Set.null syn_+ then empty+ else (ppCommas $ map (\i -> typeToHaskellString (Just _lhsInt) [] $ fromJust $ Map.lookup i _lhsIsynmap) $ Set.toList syn_) >#< ","+ {-# LINE 2696 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 292, column 11)+ _lhsOsem_visit =+ ({-# LINE 292 "ExecutionPlan2Hs.ag" #-}+ (from_, "v" >|< ident_ >#< "::" >#< "T_" >|< _lhsInt >|< "_v" >|< ident_+ >-< "v" >|< ident_ >#< (_inhargs _LHS True) >#< "=" >#< "do"+ >-< indent 3 _sem_steps )+ {-# LINE 2704 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 295, column 11)+ _inhargs =+ ({-# LINE 295 "ExecutionPlan2Hs.ag" #-}+ \chn inh -> ppSpaced $ map (\arg -> attrname inh chn arg) $ Set.toList inh_+ {-# LINE 2710 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 296, column 11)+ _synargs =+ ({-# LINE 296 "ExecutionPlan2Hs.ag" #-}+ ppSpaced $ map (\arg -> attrname False _LHS arg >#< ",") $ Set.toList syn_+ {-# LINE 2716 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 297, column 11)+ _nextargs =+ ({-# LINE 297 "ExecutionPlan2Hs.ag" #-}+ ppSpaced $ Set.toList $ maybe Set.empty id $ Map.lookup to_ _lhsIallintramap+ {-# LINE 2722 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 298, column 11)+ _sem_steps =+ ({-# LINE 298 "ExecutionPlan2Hs.ag" #-}+ _stepsIsem_steps+ >-< "return" >#< "(" >#< _synargs >#< "st" >|< to_ >#< _nextargs >#< ")"+ {-# LINE 2729 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 387, column 11)+ _lhsOchildvisit =+ ({-# LINE 387 "ExecutionPlan2Hs.ag" #-}+ Map.singleton ident_ $ \chn -> "(" >#< ppSpaced (+ map (\x -> attrname True chn x >#< ",") $ Set.toList syn_) >#< locname chn+ >#< ")" >#< "<-" >#< "inv_" >|< _lhsInt >|< "_s" >|< from_ >#< locname chn+ >#< "K_" >|< _lhsInt >|< "_v" >|< ident_ >#< _inhargs chn False+ {-# LINE 2738 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 413, column 11)+ _lhsOintramap =+ ({-# LINE 413 "ExecutionPlan2Hs.ag" #-}+ Map.singleton from_ $ (_uses `Set.union` _nextintra ) `Set.difference` _defs+ {-# LINE 2744 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 414, column 11)+ _nextintra =+ ({-# LINE 414 "ExecutionPlan2Hs.ag" #-}+ maybe Set.empty id $ Map.lookup to_ _lhsIallintramap+ {-# LINE 2750 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 415, column 11)+ _uses =+ ({-# LINE 415 "ExecutionPlan2Hs.ag" #-}+ _stepsIuses+ {-# LINE 2756 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 416, column 11)+ _defs =+ ({-# LINE 416 "ExecutionPlan2Hs.ag" #-}+ _stepsIdefs `Set.union` (Set.map (lhsname True) inh_) `Set.union` _lhsIterminaldefs+ {-# LINE 2762 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 440, column 11)+ _lhsOvisitdefs =+ ({-# LINE 440 "ExecutionPlan2Hs.ag" #-}+ Map.singleton ident_ syn_+ {-# LINE 2768 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 441, column 11)+ _lhsOvisituses =+ ({-# LINE 441 "ExecutionPlan2Hs.ag" #-}+ Map.singleton ident_ inh_+ {-# LINE 2774 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 175, column 56)+ _lhsOusedrules =+ ({-# LINE 175 "ExecutionPlan2Hs.ag" #-}+ _stepsIusedrules+ {-# LINE 2780 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _stepsOallchildvisit =+ ({-# LINE 381 "ExecutionPlan2Hs.ag" #-}+ _lhsIallchildvisit+ {-# LINE 2786 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _stepsOavisitdefs =+ ({-# LINE 446 "ExecutionPlan2Hs.ag" #-}+ _lhsIavisitdefs+ {-# LINE 2792 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _stepsOavisituses =+ ({-# LINE 447 "ExecutionPlan2Hs.ag" #-}+ _lhsIavisituses+ {-# LINE 2798 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _stepsOchildintros =+ ({-# LINE 321 "ExecutionPlan2Hs.ag" #-}+ _lhsIchildintros+ {-# LINE 2804 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _stepsOmrules =+ ({-# LINE 303 "ExecutionPlan2Hs.ag" #-}+ _lhsImrules+ {-# LINE 2810 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _stepsOruledefs =+ ({-# LINE 421 "ExecutionPlan2Hs.ag" #-}+ _lhsIruledefs+ {-# LINE 2816 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _stepsOruleuses =+ ({-# LINE 422 "ExecutionPlan2Hs.ag" #-}+ _lhsIruleuses+ {-# LINE 2822 "ExecutionPlan2Hs.hs" #-}+ )+ ( _stepsIdefs,_stepsIsem_steps,_stepsIusedrules,_stepsIuses) =+ steps_ _stepsOallchildvisit _stepsOavisitdefs _stepsOavisituses _stepsOchildintros _stepsOmrules _stepsOruledefs _stepsOruleuses + in ( _lhsOallvisits,_lhsOchildvisit,_lhsOintramap,_lhsOsem_visit,_lhsOt_visits,_lhsOusedrules,_lhsOvisitdefs,_lhsOvisituses))) )+-- VisitStep ---------------------------------------------------+{-+ visit 0:+ inherited attributes:+ allchildvisit : Map.Map VisitIdentifier (Identifier -> PP_Doc)+ avisitdefs : Map.Map VisitIdentifier (Set.Set Identifier)+ avisituses : Map.Map VisitIdentifier (Set.Set Identifier)+ childintros : Map.Map Identifier PP_Doc+ mrules : Map.Map Identifier PP_Doc+ ruledefs : Map.Map Identifier (Set.Set String)+ ruleuses : Map.Map Identifier (Set.Set String)+ synthesized attributes:+ defs : Set.Set String+ sem_steps : PP_Doc+ usedrules : Set.Set Identifier+ uses : Set.Set String+ alternatives:+ alternative ChildIntro:+ child child : {Identifier}+ alternative ChildVisit:+ child child : {Identifier}+ child nonterm : {NontermIdent}+ child visit : {VisitIdentifier}+ alternative Sem:+ child name : {Identifier}+ alternative Sim:+ child steps : VisitSteps +-}+-- cata+sem_VisitStep :: VisitStep ->+ T_VisitStep +sem_VisitStep (ChildIntro _child ) =+ (sem_VisitStep_ChildIntro _child )+sem_VisitStep (ChildVisit _child _nonterm _visit ) =+ (sem_VisitStep_ChildVisit _child _nonterm _visit )+sem_VisitStep (Sem _name ) =+ (sem_VisitStep_Sem _name )+sem_VisitStep (Sim _steps ) =+ (sem_VisitStep_Sim (sem_VisitSteps _steps ) )+-- semantic domain+newtype T_VisitStep = T_VisitStep ((Map.Map VisitIdentifier (Identifier -> PP_Doc)) ->+ (Map.Map VisitIdentifier (Set.Set Identifier)) ->+ (Map.Map VisitIdentifier (Set.Set Identifier)) ->+ (Map.Map Identifier PP_Doc) ->+ (Map.Map Identifier PP_Doc) ->+ (Map.Map Identifier (Set.Set String)) ->+ (Map.Map Identifier (Set.Set String)) ->+ ( (Set.Set String),PP_Doc,(Set.Set Identifier),(Set.Set String)))+data Inh_VisitStep = Inh_VisitStep {allchildvisit_Inh_VisitStep :: (Map.Map VisitIdentifier (Identifier -> PP_Doc)),avisitdefs_Inh_VisitStep :: (Map.Map VisitIdentifier (Set.Set Identifier)),avisituses_Inh_VisitStep :: (Map.Map VisitIdentifier (Set.Set Identifier)),childintros_Inh_VisitStep :: (Map.Map Identifier PP_Doc),mrules_Inh_VisitStep :: (Map.Map Identifier PP_Doc),ruledefs_Inh_VisitStep :: (Map.Map Identifier (Set.Set String)),ruleuses_Inh_VisitStep :: (Map.Map Identifier (Set.Set String))}+data Syn_VisitStep = Syn_VisitStep {defs_Syn_VisitStep :: (Set.Set String),sem_steps_Syn_VisitStep :: PP_Doc,usedrules_Syn_VisitStep :: (Set.Set Identifier),uses_Syn_VisitStep :: (Set.Set String)}+wrap_VisitStep :: T_VisitStep ->+ Inh_VisitStep ->+ Syn_VisitStep +wrap_VisitStep (T_VisitStep sem ) (Inh_VisitStep _lhsIallchildvisit _lhsIavisitdefs _lhsIavisituses _lhsIchildintros _lhsImrules _lhsIruledefs _lhsIruleuses ) =+ (let ( _lhsOdefs,_lhsOsem_steps,_lhsOusedrules,_lhsOuses) = sem _lhsIallchildvisit _lhsIavisitdefs _lhsIavisituses _lhsIchildintros _lhsImrules _lhsIruledefs _lhsIruleuses + in (Syn_VisitStep _lhsOdefs _lhsOsem_steps _lhsOusedrules _lhsOuses ))+sem_VisitStep_ChildIntro :: Identifier ->+ T_VisitStep +sem_VisitStep_ChildIntro child_ =+ (T_VisitStep (\ _lhsIallchildvisit+ _lhsIavisitdefs+ _lhsIavisituses+ _lhsIchildintros+ _lhsImrules+ _lhsIruledefs+ _lhsIruleuses ->+ (let _lhsOsem_steps :: PP_Doc+ _lhsOdefs :: (Set.Set String)+ _lhsOusedrules :: (Set.Set Identifier)+ _lhsOuses :: (Set.Set String)+ -- "ExecutionPlan2Hs.ag"(line 307, column 16)+ _lhsOsem_steps =+ ({-# LINE 307 "ExecutionPlan2Hs.ag" #-}+ maybe (error $ "Child " ++ show child_ ++ " not found in: " ++ show _lhsIchildintros) id $ Map.lookup child_ _lhsIchildintros+ {-# LINE 2901 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 458, column 16)+ _lhsOdefs =+ ({-# LINE 458 "ExecutionPlan2Hs.ag" #-}+ Set.singleton $ locname child_+ {-# LINE 2907 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 175, column 56)+ _lhsOusedrules =+ ({-# LINE 175 "ExecutionPlan2Hs.ag" #-}+ Set.empty+ {-# LINE 2913 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 454, column 38)+ _lhsOuses =+ ({-# LINE 454 "ExecutionPlan2Hs.ag" #-}+ Set.empty+ {-# LINE 2919 "ExecutionPlan2Hs.hs" #-}+ )+ in ( _lhsOdefs,_lhsOsem_steps,_lhsOusedrules,_lhsOuses))) )+sem_VisitStep_ChildVisit :: Identifier ->+ NontermIdent ->+ VisitIdentifier ->+ T_VisitStep +sem_VisitStep_ChildVisit child_ nonterm_ visit_ =+ (T_VisitStep (\ _lhsIallchildvisit+ _lhsIavisitdefs+ _lhsIavisituses+ _lhsIchildintros+ _lhsImrules+ _lhsIruledefs+ _lhsIruleuses ->+ (let _lhsOsem_steps :: PP_Doc+ _lhsOdefs :: (Set.Set String)+ _lhsOuses :: (Set.Set String)+ _lhsOusedrules :: (Set.Set Identifier)+ -- "ExecutionPlan2Hs.ag"(line 308, column 16)+ _lhsOsem_steps =+ ({-# LINE 308 "ExecutionPlan2Hs.ag" #-}+ (maybe (error "Visit not found") id $ Map.lookup visit_ _lhsIallchildvisit) $ child_+ {-# LINE 2942 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 459, column 16)+ _lhsOdefs =+ ({-# LINE 459 "ExecutionPlan2Hs.ag" #-}+ maybe (error "Visit not found") (Set.map $ attrname True child_) $ Map.lookup visit_ _lhsIavisitdefs+ {-# LINE 2948 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 460, column 16)+ _lhsOuses =+ ({-# LINE 460 "ExecutionPlan2Hs.ag" #-}+ Set.insert (locname child_) $+ maybe (error "Visit not found") (Set.map $ attrname False child_) $ Map.lookup visit_ _lhsIavisituses+ {-# LINE 2955 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 175, column 56)+ _lhsOusedrules =+ ({-# LINE 175 "ExecutionPlan2Hs.ag" #-}+ Set.empty+ {-# LINE 2961 "ExecutionPlan2Hs.hs" #-}+ )+ in ( _lhsOdefs,_lhsOsem_steps,_lhsOusedrules,_lhsOuses))) )+sem_VisitStep_Sem :: Identifier ->+ T_VisitStep +sem_VisitStep_Sem name_ =+ (T_VisitStep (\ _lhsIallchildvisit+ _lhsIavisitdefs+ _lhsIavisituses+ _lhsIchildintros+ _lhsImrules+ _lhsIruledefs+ _lhsIruleuses ->+ (let _lhsOusedrules :: (Set.Set Identifier)+ _lhsOsem_steps :: PP_Doc+ _lhsOdefs :: (Set.Set String)+ _lhsOuses :: (Set.Set String)+ -- "ExecutionPlan2Hs.ag"(line 179, column 9)+ _lhsOusedrules =+ ({-# LINE 179 "ExecutionPlan2Hs.ag" #-}+ Set.singleton name_+ {-# LINE 2982 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 306, column 16)+ _lhsOsem_steps =+ ({-# LINE 306 "ExecutionPlan2Hs.ag" #-}+ maybe (error "Rule not found") id $ Map.lookup name_ _lhsImrules+ {-# LINE 2988 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 456, column 16)+ _lhsOdefs =+ ({-# LINE 456 "ExecutionPlan2Hs.ag" #-}+ maybe (error "Rule not found") id $ Map.lookup name_ _lhsIruledefs+ {-# LINE 2994 "ExecutionPlan2Hs.hs" #-}+ )+ -- "ExecutionPlan2Hs.ag"(line 457, column 16)+ _lhsOuses =+ ({-# LINE 457 "ExecutionPlan2Hs.ag" #-}+ maybe (error "Rule not found") id $ Map.lookup name_ _lhsIruleuses+ {-# LINE 3000 "ExecutionPlan2Hs.hs" #-}+ )+ in ( _lhsOdefs,_lhsOsem_steps,_lhsOusedrules,_lhsOuses))) )+sem_VisitStep_Sim :: T_VisitSteps ->+ T_VisitStep +sem_VisitStep_Sim (T_VisitSteps steps_ ) =+ (T_VisitStep (\ _lhsIallchildvisit+ _lhsIavisitdefs+ _lhsIavisituses+ _lhsIchildintros+ _lhsImrules+ _lhsIruledefs+ _lhsIruleuses ->+ (let _lhsOdefs :: (Set.Set String)+ _lhsOsem_steps :: PP_Doc+ _lhsOusedrules :: (Set.Set Identifier)+ _lhsOuses :: (Set.Set String)+ _stepsOallchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))+ _stepsOavisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _stepsOavisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _stepsOchildintros :: (Map.Map Identifier PP_Doc)+ _stepsOmrules :: (Map.Map Identifier PP_Doc)+ _stepsOruledefs :: (Map.Map Identifier (Set.Set String))+ _stepsOruleuses :: (Map.Map Identifier (Set.Set String))+ _stepsIdefs :: (Set.Set String)+ _stepsIsem_steps :: PP_Doc+ _stepsIusedrules :: (Set.Set Identifier)+ _stepsIuses :: (Set.Set String)+ -- use rule "ExecutionPlan2Hs.ag"(line 453, column 38)+ _lhsOdefs =+ ({-# LINE 453 "ExecutionPlan2Hs.ag" #-}+ _stepsIdefs+ {-# LINE 3032 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 304, column 43)+ _lhsOsem_steps =+ ({-# LINE 304 "ExecutionPlan2Hs.ag" #-}+ _stepsIsem_steps+ {-# LINE 3038 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 175, column 56)+ _lhsOusedrules =+ ({-# LINE 175 "ExecutionPlan2Hs.ag" #-}+ _stepsIusedrules+ {-# LINE 3044 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 454, column 38)+ _lhsOuses =+ ({-# LINE 454 "ExecutionPlan2Hs.ag" #-}+ _stepsIuses+ {-# LINE 3050 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _stepsOallchildvisit =+ ({-# LINE 381 "ExecutionPlan2Hs.ag" #-}+ _lhsIallchildvisit+ {-# LINE 3056 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _stepsOavisitdefs =+ ({-# LINE 446 "ExecutionPlan2Hs.ag" #-}+ _lhsIavisitdefs+ {-# LINE 3062 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _stepsOavisituses =+ ({-# LINE 447 "ExecutionPlan2Hs.ag" #-}+ _lhsIavisituses+ {-# LINE 3068 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _stepsOchildintros =+ ({-# LINE 321 "ExecutionPlan2Hs.ag" #-}+ _lhsIchildintros+ {-# LINE 3074 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _stepsOmrules =+ ({-# LINE 303 "ExecutionPlan2Hs.ag" #-}+ _lhsImrules+ {-# LINE 3080 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _stepsOruledefs =+ ({-# LINE 421 "ExecutionPlan2Hs.ag" #-}+ _lhsIruledefs+ {-# LINE 3086 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _stepsOruleuses =+ ({-# LINE 422 "ExecutionPlan2Hs.ag" #-}+ _lhsIruleuses+ {-# LINE 3092 "ExecutionPlan2Hs.hs" #-}+ )+ ( _stepsIdefs,_stepsIsem_steps,_stepsIusedrules,_stepsIuses) =+ steps_ _stepsOallchildvisit _stepsOavisitdefs _stepsOavisituses _stepsOchildintros _stepsOmrules _stepsOruledefs _stepsOruleuses + in ( _lhsOdefs,_lhsOsem_steps,_lhsOusedrules,_lhsOuses))) )+-- VisitSteps --------------------------------------------------+{-+ visit 0:+ inherited attributes:+ allchildvisit : Map.Map VisitIdentifier (Identifier -> PP_Doc)+ avisitdefs : Map.Map VisitIdentifier (Set.Set Identifier)+ avisituses : Map.Map VisitIdentifier (Set.Set Identifier)+ childintros : Map.Map Identifier PP_Doc+ mrules : Map.Map Identifier PP_Doc+ ruledefs : Map.Map Identifier (Set.Set String)+ ruleuses : Map.Map Identifier (Set.Set String)+ synthesized attributes:+ defs : Set.Set String+ sem_steps : PP_Doc+ usedrules : Set.Set Identifier+ uses : Set.Set String+ alternatives:+ alternative Cons:+ child hd : VisitStep + child tl : VisitSteps + alternative Nil:+-}+-- cata+sem_VisitSteps :: VisitSteps ->+ T_VisitSteps +sem_VisitSteps list =+ (Prelude.foldr sem_VisitSteps_Cons sem_VisitSteps_Nil (Prelude.map sem_VisitStep list) )+-- semantic domain+newtype T_VisitSteps = T_VisitSteps ((Map.Map VisitIdentifier (Identifier -> PP_Doc)) ->+ (Map.Map VisitIdentifier (Set.Set Identifier)) ->+ (Map.Map VisitIdentifier (Set.Set Identifier)) ->+ (Map.Map Identifier PP_Doc) ->+ (Map.Map Identifier PP_Doc) ->+ (Map.Map Identifier (Set.Set String)) ->+ (Map.Map Identifier (Set.Set String)) ->+ ( (Set.Set String),PP_Doc,(Set.Set Identifier),(Set.Set String)))+data Inh_VisitSteps = Inh_VisitSteps {allchildvisit_Inh_VisitSteps :: (Map.Map VisitIdentifier (Identifier -> PP_Doc)),avisitdefs_Inh_VisitSteps :: (Map.Map VisitIdentifier (Set.Set Identifier)),avisituses_Inh_VisitSteps :: (Map.Map VisitIdentifier (Set.Set Identifier)),childintros_Inh_VisitSteps :: (Map.Map Identifier PP_Doc),mrules_Inh_VisitSteps :: (Map.Map Identifier PP_Doc),ruledefs_Inh_VisitSteps :: (Map.Map Identifier (Set.Set String)),ruleuses_Inh_VisitSteps :: (Map.Map Identifier (Set.Set String))}+data Syn_VisitSteps = Syn_VisitSteps {defs_Syn_VisitSteps :: (Set.Set String),sem_steps_Syn_VisitSteps :: PP_Doc,usedrules_Syn_VisitSteps :: (Set.Set Identifier),uses_Syn_VisitSteps :: (Set.Set String)}+wrap_VisitSteps :: T_VisitSteps ->+ Inh_VisitSteps ->+ Syn_VisitSteps +wrap_VisitSteps (T_VisitSteps sem ) (Inh_VisitSteps _lhsIallchildvisit _lhsIavisitdefs _lhsIavisituses _lhsIchildintros _lhsImrules _lhsIruledefs _lhsIruleuses ) =+ (let ( _lhsOdefs,_lhsOsem_steps,_lhsOusedrules,_lhsOuses) = sem _lhsIallchildvisit _lhsIavisitdefs _lhsIavisituses _lhsIchildintros _lhsImrules _lhsIruledefs _lhsIruleuses + in (Syn_VisitSteps _lhsOdefs _lhsOsem_steps _lhsOusedrules _lhsOuses ))+sem_VisitSteps_Cons :: T_VisitStep ->+ T_VisitSteps ->+ T_VisitSteps +sem_VisitSteps_Cons (T_VisitStep hd_ ) (T_VisitSteps tl_ ) =+ (T_VisitSteps (\ _lhsIallchildvisit+ _lhsIavisitdefs+ _lhsIavisituses+ _lhsIchildintros+ _lhsImrules+ _lhsIruledefs+ _lhsIruleuses ->+ (let _lhsOdefs :: (Set.Set String)+ _lhsOsem_steps :: PP_Doc+ _lhsOusedrules :: (Set.Set Identifier)+ _lhsOuses :: (Set.Set String)+ _hdOallchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))+ _hdOavisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _hdOavisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _hdOchildintros :: (Map.Map Identifier PP_Doc)+ _hdOmrules :: (Map.Map Identifier PP_Doc)+ _hdOruledefs :: (Map.Map Identifier (Set.Set String))+ _hdOruleuses :: (Map.Map Identifier (Set.Set String))+ _tlOallchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))+ _tlOavisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _tlOavisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _tlOchildintros :: (Map.Map Identifier PP_Doc)+ _tlOmrules :: (Map.Map Identifier PP_Doc)+ _tlOruledefs :: (Map.Map Identifier (Set.Set String))+ _tlOruleuses :: (Map.Map Identifier (Set.Set String))+ _hdIdefs :: (Set.Set String)+ _hdIsem_steps :: PP_Doc+ _hdIusedrules :: (Set.Set Identifier)+ _hdIuses :: (Set.Set String)+ _tlIdefs :: (Set.Set String)+ _tlIsem_steps :: PP_Doc+ _tlIusedrules :: (Set.Set Identifier)+ _tlIuses :: (Set.Set String)+ -- use rule "ExecutionPlan2Hs.ag"(line 453, column 38)+ _lhsOdefs =+ ({-# LINE 453 "ExecutionPlan2Hs.ag" #-}+ _hdIdefs `Set.union` _tlIdefs+ {-# LINE 3182 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 304, column 43)+ _lhsOsem_steps =+ ({-# LINE 304 "ExecutionPlan2Hs.ag" #-}+ _hdIsem_steps >-< _tlIsem_steps+ {-# LINE 3188 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 175, column 56)+ _lhsOusedrules =+ ({-# LINE 175 "ExecutionPlan2Hs.ag" #-}+ _hdIusedrules `Set.union` _tlIusedrules+ {-# LINE 3194 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 454, column 38)+ _lhsOuses =+ ({-# LINE 454 "ExecutionPlan2Hs.ag" #-}+ _hdIuses `Set.union` _tlIuses+ {-# LINE 3200 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOallchildvisit =+ ({-# LINE 381 "ExecutionPlan2Hs.ag" #-}+ _lhsIallchildvisit+ {-# LINE 3206 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOavisitdefs =+ ({-# LINE 446 "ExecutionPlan2Hs.ag" #-}+ _lhsIavisitdefs+ {-# LINE 3212 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOavisituses =+ ({-# LINE 447 "ExecutionPlan2Hs.ag" #-}+ _lhsIavisituses+ {-# LINE 3218 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOchildintros =+ ({-# LINE 321 "ExecutionPlan2Hs.ag" #-}+ _lhsIchildintros+ {-# LINE 3224 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOmrules =+ ({-# LINE 303 "ExecutionPlan2Hs.ag" #-}+ _lhsImrules+ {-# LINE 3230 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOruledefs =+ ({-# LINE 421 "ExecutionPlan2Hs.ag" #-}+ _lhsIruledefs+ {-# LINE 3236 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOruleuses =+ ({-# LINE 422 "ExecutionPlan2Hs.ag" #-}+ _lhsIruleuses+ {-# LINE 3242 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOallchildvisit =+ ({-# LINE 381 "ExecutionPlan2Hs.ag" #-}+ _lhsIallchildvisit+ {-# LINE 3248 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOavisitdefs =+ ({-# LINE 446 "ExecutionPlan2Hs.ag" #-}+ _lhsIavisitdefs+ {-# LINE 3254 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOavisituses =+ ({-# LINE 447 "ExecutionPlan2Hs.ag" #-}+ _lhsIavisituses+ {-# LINE 3260 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOchildintros =+ ({-# LINE 321 "ExecutionPlan2Hs.ag" #-}+ _lhsIchildintros+ {-# LINE 3266 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOmrules =+ ({-# LINE 303 "ExecutionPlan2Hs.ag" #-}+ _lhsImrules+ {-# LINE 3272 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOruledefs =+ ({-# LINE 421 "ExecutionPlan2Hs.ag" #-}+ _lhsIruledefs+ {-# LINE 3278 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOruleuses =+ ({-# LINE 422 "ExecutionPlan2Hs.ag" #-}+ _lhsIruleuses+ {-# LINE 3284 "ExecutionPlan2Hs.hs" #-}+ )+ ( _hdIdefs,_hdIsem_steps,_hdIusedrules,_hdIuses) =+ hd_ _hdOallchildvisit _hdOavisitdefs _hdOavisituses _hdOchildintros _hdOmrules _hdOruledefs _hdOruleuses + ( _tlIdefs,_tlIsem_steps,_tlIusedrules,_tlIuses) =+ tl_ _tlOallchildvisit _tlOavisitdefs _tlOavisituses _tlOchildintros _tlOmrules _tlOruledefs _tlOruleuses + in ( _lhsOdefs,_lhsOsem_steps,_lhsOusedrules,_lhsOuses))) )+sem_VisitSteps_Nil :: T_VisitSteps +sem_VisitSteps_Nil =+ (T_VisitSteps (\ _lhsIallchildvisit+ _lhsIavisitdefs+ _lhsIavisituses+ _lhsIchildintros+ _lhsImrules+ _lhsIruledefs+ _lhsIruleuses ->+ (let _lhsOdefs :: (Set.Set String)+ _lhsOsem_steps :: PP_Doc+ _lhsOusedrules :: (Set.Set Identifier)+ _lhsOuses :: (Set.Set String)+ -- use rule "ExecutionPlan2Hs.ag"(line 453, column 38)+ _lhsOdefs =+ ({-# LINE 453 "ExecutionPlan2Hs.ag" #-}+ Set.empty+ {-# LINE 3308 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 304, column 43)+ _lhsOsem_steps =+ ({-# LINE 304 "ExecutionPlan2Hs.ag" #-}+ empty+ {-# LINE 3314 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 175, column 56)+ _lhsOusedrules =+ ({-# LINE 175 "ExecutionPlan2Hs.ag" #-}+ Set.empty+ {-# LINE 3320 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 454, column 38)+ _lhsOuses =+ ({-# LINE 454 "ExecutionPlan2Hs.ag" #-}+ Set.empty+ {-# LINE 3326 "ExecutionPlan2Hs.hs" #-}+ )+ in ( _lhsOdefs,_lhsOsem_steps,_lhsOusedrules,_lhsOuses))) )+-- Visits ------------------------------------------------------+{-+ visit 0:+ inherited attributes:+ allchildvisit : Map.Map VisitIdentifier (Identifier -> PP_Doc)+ allintramap : Map.Map StateIdentifier (Set.Set String)+ avisitdefs : Map.Map VisitIdentifier (Set.Set Identifier)+ avisituses : Map.Map VisitIdentifier (Set.Set Identifier)+ childintros : Map.Map Identifier PP_Doc+ inhmap : Attributes+ mrules : Map.Map Identifier PP_Doc+ nt : NontermIdent+ ruledefs : Map.Map Identifier (Set.Set String)+ ruleuses : Map.Map Identifier (Set.Set String)+ synmap : Attributes+ terminaldefs : Set.Set String+ synthesized attributes:+ allvisits : [(VisitIdentifier,StateIdentifier, StateIdentifier)]+ childvisit : Map.Map VisitIdentifier (Identifier -> PP_Doc)+ intramap : Map.Map StateIdentifier (Set.Set String)+ sem_visit : [(StateIdentifier,PP_Doc)] + t_visits : PP_Doc+ usedrules : Set.Set Identifier+ visitdefs : Map.Map VisitIdentifier (Set.Set Identifier)+ visituses : Map.Map VisitIdentifier (Set.Set Identifier)+ alternatives:+ alternative Cons:+ child hd : Visit + child tl : Visits + alternative Nil:+-}+-- cata+sem_Visits :: Visits ->+ T_Visits +sem_Visits list =+ (Prelude.foldr sem_Visits_Cons sem_Visits_Nil (Prelude.map sem_Visit list) )+-- semantic domain+newtype T_Visits = T_Visits ((Map.Map VisitIdentifier (Identifier -> PP_Doc)) ->+ (Map.Map StateIdentifier (Set.Set String)) ->+ (Map.Map VisitIdentifier (Set.Set Identifier)) ->+ (Map.Map VisitIdentifier (Set.Set Identifier)) ->+ (Map.Map Identifier PP_Doc) ->+ Attributes ->+ (Map.Map Identifier PP_Doc) ->+ NontermIdent ->+ (Map.Map Identifier (Set.Set String)) ->+ (Map.Map Identifier (Set.Set String)) ->+ Attributes ->+ (Set.Set String) ->+ ( ([(VisitIdentifier,StateIdentifier, StateIdentifier)]),(Map.Map VisitIdentifier (Identifier -> PP_Doc)),(Map.Map StateIdentifier (Set.Set String)),( [(StateIdentifier,PP_Doc)] ),PP_Doc,(Set.Set Identifier),(Map.Map VisitIdentifier (Set.Set Identifier)),(Map.Map VisitIdentifier (Set.Set Identifier))))+data Inh_Visits = Inh_Visits {allchildvisit_Inh_Visits :: (Map.Map VisitIdentifier (Identifier -> PP_Doc)),allintramap_Inh_Visits :: (Map.Map StateIdentifier (Set.Set String)),avisitdefs_Inh_Visits :: (Map.Map VisitIdentifier (Set.Set Identifier)),avisituses_Inh_Visits :: (Map.Map VisitIdentifier (Set.Set Identifier)),childintros_Inh_Visits :: (Map.Map Identifier PP_Doc),inhmap_Inh_Visits :: Attributes,mrules_Inh_Visits :: (Map.Map Identifier PP_Doc),nt_Inh_Visits :: NontermIdent,ruledefs_Inh_Visits :: (Map.Map Identifier (Set.Set String)),ruleuses_Inh_Visits :: (Map.Map Identifier (Set.Set String)),synmap_Inh_Visits :: Attributes,terminaldefs_Inh_Visits :: (Set.Set String)}+data Syn_Visits = Syn_Visits {allvisits_Syn_Visits :: ([(VisitIdentifier,StateIdentifier, StateIdentifier)]),childvisit_Syn_Visits :: (Map.Map VisitIdentifier (Identifier -> PP_Doc)),intramap_Syn_Visits :: (Map.Map StateIdentifier (Set.Set String)),sem_visit_Syn_Visits :: ( [(StateIdentifier,PP_Doc)] ),t_visits_Syn_Visits :: PP_Doc,usedrules_Syn_Visits :: (Set.Set Identifier),visitdefs_Syn_Visits :: (Map.Map VisitIdentifier (Set.Set Identifier)),visituses_Syn_Visits :: (Map.Map VisitIdentifier (Set.Set Identifier))}+wrap_Visits :: T_Visits ->+ Inh_Visits ->+ Syn_Visits +wrap_Visits (T_Visits sem ) (Inh_Visits _lhsIallchildvisit _lhsIallintramap _lhsIavisitdefs _lhsIavisituses _lhsIchildintros _lhsIinhmap _lhsImrules _lhsInt _lhsIruledefs _lhsIruleuses _lhsIsynmap _lhsIterminaldefs ) =+ (let ( _lhsOallvisits,_lhsOchildvisit,_lhsOintramap,_lhsOsem_visit,_lhsOt_visits,_lhsOusedrules,_lhsOvisitdefs,_lhsOvisituses) = sem _lhsIallchildvisit _lhsIallintramap _lhsIavisitdefs _lhsIavisituses _lhsIchildintros _lhsIinhmap _lhsImrules _lhsInt _lhsIruledefs _lhsIruleuses _lhsIsynmap _lhsIterminaldefs + in (Syn_Visits _lhsOallvisits _lhsOchildvisit _lhsOintramap _lhsOsem_visit _lhsOt_visits _lhsOusedrules _lhsOvisitdefs _lhsOvisituses ))+sem_Visits_Cons :: T_Visit ->+ T_Visits ->+ T_Visits +sem_Visits_Cons (T_Visit hd_ ) (T_Visits tl_ ) =+ (T_Visits (\ _lhsIallchildvisit+ _lhsIallintramap+ _lhsIavisitdefs+ _lhsIavisituses+ _lhsIchildintros+ _lhsIinhmap+ _lhsImrules+ _lhsInt+ _lhsIruledefs+ _lhsIruleuses+ _lhsIsynmap+ _lhsIterminaldefs ->+ (let _lhsOallvisits :: ([(VisitIdentifier,StateIdentifier, StateIdentifier)])+ _lhsOchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))+ _lhsOintramap :: (Map.Map StateIdentifier (Set.Set String))+ _lhsOsem_visit :: ( [(StateIdentifier,PP_Doc)] )+ _lhsOt_visits :: PP_Doc+ _lhsOusedrules :: (Set.Set Identifier)+ _lhsOvisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _lhsOvisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _hdOallchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))+ _hdOallintramap :: (Map.Map StateIdentifier (Set.Set String))+ _hdOavisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _hdOavisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _hdOchildintros :: (Map.Map Identifier PP_Doc)+ _hdOinhmap :: Attributes+ _hdOmrules :: (Map.Map Identifier PP_Doc)+ _hdOnt :: NontermIdent+ _hdOruledefs :: (Map.Map Identifier (Set.Set String))+ _hdOruleuses :: (Map.Map Identifier (Set.Set String))+ _hdOsynmap :: Attributes+ _hdOterminaldefs :: (Set.Set String)+ _tlOallchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))+ _tlOallintramap :: (Map.Map StateIdentifier (Set.Set String))+ _tlOavisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _tlOavisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _tlOchildintros :: (Map.Map Identifier PP_Doc)+ _tlOinhmap :: Attributes+ _tlOmrules :: (Map.Map Identifier PP_Doc)+ _tlOnt :: NontermIdent+ _tlOruledefs :: (Map.Map Identifier (Set.Set String))+ _tlOruleuses :: (Map.Map Identifier (Set.Set String))+ _tlOsynmap :: Attributes+ _tlOterminaldefs :: (Set.Set String)+ _hdIallvisits :: ((VisitIdentifier,StateIdentifier, StateIdentifier))+ _hdIchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))+ _hdIintramap :: (Map.Map StateIdentifier (Set.Set String))+ _hdIsem_visit :: ( (StateIdentifier,PP_Doc) )+ _hdIt_visits :: PP_Doc+ _hdIusedrules :: (Set.Set Identifier)+ _hdIvisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _hdIvisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _tlIallvisits :: ([(VisitIdentifier,StateIdentifier, StateIdentifier)])+ _tlIchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))+ _tlIintramap :: (Map.Map StateIdentifier (Set.Set String))+ _tlIsem_visit :: ( [(StateIdentifier,PP_Doc)] )+ _tlIt_visits :: PP_Doc+ _tlIusedrules :: (Set.Set Identifier)+ _tlIvisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _tlIvisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))+ -- use rule "ExecutionPlan2Hs.ag"(line 137, column 29)+ _lhsOallvisits =+ ({-# LINE 137 "ExecutionPlan2Hs.ag" #-}+ _hdIallvisits : _tlIallvisits+ {-# LINE 3455 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 379, column 36)+ _lhsOchildvisit =+ ({-# LINE 379 "ExecutionPlan2Hs.ag" #-}+ _hdIchildvisit `Map.union` _tlIchildvisit+ {-# LINE 3461 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 398, column 30)+ _lhsOintramap =+ ({-# LINE 398 "ExecutionPlan2Hs.ag" #-}+ _hdIintramap `uwSetUnion` _tlIintramap+ {-# LINE 3467 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 289, column 29)+ _lhsOsem_visit =+ ({-# LINE 289 "ExecutionPlan2Hs.ag" #-}+ _hdIsem_visit : _tlIsem_visit+ {-# LINE 3473 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 188, column 54)+ _lhsOt_visits =+ ({-# LINE 188 "ExecutionPlan2Hs.ag" #-}+ _hdIt_visits >-< _tlIt_visits+ {-# LINE 3479 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 175, column 56)+ _lhsOusedrules =+ ({-# LINE 175 "ExecutionPlan2Hs.ag" #-}+ _hdIusedrules `Set.union` _tlIusedrules+ {-# LINE 3485 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 436, column 36)+ _lhsOvisitdefs =+ ({-# LINE 436 "ExecutionPlan2Hs.ag" #-}+ _hdIvisitdefs `uwSetUnion` _tlIvisitdefs+ {-# LINE 3491 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 437, column 36)+ _lhsOvisituses =+ ({-# LINE 437 "ExecutionPlan2Hs.ag" #-}+ _hdIvisituses `uwSetUnion` _tlIvisituses+ {-# LINE 3497 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOallchildvisit =+ ({-# LINE 378 "ExecutionPlan2Hs.ag" #-}+ _lhsIallchildvisit+ {-# LINE 3503 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOallintramap =+ ({-# LINE 397 "ExecutionPlan2Hs.ag" #-}+ _lhsIallintramap+ {-# LINE 3509 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOavisitdefs =+ ({-# LINE 446 "ExecutionPlan2Hs.ag" #-}+ _lhsIavisitdefs+ {-# LINE 3515 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOavisituses =+ ({-# LINE 447 "ExecutionPlan2Hs.ag" #-}+ _lhsIavisituses+ {-# LINE 3521 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOchildintros =+ ({-# LINE 321 "ExecutionPlan2Hs.ag" #-}+ _lhsIchildintros+ {-# LINE 3527 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOinhmap =+ ({-# LINE 128 "ExecutionPlan2Hs.ag" #-}+ _lhsIinhmap+ {-# LINE 3533 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOmrules =+ ({-# LINE 303 "ExecutionPlan2Hs.ag" #-}+ _lhsImrules+ {-# LINE 3539 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOnt =+ ({-# LINE 188 "ExecutionPlan2Hs.ag" #-}+ _lhsInt+ {-# LINE 3545 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOruledefs =+ ({-# LINE 421 "ExecutionPlan2Hs.ag" #-}+ _lhsIruledefs+ {-# LINE 3551 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOruleuses =+ ({-# LINE 422 "ExecutionPlan2Hs.ag" #-}+ _lhsIruleuses+ {-# LINE 3557 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOsynmap =+ ({-# LINE 129 "ExecutionPlan2Hs.ag" #-}+ _lhsIsynmap+ {-# LINE 3563 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _hdOterminaldefs =+ ({-# LINE 400 "ExecutionPlan2Hs.ag" #-}+ _lhsIterminaldefs+ {-# LINE 3569 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOallchildvisit =+ ({-# LINE 378 "ExecutionPlan2Hs.ag" #-}+ _lhsIallchildvisit+ {-# LINE 3575 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOallintramap =+ ({-# LINE 397 "ExecutionPlan2Hs.ag" #-}+ _lhsIallintramap+ {-# LINE 3581 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOavisitdefs =+ ({-# LINE 446 "ExecutionPlan2Hs.ag" #-}+ _lhsIavisitdefs+ {-# LINE 3587 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOavisituses =+ ({-# LINE 447 "ExecutionPlan2Hs.ag" #-}+ _lhsIavisituses+ {-# LINE 3593 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOchildintros =+ ({-# LINE 321 "ExecutionPlan2Hs.ag" #-}+ _lhsIchildintros+ {-# LINE 3599 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOinhmap =+ ({-# LINE 128 "ExecutionPlan2Hs.ag" #-}+ _lhsIinhmap+ {-# LINE 3605 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOmrules =+ ({-# LINE 303 "ExecutionPlan2Hs.ag" #-}+ _lhsImrules+ {-# LINE 3611 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOnt =+ ({-# LINE 188 "ExecutionPlan2Hs.ag" #-}+ _lhsInt+ {-# LINE 3617 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOruledefs =+ ({-# LINE 421 "ExecutionPlan2Hs.ag" #-}+ _lhsIruledefs+ {-# LINE 3623 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOruleuses =+ ({-# LINE 422 "ExecutionPlan2Hs.ag" #-}+ _lhsIruleuses+ {-# LINE 3629 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOsynmap =+ ({-# LINE 129 "ExecutionPlan2Hs.ag" #-}+ _lhsIsynmap+ {-# LINE 3635 "ExecutionPlan2Hs.hs" #-}+ )+ -- copy rule (down)+ _tlOterminaldefs =+ ({-# LINE 400 "ExecutionPlan2Hs.ag" #-}+ _lhsIterminaldefs+ {-# LINE 3641 "ExecutionPlan2Hs.hs" #-}+ )+ ( _hdIallvisits,_hdIchildvisit,_hdIintramap,_hdIsem_visit,_hdIt_visits,_hdIusedrules,_hdIvisitdefs,_hdIvisituses) =+ hd_ _hdOallchildvisit _hdOallintramap _hdOavisitdefs _hdOavisituses _hdOchildintros _hdOinhmap _hdOmrules _hdOnt _hdOruledefs _hdOruleuses _hdOsynmap _hdOterminaldefs + ( _tlIallvisits,_tlIchildvisit,_tlIintramap,_tlIsem_visit,_tlIt_visits,_tlIusedrules,_tlIvisitdefs,_tlIvisituses) =+ tl_ _tlOallchildvisit _tlOallintramap _tlOavisitdefs _tlOavisituses _tlOchildintros _tlOinhmap _tlOmrules _tlOnt _tlOruledefs _tlOruleuses _tlOsynmap _tlOterminaldefs + in ( _lhsOallvisits,_lhsOchildvisit,_lhsOintramap,_lhsOsem_visit,_lhsOt_visits,_lhsOusedrules,_lhsOvisitdefs,_lhsOvisituses))) )+sem_Visits_Nil :: T_Visits +sem_Visits_Nil =+ (T_Visits (\ _lhsIallchildvisit+ _lhsIallintramap+ _lhsIavisitdefs+ _lhsIavisituses+ _lhsIchildintros+ _lhsIinhmap+ _lhsImrules+ _lhsInt+ _lhsIruledefs+ _lhsIruleuses+ _lhsIsynmap+ _lhsIterminaldefs ->+ (let _lhsOallvisits :: ([(VisitIdentifier,StateIdentifier, StateIdentifier)])+ _lhsOchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))+ _lhsOintramap :: (Map.Map StateIdentifier (Set.Set String))+ _lhsOsem_visit :: ( [(StateIdentifier,PP_Doc)] )+ _lhsOt_visits :: PP_Doc+ _lhsOusedrules :: (Set.Set Identifier)+ _lhsOvisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))+ _lhsOvisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))+ -- use rule "ExecutionPlan2Hs.ag"(line 137, column 29)+ _lhsOallvisits =+ ({-# LINE 137 "ExecutionPlan2Hs.ag" #-}+ []+ {-# LINE 3674 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 379, column 36)+ _lhsOchildvisit =+ ({-# LINE 379 "ExecutionPlan2Hs.ag" #-}+ Map.empty+ {-# LINE 3680 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 398, column 30)+ _lhsOintramap =+ ({-# LINE 398 "ExecutionPlan2Hs.ag" #-}+ Map.empty+ {-# LINE 3686 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 289, column 29)+ _lhsOsem_visit =+ ({-# LINE 289 "ExecutionPlan2Hs.ag" #-}+ []+ {-# LINE 3692 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 188, column 54)+ _lhsOt_visits =+ ({-# LINE 188 "ExecutionPlan2Hs.ag" #-}+ empty+ {-# LINE 3698 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 175, column 56)+ _lhsOusedrules =+ ({-# LINE 175 "ExecutionPlan2Hs.ag" #-}+ Set.empty+ {-# LINE 3704 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 436, column 36)+ _lhsOvisitdefs =+ ({-# LINE 436 "ExecutionPlan2Hs.ag" #-}+ Map.empty+ {-# LINE 3710 "ExecutionPlan2Hs.hs" #-}+ )+ -- use rule "ExecutionPlan2Hs.ag"(line 437, column 36)+ _lhsOvisituses =+ ({-# LINE 437 "ExecutionPlan2Hs.ag" #-}+ Map.empty+ {-# LINE 3716 "ExecutionPlan2Hs.hs" #-}+ )+ in ( _lhsOallvisits,_lhsOchildvisit,_lhsOintramap,_lhsOsem_visit,_lhsOt_visits,_lhsOusedrules,_lhsOvisitdefs,_lhsOvisituses))) )
src-derived/GenerateCode.hs view
@@ -1,6 +1,6 @@ --- UUAGC 0.9.38.1 (GenerateCode.ag)+-- UUAGC 0.9.38.2 (GenerateCode.ag) module GenerateCode where {-# LINE 9 "GenerateCode.ag" #-} @@ -1241,10 +1241,10 @@ arg = SimpleExpr "m" rarg = case tp of NT t _ -> let t' = maybe t id (deforestedNt t)- in App "Map.map" [SimpleExpr $ cataname _lhsIprefix t', arg]+ in App "Data.Map.map" [SimpleExpr $ cataname _lhsIprefix t', arg] _ -> arg lhs = Fun (cataname _lhsIprefix nt_) [arg]- rhs = App "Map.foldWithKey" [entry,nil,rarg]+ rhs = App "Data.Map.foldrWithKey" [entry,nil,rarg] in [Decl lhs rhs Set.empty Set.empty] CommonTypes.IntMap tp -> let entry = SimpleExpr (semname _lhsIprefix nt_ (identifier "Entry"))@@ -1252,10 +1252,10 @@ arg = SimpleExpr "m" rarg = case tp of NT t _ -> let t' = maybe t id (deforestedNt t)- in App "IntMap.map" [SimpleExpr $ cataname _lhsIprefix t', arg]+ in App "Data.IntMap.map" [SimpleExpr $ cataname _lhsIprefix t', arg] _ -> arg lhs = Fun (cataname _lhsIprefix nt_) [arg]- rhs = App "IntMap.foldWithKey" [entry,nil,rarg]+ rhs = App "Data.IntMap.foldWithKey" [entry,nil,rarg] in [Decl lhs rhs Set.empty Set.empty] CommonTypes.Tuple tps -> let con = semname _lhsIprefix nt_ (identifier "Tuple")
src-derived/HsToken.hs view
@@ -1,6 +1,6 @@ --- UUAGC 0.9.38.1 (HsToken.ag)+-- UUAGC 0.9.38.2 (HsToken.ag) module HsToken where {-# LINE 2 "HsToken.ag" #-} @@ -38,6 +38,7 @@ | Err (String) (Pos) | HsToken (String) (Pos) | StrToken (String) (Pos) + deriving ( Show) -- HsTokens ---------------------------------------------------- {- alternatives:
src-derived/KWOrder.hs view
@@ -1,6 +1,6 @@ --- UUAGC 0.9.38.1 (KWOrder.ag)+-- UUAGC 0.9.38.2 (KWOrder.ag) module KWOrder where {-# LINE 6 "KWOrder.ag" #-} @@ -13,10 +13,12 @@ import Pretty import Knuth1 import KennedyWarren-import Maybe+import ExecutionPlan+import Data.Maybe+import Debug.Trace import qualified Data.Set as Set import qualified Data.Map as Map-{-# LINE 20 "../src-derived/KWOrder.hs" #-}+{-# LINE 22 "../src-derived/KWOrder.hs" #-} {-# LINE 2 "./AbstractSyntax.ag" #-} @@ -26,30 +28,31 @@ import Patterns (Pattern(..),Patterns) import Expression (Expression(..)) import CommonTypes-{-# LINE 30 "../src-derived/KWOrder.hs" #-}+{-# LINE 32 "../src-derived/KWOrder.hs" #-} {-# LINE 2 "./HsToken.ag" #-} import CommonTypes import UU.Scanner.Position(Pos)-{-# LINE 36 "../src-derived/KWOrder.hs" #-}+{-# LINE 38 "../src-derived/KWOrder.hs" #-} {-# LINE 2 "./Expression.ag" #-} import UU.Scanner.Position(Pos) import HsToken-{-# LINE 42 "../src-derived/KWOrder.hs" #-}+{-# LINE 44 "../src-derived/KWOrder.hs" #-} {-# LINE 2 "./Patterns.ag" #-} -- Patterns.ag imports import UU.Scanner.Position(Pos) import CommonTypes (ConstructorIdent,Identifier)-{-# LINE 49 "../src-derived/KWOrder.hs" #-}+{-# LINE 51 "../src-derived/KWOrder.hs" #-} -- Child ------------------------------------------------------- {- visit 0: synthesized attributes:+ echilds : EChild edges : Set.Set Edge nontnames : [(Identifier, Identifier)] vertices : Set.Set Vertex@@ -73,15 +76,15 @@ sem_Child (Child _name _tp _inh _syn _virtual ) = (sem_Child_Child _name _tp _inh _syn _virtual ) -- semantic domain-newtype T_Child = T_Child (( (Set.Set Edge),([(Identifier, Identifier)]),(Set.Set Vertex)))+newtype T_Child = T_Child (( EChild,(Set.Set Edge),([(Identifier, Identifier)]),(Set.Set Vertex))) data Inh_Child = Inh_Child {}-data Syn_Child = Syn_Child {edges_Syn_Child :: (Set.Set Edge),nontnames_Syn_Child :: ([(Identifier, Identifier)]),vertices_Syn_Child :: (Set.Set Vertex)}+data Syn_Child = Syn_Child {echilds_Syn_Child :: EChild,edges_Syn_Child :: (Set.Set Edge),nontnames_Syn_Child :: ([(Identifier, Identifier)]),vertices_Syn_Child :: (Set.Set Vertex)} wrap_Child :: T_Child -> Inh_Child -> Syn_Child wrap_Child (T_Child sem ) (Inh_Child ) =- (let ( _lhsOedges,_lhsOnontnames,_lhsOvertices) = sem - in (Syn_Child _lhsOedges _lhsOnontnames _lhsOvertices ))+ (let ( _lhsOechilds,_lhsOedges,_lhsOnontnames,_lhsOvertices) = sem + in (Syn_Child _lhsOechilds _lhsOedges _lhsOnontnames _lhsOvertices )) sem_Child_Child :: Identifier -> Type -> Attributes ->@@ -89,66 +92,74 @@ (Maybe (Maybe Type)) -> T_Child sem_Child_Child name_ tp_ inh_ syn_ virtual_ =- (T_Child (let _lhsOvertices :: (Set.Set Vertex)+ (T_Child (let _lhsOechilds :: EChild+ _lhsOvertices :: (Set.Set Vertex) _lhsOedges :: (Set.Set Edge) _lhsOnontnames :: ([(Identifier, Identifier)])- -- "KWOrder.ag"(line 76, column 12)+ -- "KWOrder.ag"(line 67, column 11)+ _lhsOechilds =+ ({-# LINE 67 "KWOrder.ag" #-}+ EChild name_ tp_ virtual_+ {-# LINE 104 "KWOrder.hs" #-}+ )+ -- "KWOrder.ag"(line 100, column 12) _vertex =- ({-# LINE 76 "KWOrder.ag" #-}+ ({-# LINE 100 "KWOrder.ag" #-} VChild name_- {-# LINE 100 "KWOrder.hs" #-}+ {-# LINE 110 "KWOrder.hs" #-} )- -- "KWOrder.ag"(line 77, column 12)+ -- "KWOrder.ag"(line 101, column 12) _synvertices =- ({-# LINE 77 "KWOrder.ag" #-}+ ({-# LINE 101 "KWOrder.ag" #-} map (VAttr Syn name_) . Map.keys $ syn_- {-# LINE 106 "KWOrder.hs" #-}+ {-# LINE 116 "KWOrder.hs" #-} )- -- "KWOrder.ag"(line 78, column 12)+ -- "KWOrder.ag"(line 102, column 12) _inhvertices =- ({-# LINE 78 "KWOrder.ag" #-}+ ({-# LINE 102 "KWOrder.ag" #-} map (VAttr Inh name_) . Map.keys $ inh_- {-# LINE 112 "KWOrder.hs" #-}+ {-# LINE 122 "KWOrder.hs" #-} )- -- "KWOrder.ag"(line 79, column 12)+ -- "KWOrder.ag"(line 103, column 12) _lhsOvertices =- ({-# LINE 79 "KWOrder.ag" #-}+ ({-# LINE 103 "KWOrder.ag" #-} case tp_ of NT _ _ -> Set.insert _vertex (Set.fromList $ _synvertices ++ _inhvertices ) _ -> Set.empty- {-# LINE 120 "KWOrder.hs" #-}+ {-# LINE 130 "KWOrder.hs" #-} )- -- "KWOrder.ag"(line 104, column 12)+ -- "KWOrder.ag"(line 128, column 12) _edgesout =- ({-# LINE 104 "KWOrder.ag" #-}+ ({-# LINE 128 "KWOrder.ag" #-} []- {-# LINE 126 "KWOrder.hs" #-}+ {-# LINE 136 "KWOrder.hs" #-} )- -- "KWOrder.ag"(line 105, column 12)+ -- "KWOrder.ag"(line 129, column 12) _edgesin =- ({-# LINE 105 "KWOrder.ag" #-}+ ({-# LINE 129 "KWOrder.ag" #-} map (flip (,) _vertex ) _synvertices- {-# LINE 132 "KWOrder.hs" #-}+ {-# LINE 142 "KWOrder.hs" #-} )- -- "KWOrder.ag"(line 106, column 12)+ -- "KWOrder.ag"(line 130, column 12) _lhsOedges =- ({-# LINE 106 "KWOrder.ag" #-}+ ({-# LINE 130 "KWOrder.ag" #-} Set.fromList $ _edgesout ++ _edgesin- {-# LINE 138 "KWOrder.hs" #-}+ {-# LINE 148 "KWOrder.hs" #-} )- -- "KWOrder.ag"(line 116, column 12)+ -- "KWOrder.ag"(line 140, column 12) _lhsOnontnames =- ({-# LINE 116 "KWOrder.ag" #-}+ ({-# LINE 140 "KWOrder.ag" #-} case tp_ of NT nont _ -> [(name_, nont)] _ -> []- {-# LINE 146 "KWOrder.hs" #-}+ {-# LINE 156 "KWOrder.hs" #-} )- in ( _lhsOedges,_lhsOnontnames,_lhsOvertices)) )+ in ( _lhsOechilds,_lhsOedges,_lhsOnontnames,_lhsOvertices)) ) -- Children ---------------------------------------------------- {- visit 0: synthesized attributes:+ echilds : EChildren edges : Set.Set Edge nontnames : [(Identifier, Identifier)] vertices : Set.Set Vertex@@ -164,84 +175,103 @@ sem_Children list = (Prelude.foldr sem_Children_Cons sem_Children_Nil (Prelude.map sem_Child list) ) -- semantic domain-newtype T_Children = T_Children (( (Set.Set Edge),([(Identifier, Identifier)]),(Set.Set Vertex)))+newtype T_Children = T_Children (( EChildren,(Set.Set Edge),([(Identifier, Identifier)]),(Set.Set Vertex))) data Inh_Children = Inh_Children {}-data Syn_Children = Syn_Children {edges_Syn_Children :: (Set.Set Edge),nontnames_Syn_Children :: ([(Identifier, Identifier)]),vertices_Syn_Children :: (Set.Set Vertex)}+data Syn_Children = Syn_Children {echilds_Syn_Children :: EChildren,edges_Syn_Children :: (Set.Set Edge),nontnames_Syn_Children :: ([(Identifier, Identifier)]),vertices_Syn_Children :: (Set.Set Vertex)} wrap_Children :: T_Children -> Inh_Children -> Syn_Children wrap_Children (T_Children sem ) (Inh_Children ) =- (let ( _lhsOedges,_lhsOnontnames,_lhsOvertices) = sem - in (Syn_Children _lhsOedges _lhsOnontnames _lhsOvertices ))+ (let ( _lhsOechilds,_lhsOedges,_lhsOnontnames,_lhsOvertices) = sem + in (Syn_Children _lhsOechilds _lhsOedges _lhsOnontnames _lhsOvertices )) sem_Children_Cons :: T_Child -> T_Children -> T_Children sem_Children_Cons (T_Child hd_ ) (T_Children tl_ ) =- (T_Children (let _lhsOedges :: (Set.Set Edge)+ (T_Children (let _lhsOechilds :: EChildren+ _lhsOedges :: (Set.Set Edge) _lhsOnontnames :: ([(Identifier, Identifier)]) _lhsOvertices :: (Set.Set Vertex)+ _hdIechilds :: EChild _hdIedges :: (Set.Set Edge) _hdInontnames :: ([(Identifier, Identifier)]) _hdIvertices :: (Set.Set Vertex)+ _tlIechilds :: EChildren _tlIedges :: (Set.Set Edge) _tlInontnames :: ([(Identifier, Identifier)]) _tlIvertices :: (Set.Set Vertex)- -- use rule "KWOrder.ag"(line 94, column 33)+ -- use rule "KWOrder.ag"(line 64, column 29)+ _lhsOechilds =+ ({-# LINE 64 "KWOrder.ag" #-}+ _hdIechilds : _tlIechilds+ {-# LINE 208 "KWOrder.hs" #-}+ )+ -- use rule "KWOrder.ag"(line 118, column 33) _lhsOedges =- ({-# LINE 94 "KWOrder.ag" #-}+ ({-# LINE 118 "KWOrder.ag" #-} _hdIedges `Set.union` _tlIedges- {-# LINE 194 "KWOrder.hs" #-}+ {-# LINE 214 "KWOrder.hs" #-} )- -- use rule "KWOrder.ag"(line 113, column 37)+ -- use rule "KWOrder.ag"(line 137, column 37) _lhsOnontnames =- ({-# LINE 113 "KWOrder.ag" #-}+ ({-# LINE 137 "KWOrder.ag" #-} _hdInontnames ++ _tlInontnames- {-# LINE 200 "KWOrder.hs" #-}+ {-# LINE 220 "KWOrder.hs" #-} )- -- use rule "KWOrder.ag"(line 52, column 36)+ -- use rule "KWOrder.ag"(line 76, column 36) _lhsOvertices =- ({-# LINE 52 "KWOrder.ag" #-}+ ({-# LINE 76 "KWOrder.ag" #-} _hdIvertices `Set.union` _tlIvertices- {-# LINE 206 "KWOrder.hs" #-}+ {-# LINE 226 "KWOrder.hs" #-} )- ( _hdIedges,_hdInontnames,_hdIvertices) =+ ( _hdIechilds,_hdIedges,_hdInontnames,_hdIvertices) = hd_ - ( _tlIedges,_tlInontnames,_tlIvertices) =+ ( _tlIechilds,_tlIedges,_tlInontnames,_tlIvertices) = tl_ - in ( _lhsOedges,_lhsOnontnames,_lhsOvertices)) )+ in ( _lhsOechilds,_lhsOedges,_lhsOnontnames,_lhsOvertices)) ) sem_Children_Nil :: T_Children sem_Children_Nil =- (T_Children (let _lhsOedges :: (Set.Set Edge)+ (T_Children (let _lhsOechilds :: EChildren+ _lhsOedges :: (Set.Set Edge) _lhsOnontnames :: ([(Identifier, Identifier)]) _lhsOvertices :: (Set.Set Vertex)- -- use rule "KWOrder.ag"(line 94, column 33)+ -- use rule "KWOrder.ag"(line 64, column 29)+ _lhsOechilds =+ ({-# LINE 64 "KWOrder.ag" #-}+ []+ {-# LINE 243 "KWOrder.hs" #-}+ )+ -- use rule "KWOrder.ag"(line 118, column 33) _lhsOedges =- ({-# LINE 94 "KWOrder.ag" #-}+ ({-# LINE 118 "KWOrder.ag" #-} Set.empty- {-# LINE 222 "KWOrder.hs" #-}+ {-# LINE 249 "KWOrder.hs" #-} )- -- use rule "KWOrder.ag"(line 113, column 37)+ -- use rule "KWOrder.ag"(line 137, column 37) _lhsOnontnames =- ({-# LINE 113 "KWOrder.ag" #-}+ ({-# LINE 137 "KWOrder.ag" #-} []- {-# LINE 228 "KWOrder.hs" #-}+ {-# LINE 255 "KWOrder.hs" #-} )- -- use rule "KWOrder.ag"(line 52, column 36)+ -- use rule "KWOrder.ag"(line 76, column 36) _lhsOvertices =- ({-# LINE 52 "KWOrder.ag" #-}+ ({-# LINE 76 "KWOrder.ag" #-} Set.empty- {-# LINE 234 "KWOrder.hs" #-}+ {-# LINE 261 "KWOrder.hs" #-} )- in ( _lhsOedges,_lhsOnontnames,_lhsOvertices)) )+ in ( _lhsOechilds,_lhsOedges,_lhsOnontnames,_lhsOvertices)) ) -- Expression -------------------------------------------------- {- visit 0:- synthesized attribute:+ synthesized attributes:+ copy : SELF vertices : Set.Set Vertex alternatives: alternative Expression: child pos : {Pos} child tks : {[HsToken]}+ visit 0:+ local copy : _ -} -- cata sem_Expression :: Expression ->@@ -249,35 +279,50 @@ sem_Expression (Expression _pos _tks ) = (sem_Expression_Expression _pos _tks ) -- semantic domain-newtype T_Expression = T_Expression (( (Set.Set Vertex)))+newtype T_Expression = T_Expression (( Expression ,(Set.Set Vertex))) data Inh_Expression = Inh_Expression {}-data Syn_Expression = Syn_Expression {vertices_Syn_Expression :: (Set.Set Vertex)}+data Syn_Expression = Syn_Expression {copy_Syn_Expression :: Expression ,vertices_Syn_Expression :: (Set.Set Vertex)} wrap_Expression :: T_Expression -> Inh_Expression -> Syn_Expression wrap_Expression (T_Expression sem ) (Inh_Expression ) =- (let ( _lhsOvertices) = sem - in (Syn_Expression _lhsOvertices ))+ (let ( _lhsOcopy,_lhsOvertices) = sem + in (Syn_Expression _lhsOcopy _lhsOvertices )) sem_Expression_Expression :: Pos -> ([HsToken]) -> T_Expression sem_Expression_Expression pos_ tks_ = (T_Expression (let _lhsOvertices :: (Set.Set Vertex)- -- "KWOrder.ag"(line 63, column 17)+ _lhsOcopy :: Expression + -- "KWOrder.ag"(line 87, column 17) _lhsOvertices =- ({-# LINE 63 "KWOrder.ag" #-}+ ({-# LINE 87 "KWOrder.ag" #-} Set.unions $ map (\tok -> vertices_Syn_HsToken (wrap_HsToken (sem_HsToken tok) Inh_HsToken)) tks_- {-# LINE 272 "KWOrder.hs" #-}+ {-# LINE 303 "KWOrder.hs" #-} )- in ( _lhsOvertices)) )+ -- self rule+ _copy =+ ({-# LINE 45 "KWOrder.ag" #-}+ Expression pos_ tks_+ {-# LINE 309 "KWOrder.hs" #-}+ )+ -- self rule+ _lhsOcopy =+ ({-# LINE 45 "KWOrder.ag" #-}+ _copy+ {-# LINE 315 "KWOrder.hs" #-}+ )+ in ( _lhsOcopy,_lhsOvertices)) ) -- Grammar ----------------------------------------------------- {- visit 0: inherited attribute: options : Options- synthesized attribute:- debugoutput : PP_Doc+ synthesized attributes:+ inhmap : Map.Map NontermIdent Attributes+ output : ExecutionPlan+ synmap : Map.Map NontermIdent Attributes alternatives: alternative Grammar: child typeSyns : {TypeSyns}@@ -302,15 +347,15 @@ (sem_Grammar_Grammar _typeSyns _useMap _derivings _wrappers (sem_Nonterminals _nonts ) _pragmas _manualAttrOrderMap _paramMap _contextMap _quantMap _uniqueMap _augmentsMap _aroundsMap _mergeMap ) -- semantic domain newtype T_Grammar = T_Grammar (Options ->- ( PP_Doc))+ ( (Map.Map NontermIdent Attributes),ExecutionPlan,(Map.Map NontermIdent Attributes))) data Inh_Grammar = Inh_Grammar {options_Inh_Grammar :: Options}-data Syn_Grammar = Syn_Grammar {debugoutput_Syn_Grammar :: PP_Doc}+data Syn_Grammar = Syn_Grammar {inhmap_Syn_Grammar :: (Map.Map NontermIdent Attributes),output_Syn_Grammar :: ExecutionPlan,synmap_Syn_Grammar :: (Map.Map NontermIdent Attributes)} wrap_Grammar :: T_Grammar -> Inh_Grammar -> Syn_Grammar wrap_Grammar (T_Grammar sem ) (Inh_Grammar _lhsIoptions ) =- (let ( _lhsOdebugoutput) = sem _lhsIoptions - in (Syn_Grammar _lhsOdebugoutput ))+ (let ( _lhsOinhmap,_lhsOoutput,_lhsOsynmap) = sem _lhsIoptions + in (Syn_Grammar _lhsOinhmap _lhsOoutput _lhsOsynmap )) sem_Grammar_Grammar :: TypeSyns -> UseMap -> Derivings ->@@ -329,24 +374,40 @@ sem_Grammar_Grammar typeSyns_ useMap_ derivings_ wrappers_ (T_Nonterminals nonts_ ) pragmas_ manualAttrOrderMap_ paramMap_ contextMap_ quantMap_ uniqueMap_ augmentsMap_ aroundsMap_ mergeMap_ = (T_Grammar (\ _lhsIoptions -> (let _nontsOrulenumber :: Int- _lhsOdebugoutput :: PP_Doc+ _lhsOoutput :: ExecutionPlan+ _lhsOinhmap :: (Map.Map NontermIdent Attributes)+ _lhsOsynmap :: (Map.Map NontermIdent Attributes) _nontsIdepinfo :: ([NontDependencyInformation])+ _nontsIinhmap :: (Map.Map NontermIdent Attributes) _nontsIrulenumber :: Int- -- "KWOrder.ag"(line 39, column 14)+ _nontsIsynmap :: (Map.Map NontermIdent Attributes)+ -- "KWOrder.ag"(line 36, column 14) _nontsOrulenumber =- ({-# LINE 39 "KWOrder.ag" #-}+ ({-# LINE 36 "KWOrder.ag" #-} 0- {-# LINE 340 "KWOrder.hs" #-}+ {-# LINE 389 "KWOrder.hs" #-} )- -- "KWOrder.ag"(line 160, column 14)- _lhsOdebugoutput =- ({-# LINE 160 "KWOrder.ag" #-}- kennedyWarrenIO _nontsIdepinfo- {-# LINE 346 "KWOrder.hs" #-}+ -- "KWOrder.ag"(line 189, column 15)+ (Just _lhsOoutput ) =+ ({-# LINE 189 "KWOrder.ag" #-}+ kennedyWarrenOrder wrappers_ _nontsIdepinfo typeSyns_+ {-# LINE 395 "KWOrder.hs" #-} )- ( _nontsIdepinfo,_nontsIrulenumber) =+ -- use rule "KWOrder.ag"(line 196, column 33)+ _lhsOinhmap =+ ({-# LINE 196 "KWOrder.ag" #-}+ _nontsIinhmap+ {-# LINE 401 "KWOrder.hs" #-}+ )+ -- use rule "KWOrder.ag"(line 197, column 33)+ _lhsOsynmap =+ ({-# LINE 197 "KWOrder.ag" #-}+ _nontsIsynmap+ {-# LINE 407 "KWOrder.hs" #-}+ )+ ( _nontsIdepinfo,_nontsIinhmap,_nontsIrulenumber,_nontsIsynmap) = nonts_ _nontsOrulenumber - in ( _lhsOdebugoutput))) )+ in ( _lhsOinhmap,_lhsOoutput,_lhsOsynmap))) ) -- HsToken ----------------------------------------------------- {- visit 0:@@ -407,13 +468,13 @@ T_HsToken sem_HsToken_AGField field_ attr_ pos_ rdesc_ = (T_HsToken (let _lhsOvertices :: (Set.Set Vertex)- -- "KWOrder.ag"(line 57, column 14)+ -- "KWOrder.ag"(line 81, column 14) _lhsOvertices =- ({-# LINE 57 "KWOrder.ag" #-}+ ({-# LINE 81 "KWOrder.ag" #-} Set.singleton $ VAttr (if field_ == _LHS then Inh else if field_ == _LOC then Loc else Syn) field_ attr_- {-# LINE 417 "KWOrder.hs" #-}+ {-# LINE 478 "KWOrder.hs" #-} ) in ( _lhsOvertices)) ) sem_HsToken_AGLocal :: Identifier ->@@ -422,11 +483,11 @@ T_HsToken sem_HsToken_AGLocal var_ pos_ rdesc_ = (T_HsToken (let _lhsOvertices :: (Set.Set Vertex)- -- "KWOrder.ag"(line 56, column 14)+ -- "KWOrder.ag"(line 80, column 14) _lhsOvertices =- ({-# LINE 56 "KWOrder.ag" #-}+ ({-# LINE 80 "KWOrder.ag" #-} Set.singleton $ VAttr Loc _LOC var_- {-# LINE 430 "KWOrder.hs" #-}+ {-# LINE 491 "KWOrder.hs" #-} ) in ( _lhsOvertices)) ) sem_HsToken_CharToken :: String ->@@ -434,11 +495,11 @@ T_HsToken sem_HsToken_CharToken value_ pos_ = (T_HsToken (let _lhsOvertices :: (Set.Set Vertex)- -- use rule "KWOrder.ag"(line 52, column 36)+ -- use rule "KWOrder.ag"(line 76, column 36) _lhsOvertices =- ({-# LINE 52 "KWOrder.ag" #-}+ ({-# LINE 76 "KWOrder.ag" #-} Set.empty- {-# LINE 442 "KWOrder.hs" #-}+ {-# LINE 503 "KWOrder.hs" #-} ) in ( _lhsOvertices)) ) sem_HsToken_Err :: String ->@@ -446,11 +507,11 @@ T_HsToken sem_HsToken_Err mesg_ pos_ = (T_HsToken (let _lhsOvertices :: (Set.Set Vertex)- -- use rule "KWOrder.ag"(line 52, column 36)+ -- use rule "KWOrder.ag"(line 76, column 36) _lhsOvertices =- ({-# LINE 52 "KWOrder.ag" #-}+ ({-# LINE 76 "KWOrder.ag" #-} Set.empty- {-# LINE 454 "KWOrder.hs" #-}+ {-# LINE 515 "KWOrder.hs" #-} ) in ( _lhsOvertices)) ) sem_HsToken_HsToken :: String ->@@ -458,11 +519,11 @@ T_HsToken sem_HsToken_HsToken value_ pos_ = (T_HsToken (let _lhsOvertices :: (Set.Set Vertex)- -- use rule "KWOrder.ag"(line 52, column 36)+ -- use rule "KWOrder.ag"(line 76, column 36) _lhsOvertices =- ({-# LINE 52 "KWOrder.ag" #-}+ ({-# LINE 76 "KWOrder.ag" #-} Set.empty- {-# LINE 466 "KWOrder.hs" #-}+ {-# LINE 527 "KWOrder.hs" #-} ) in ( _lhsOvertices)) ) sem_HsToken_StrToken :: String ->@@ -470,11 +531,11 @@ T_HsToken sem_HsToken_StrToken value_ pos_ = (T_HsToken (let _lhsOvertices :: (Set.Set Vertex)- -- use rule "KWOrder.ag"(line 52, column 36)+ -- use rule "KWOrder.ag"(line 76, column 36) _lhsOvertices =- ({-# LINE 52 "KWOrder.ag" #-}+ ({-# LINE 76 "KWOrder.ag" #-} Set.empty- {-# LINE 478 "KWOrder.hs" #-}+ {-# LINE 539 "KWOrder.hs" #-} ) in ( _lhsOvertices)) ) -- HsTokens ----------------------------------------------------@@ -543,8 +604,10 @@ visit 0: chained attribute: rulenumber : Int- synthesized attribute:+ synthesized attributes: depinfo : NontDependencyInformation+ inhmap : Map.Map NontermIdent Attributes+ synmap : Map.Map NontermIdent Attributes alternatives: alternative Nonterminal: child nt : {NontermIdent}@@ -565,15 +628,15 @@ (sem_Nonterminal_Nonterminal _nt _params _inh _syn (sem_Productions _prods ) ) -- semantic domain newtype T_Nonterminal = T_Nonterminal (Int ->- ( NontDependencyInformation,Int))+ ( NontDependencyInformation,(Map.Map NontermIdent Attributes),Int,(Map.Map NontermIdent Attributes))) data Inh_Nonterminal = Inh_Nonterminal {rulenumber_Inh_Nonterminal :: Int}-data Syn_Nonterminal = Syn_Nonterminal {depinfo_Syn_Nonterminal :: NontDependencyInformation,rulenumber_Syn_Nonterminal :: Int}+data Syn_Nonterminal = Syn_Nonterminal {depinfo_Syn_Nonterminal :: NontDependencyInformation,inhmap_Syn_Nonterminal :: (Map.Map NontermIdent Attributes),rulenumber_Syn_Nonterminal :: Int,synmap_Syn_Nonterminal :: (Map.Map NontermIdent Attributes)} wrap_Nonterminal :: T_Nonterminal -> Inh_Nonterminal -> Syn_Nonterminal wrap_Nonterminal (T_Nonterminal sem ) (Inh_Nonterminal _lhsIrulenumber ) =- (let ( _lhsOdepinfo,_lhsOrulenumber) = sem _lhsIrulenumber - in (Syn_Nonterminal _lhsOdepinfo _lhsOrulenumber ))+ (let ( _lhsOdepinfo,_lhsOinhmap,_lhsOrulenumber,_lhsOsynmap) = sem _lhsIrulenumber + in (Syn_Nonterminal _lhsOdepinfo _lhsOinhmap _lhsOrulenumber _lhsOsynmap )) sem_Nonterminal_Nonterminal :: NontermIdent -> ([Identifier]) -> Attributes ->@@ -583,67 +646,84 @@ sem_Nonterminal_Nonterminal nt_ params_ inh_ syn_ (T_Productions prods_ ) = (T_Nonterminal (\ _lhsIrulenumber -> (let _lhsOdepinfo :: NontDependencyInformation+ _lhsOinhmap :: (Map.Map NontermIdent Attributes)+ _lhsOsynmap :: (Map.Map NontermIdent Attributes) _lhsOrulenumber :: Int _prodsOrulenumber :: Int _prodsIdepgraph :: ([ProdDependencyGraph]) _prodsIrulenumber :: Int- -- "KWOrder.ag"(line 136, column 18)+ -- "KWOrder.ag"(line 162, column 18) _synvertices =- ({-# LINE 136 "KWOrder.ag" #-}+ ({-# LINE 162 "KWOrder.ag" #-} map (VAttr Syn nt_) . Map.keys $ syn_- {-# LINE 595 "KWOrder.hs" #-}+ {-# LINE 660 "KWOrder.hs" #-} )- -- "KWOrder.ag"(line 137, column 18)+ -- "KWOrder.ag"(line 163, column 18) _inhvertices =- ({-# LINE 137 "KWOrder.ag" #-}+ ({-# LINE 163 "KWOrder.ag" #-} map (VAttr Inh nt_) . Map.keys $ inh_- {-# LINE 601 "KWOrder.hs" #-}+ {-# LINE 666 "KWOrder.hs" #-} )- -- "KWOrder.ag"(line 138, column 18)+ -- "KWOrder.ag"(line 164, column 18) _vertices =- ({-# LINE 138 "KWOrder.ag" #-}+ ({-# LINE 164 "KWOrder.ag" #-} _synvertices ++ _inhvertices- {-# LINE 607 "KWOrder.hs" #-}+ {-# LINE 672 "KWOrder.hs" #-} )- -- "KWOrder.ag"(line 142, column 18)+ -- "KWOrder.ag"(line 168, column 18) _nontgraph =- ({-# LINE 142 "KWOrder.ag" #-}+ ({-# LINE 168 "KWOrder.ag" #-} NontDependencyGraph { ndgVertices = _vertices , ndgEdges = [] }- {-# LINE 614 "KWOrder.hs" #-}+ {-# LINE 679 "KWOrder.hs" #-} )- -- "KWOrder.ag"(line 150, column 18)+ -- "KWOrder.ag"(line 176, column 18) _lhsOdepinfo =- ({-# LINE 150 "KWOrder.ag" #-}+ ({-# LINE 176 "KWOrder.ag" #-} NontDependencyInformation { ndiNonterminal = nt_+ , ndiParams = params_ , ndiInh = Map.keys inh_ , ndiSyn = Map.keys syn_ , ndiDepGraph = _nontgraph , ndiProds = _prodsIdepgraph }- {-# LINE 624 "KWOrder.hs" #-}+ {-# LINE 690 "KWOrder.hs" #-} )+ -- "KWOrder.ag"(line 202, column 17)+ _lhsOinhmap =+ ({-# LINE 202 "KWOrder.ag" #-}+ Map.singleton nt_ inh_+ {-# LINE 696 "KWOrder.hs" #-}+ )+ -- "KWOrder.ag"(line 203, column 17)+ _lhsOsynmap =+ ({-# LINE 203 "KWOrder.ag" #-}+ Map.singleton nt_ syn_+ {-# LINE 702 "KWOrder.hs" #-}+ ) -- copy rule (up) _lhsOrulenumber =- ({-# LINE 36 "KWOrder.ag" #-}+ ({-# LINE 33 "KWOrder.ag" #-} _prodsIrulenumber- {-# LINE 630 "KWOrder.hs" #-}+ {-# LINE 708 "KWOrder.hs" #-} ) -- copy rule (down) _prodsOrulenumber =- ({-# LINE 36 "KWOrder.ag" #-}+ ({-# LINE 33 "KWOrder.ag" #-} _lhsIrulenumber- {-# LINE 636 "KWOrder.hs" #-}+ {-# LINE 714 "KWOrder.hs" #-} ) ( _prodsIdepgraph,_prodsIrulenumber) = prods_ _prodsOrulenumber - in ( _lhsOdepinfo,_lhsOrulenumber))) )+ in ( _lhsOdepinfo,_lhsOinhmap,_lhsOrulenumber,_lhsOsynmap))) ) -- Nonterminals ------------------------------------------------ {- visit 0: chained attribute: rulenumber : Int- synthesized attribute:+ synthesized attributes: depinfo : [NontDependencyInformation]+ inhmap : Map.Map NontermIdent Attributes+ synmap : Map.Map NontermIdent Attributes alternatives: alternative Cons: child hd : Nonterminal @@ -657,75 +737,107 @@ (Prelude.foldr sem_Nonterminals_Cons sem_Nonterminals_Nil (Prelude.map sem_Nonterminal list) ) -- semantic domain newtype T_Nonterminals = T_Nonterminals (Int ->- ( ([NontDependencyInformation]),Int))+ ( ([NontDependencyInformation]),(Map.Map NontermIdent Attributes),Int,(Map.Map NontermIdent Attributes))) data Inh_Nonterminals = Inh_Nonterminals {rulenumber_Inh_Nonterminals :: Int}-data Syn_Nonterminals = Syn_Nonterminals {depinfo_Syn_Nonterminals :: ([NontDependencyInformation]),rulenumber_Syn_Nonterminals :: Int}+data Syn_Nonterminals = Syn_Nonterminals {depinfo_Syn_Nonterminals :: ([NontDependencyInformation]),inhmap_Syn_Nonterminals :: (Map.Map NontermIdent Attributes),rulenumber_Syn_Nonterminals :: Int,synmap_Syn_Nonterminals :: (Map.Map NontermIdent Attributes)} wrap_Nonterminals :: T_Nonterminals -> Inh_Nonterminals -> Syn_Nonterminals wrap_Nonterminals (T_Nonterminals sem ) (Inh_Nonterminals _lhsIrulenumber ) =- (let ( _lhsOdepinfo,_lhsOrulenumber) = sem _lhsIrulenumber - in (Syn_Nonterminals _lhsOdepinfo _lhsOrulenumber ))+ (let ( _lhsOdepinfo,_lhsOinhmap,_lhsOrulenumber,_lhsOsynmap) = sem _lhsIrulenumber + in (Syn_Nonterminals _lhsOdepinfo _lhsOinhmap _lhsOrulenumber _lhsOsynmap )) sem_Nonterminals_Cons :: T_Nonterminal -> T_Nonterminals -> T_Nonterminals sem_Nonterminals_Cons (T_Nonterminal hd_ ) (T_Nonterminals tl_ ) = (T_Nonterminals (\ _lhsIrulenumber -> (let _lhsOdepinfo :: ([NontDependencyInformation])+ _lhsOinhmap :: (Map.Map NontermIdent Attributes)+ _lhsOsynmap :: (Map.Map NontermIdent Attributes) _lhsOrulenumber :: Int _hdOrulenumber :: Int _tlOrulenumber :: Int _hdIdepinfo :: NontDependencyInformation+ _hdIinhmap :: (Map.Map NontermIdent Attributes) _hdIrulenumber :: Int+ _hdIsynmap :: (Map.Map NontermIdent Attributes) _tlIdepinfo :: ([NontDependencyInformation])+ _tlIinhmap :: (Map.Map NontermIdent Attributes) _tlIrulenumber :: Int- -- use rule "KWOrder.ag"(line 147, column 33)+ _tlIsynmap :: (Map.Map NontermIdent Attributes)+ -- use rule "KWOrder.ag"(line 173, column 33) _lhsOdepinfo =- ({-# LINE 147 "KWOrder.ag" #-}+ ({-# LINE 173 "KWOrder.ag" #-} _hdIdepinfo : _tlIdepinfo- {-# LINE 687 "KWOrder.hs" #-}+ {-# LINE 773 "KWOrder.hs" #-} )+ -- use rule "KWOrder.ag"(line 196, column 33)+ _lhsOinhmap =+ ({-# LINE 196 "KWOrder.ag" #-}+ _hdIinhmap `Map.union` _tlIinhmap+ {-# LINE 779 "KWOrder.hs" #-}+ )+ -- use rule "KWOrder.ag"(line 197, column 33)+ _lhsOsynmap =+ ({-# LINE 197 "KWOrder.ag" #-}+ _hdIsynmap `Map.union` _tlIsynmap+ {-# LINE 785 "KWOrder.hs" #-}+ ) -- copy rule (up) _lhsOrulenumber =- ({-# LINE 36 "KWOrder.ag" #-}+ ({-# LINE 33 "KWOrder.ag" #-} _tlIrulenumber- {-# LINE 693 "KWOrder.hs" #-}+ {-# LINE 791 "KWOrder.hs" #-} ) -- copy rule (down) _hdOrulenumber =- ({-# LINE 36 "KWOrder.ag" #-}+ ({-# LINE 33 "KWOrder.ag" #-} _lhsIrulenumber- {-# LINE 699 "KWOrder.hs" #-}+ {-# LINE 797 "KWOrder.hs" #-} ) -- copy rule (chain) _tlOrulenumber =- ({-# LINE 36 "KWOrder.ag" #-}+ ({-# LINE 33 "KWOrder.ag" #-} _hdIrulenumber- {-# LINE 705 "KWOrder.hs" #-}+ {-# LINE 803 "KWOrder.hs" #-} )- ( _hdIdepinfo,_hdIrulenumber) =+ ( _hdIdepinfo,_hdIinhmap,_hdIrulenumber,_hdIsynmap) = hd_ _hdOrulenumber - ( _tlIdepinfo,_tlIrulenumber) =+ ( _tlIdepinfo,_tlIinhmap,_tlIrulenumber,_tlIsynmap) = tl_ _tlOrulenumber - in ( _lhsOdepinfo,_lhsOrulenumber))) )+ in ( _lhsOdepinfo,_lhsOinhmap,_lhsOrulenumber,_lhsOsynmap))) ) sem_Nonterminals_Nil :: T_Nonterminals sem_Nonterminals_Nil = (T_Nonterminals (\ _lhsIrulenumber -> (let _lhsOdepinfo :: ([NontDependencyInformation])+ _lhsOinhmap :: (Map.Map NontermIdent Attributes)+ _lhsOsynmap :: (Map.Map NontermIdent Attributes) _lhsOrulenumber :: Int- -- use rule "KWOrder.ag"(line 147, column 33)+ -- use rule "KWOrder.ag"(line 173, column 33) _lhsOdepinfo =- ({-# LINE 147 "KWOrder.ag" #-}+ ({-# LINE 173 "KWOrder.ag" #-} []- {-# LINE 721 "KWOrder.hs" #-}+ {-# LINE 821 "KWOrder.hs" #-} )+ -- use rule "KWOrder.ag"(line 196, column 33)+ _lhsOinhmap =+ ({-# LINE 196 "KWOrder.ag" #-}+ Map.empty+ {-# LINE 827 "KWOrder.hs" #-}+ )+ -- use rule "KWOrder.ag"(line 197, column 33)+ _lhsOsynmap =+ ({-# LINE 197 "KWOrder.ag" #-}+ Map.empty+ {-# LINE 833 "KWOrder.hs" #-}+ ) -- copy rule (chain) _lhsOrulenumber =- ({-# LINE 36 "KWOrder.ag" #-}+ ({-# LINE 33 "KWOrder.ag" #-} _lhsIrulenumber- {-# LINE 727 "KWOrder.hs" #-}+ {-# LINE 839 "KWOrder.hs" #-} )- in ( _lhsOdepinfo,_lhsOrulenumber))) )+ in ( _lhsOdepinfo,_lhsOinhmap,_lhsOrulenumber,_lhsOsynmap))) ) -- Pattern ----------------------------------------------------- {- visit 0:@@ -795,32 +907,32 @@ _patIvertices :: (Set.Set Vertex) _partsIcopy :: Patterns _partsIvertices :: (Set.Set Vertex)- -- "KWOrder.ag"(line 68, column 12)+ -- "KWOrder.ag"(line 92, column 12) _vertex =- ({-# LINE 68 "KWOrder.ag" #-}+ ({-# LINE 92 "KWOrder.ag" #-} if field_ == _INST then VChild attr_ else VAttr (if field_ == _LHS then Syn else if field_ == _LOC then Loc else Inh) field_ attr_- {-# LINE 806 "KWOrder.hs" #-}+ {-# LINE 918 "KWOrder.hs" #-} )- -- "KWOrder.ag"(line 72, column 12)+ -- "KWOrder.ag"(line 96, column 12) _lhsOvertices =- ({-# LINE 72 "KWOrder.ag" #-}+ ({-# LINE 96 "KWOrder.ag" #-} Set.insert _vertex $ _partsIvertices `Set.union` _patIvertices- {-# LINE 812 "KWOrder.hs" #-}+ {-# LINE 924 "KWOrder.hs" #-} ) -- self rule _copy = ({-# LINE 23 "./Patterns.ag" #-} Alias field_ attr_ _patIcopy _partsIcopy- {-# LINE 818 "KWOrder.hs" #-}+ {-# LINE 930 "KWOrder.hs" #-} ) -- self rule _lhsOcopy = ({-# LINE 23 "./Patterns.ag" #-} _copy- {-# LINE 824 "KWOrder.hs" #-}+ {-# LINE 936 "KWOrder.hs" #-} ) ( _patIcopy,_patIvertices) = pat_ @@ -835,23 +947,23 @@ _lhsOcopy :: Pattern _patsIcopy :: Patterns _patsIvertices :: (Set.Set Vertex)- -- use rule "KWOrder.ag"(line 52, column 36)+ -- use rule "KWOrder.ag"(line 76, column 36) _lhsOvertices =- ({-# LINE 52 "KWOrder.ag" #-}+ ({-# LINE 76 "KWOrder.ag" #-} _patsIvertices- {-# LINE 843 "KWOrder.hs" #-}+ {-# LINE 955 "KWOrder.hs" #-} ) -- self rule _copy = ({-# LINE 23 "./Patterns.ag" #-} Constr name_ _patsIcopy- {-# LINE 849 "KWOrder.hs" #-}+ {-# LINE 961 "KWOrder.hs" #-} ) -- self rule _lhsOcopy = ({-# LINE 23 "./Patterns.ag" #-} _copy- {-# LINE 855 "KWOrder.hs" #-}+ {-# LINE 967 "KWOrder.hs" #-} ) ( _patsIcopy,_patsIvertices) = pats_ @@ -863,23 +975,23 @@ _lhsOcopy :: Pattern _patIcopy :: Pattern _patIvertices :: (Set.Set Vertex)- -- use rule "KWOrder.ag"(line 52, column 36)+ -- use rule "KWOrder.ag"(line 76, column 36) _lhsOvertices =- ({-# LINE 52 "KWOrder.ag" #-}+ ({-# LINE 76 "KWOrder.ag" #-} _patIvertices- {-# LINE 871 "KWOrder.hs" #-}+ {-# LINE 983 "KWOrder.hs" #-} ) -- self rule _copy = ({-# LINE 23 "./Patterns.ag" #-} Irrefutable _patIcopy- {-# LINE 877 "KWOrder.hs" #-}+ {-# LINE 989 "KWOrder.hs" #-} ) -- self rule _lhsOcopy = ({-# LINE 23 "./Patterns.ag" #-} _copy- {-# LINE 883 "KWOrder.hs" #-}+ {-# LINE 995 "KWOrder.hs" #-} ) ( _patIcopy,_patIvertices) = pat_ @@ -892,23 +1004,23 @@ _lhsOcopy :: Pattern _patsIcopy :: Patterns _patsIvertices :: (Set.Set Vertex)- -- use rule "KWOrder.ag"(line 52, column 36)+ -- use rule "KWOrder.ag"(line 76, column 36) _lhsOvertices =- ({-# LINE 52 "KWOrder.ag" #-}+ ({-# LINE 76 "KWOrder.ag" #-} _patsIvertices- {-# LINE 900 "KWOrder.hs" #-}+ {-# LINE 1012 "KWOrder.hs" #-} ) -- self rule _copy = ({-# LINE 23 "./Patterns.ag" #-} Product pos_ _patsIcopy- {-# LINE 906 "KWOrder.hs" #-}+ {-# LINE 1018 "KWOrder.hs" #-} ) -- self rule _lhsOcopy = ({-# LINE 23 "./Patterns.ag" #-} _copy- {-# LINE 912 "KWOrder.hs" #-}+ {-# LINE 1024 "KWOrder.hs" #-} ) ( _patsIcopy,_patsIvertices) = pats_ @@ -918,23 +1030,23 @@ sem_Pattern_Underscore pos_ = (T_Pattern (let _lhsOvertices :: (Set.Set Vertex) _lhsOcopy :: Pattern - -- use rule "KWOrder.ag"(line 52, column 36)+ -- use rule "KWOrder.ag"(line 76, column 36) _lhsOvertices =- ({-# LINE 52 "KWOrder.ag" #-}+ ({-# LINE 76 "KWOrder.ag" #-} Set.empty- {-# LINE 926 "KWOrder.hs" #-}+ {-# LINE 1038 "KWOrder.hs" #-} ) -- self rule _copy = ({-# LINE 23 "./Patterns.ag" #-} Underscore pos_- {-# LINE 932 "KWOrder.hs" #-}+ {-# LINE 1044 "KWOrder.hs" #-} ) -- self rule _lhsOcopy = ({-# LINE 23 "./Patterns.ag" #-} _copy- {-# LINE 938 "KWOrder.hs" #-}+ {-# LINE 1050 "KWOrder.hs" #-} ) in ( _lhsOcopy,_lhsOvertices)) ) -- Patterns ----------------------------------------------------@@ -978,23 +1090,23 @@ _hdIvertices :: (Set.Set Vertex) _tlIcopy :: Patterns _tlIvertices :: (Set.Set Vertex)- -- use rule "KWOrder.ag"(line 52, column 36)+ -- use rule "KWOrder.ag"(line 76, column 36) _lhsOvertices =- ({-# LINE 52 "KWOrder.ag" #-}+ ({-# LINE 76 "KWOrder.ag" #-} _hdIvertices `Set.union` _tlIvertices- {-# LINE 986 "KWOrder.hs" #-}+ {-# LINE 1098 "KWOrder.hs" #-} ) -- self rule _copy = ({-# LINE 23 "./Patterns.ag" #-} (:) _hdIcopy _tlIcopy- {-# LINE 992 "KWOrder.hs" #-}+ {-# LINE 1104 "KWOrder.hs" #-} ) -- self rule _lhsOcopy = ({-# LINE 23 "./Patterns.ag" #-} _copy- {-# LINE 998 "KWOrder.hs" #-}+ {-# LINE 1110 "KWOrder.hs" #-} ) ( _hdIcopy,_hdIvertices) = hd_ @@ -1005,23 +1117,23 @@ sem_Patterns_Nil = (T_Patterns (let _lhsOvertices :: (Set.Set Vertex) _lhsOcopy :: Patterns - -- use rule "KWOrder.ag"(line 52, column 36)+ -- use rule "KWOrder.ag"(line 76, column 36) _lhsOvertices =- ({-# LINE 52 "KWOrder.ag" #-}+ ({-# LINE 76 "KWOrder.ag" #-} Set.empty- {-# LINE 1013 "KWOrder.hs" #-}+ {-# LINE 1125 "KWOrder.hs" #-} ) -- self rule _copy = ({-# LINE 23 "./Patterns.ag" #-} []- {-# LINE 1019 "KWOrder.hs" #-}+ {-# LINE 1131 "KWOrder.hs" #-} ) -- self rule _lhsOcopy = ({-# LINE 23 "./Patterns.ag" #-} _copy- {-# LINE 1025 "KWOrder.hs" #-}+ {-# LINE 1137 "KWOrder.hs" #-} ) in ( _lhsOcopy,_lhsOvertices)) ) -- Production --------------------------------------------------@@ -1067,48 +1179,52 @@ (let _lhsOdepgraph :: ProdDependencyGraph _lhsOrulenumber :: Int _rulesOrulenumber :: Int+ _childrenIechilds :: EChildren _childrenIedges :: (Set.Set Edge) _childrenInontnames :: ([(Identifier, Identifier)]) _childrenIvertices :: (Set.Set Vertex) _rulesIedges :: (Set.Set Edge)+ _rulesIerules :: ERules _rulesIrulenumber :: Int _rulesIvertices :: (Set.Set Vertex)- -- "KWOrder.ag"(line 90, column 17)+ -- "KWOrder.ag"(line 114, column 17) _vertices =- ({-# LINE 90 "KWOrder.ag" #-}+ ({-# LINE 114 "KWOrder.ag" #-} _rulesIvertices `Set.union` _childrenIvertices- {-# LINE 1081 "KWOrder.hs" #-}+ {-# LINE 1195 "KWOrder.hs" #-} )- -- "KWOrder.ag"(line 110, column 17)+ -- "KWOrder.ag"(line 134, column 17) _edges =- ({-# LINE 110 "KWOrder.ag" #-}+ ({-# LINE 134 "KWOrder.ag" #-} _rulesIedges `Set.union` _childrenIedges- {-# LINE 1087 "KWOrder.hs" #-}+ {-# LINE 1201 "KWOrder.hs" #-} )- -- "KWOrder.ag"(line 125, column 17)+ -- "KWOrder.ag"(line 149, column 17) _lhsOdepgraph =- ({-# LINE 125 "KWOrder.ag" #-}+ ({-# LINE 149 "KWOrder.ag" #-} ProdDependencyGraph { pdgVertices = Set.toList _vertices , pdgEdges = Set.toList _edges+ , pdgRules = _rulesIerules+ , pdgChilds = _childrenIechilds , pdgProduction = con_ , pdgChildMap = _childrenInontnames }- {-# LINE 1096 "KWOrder.hs" #-}+ {-# LINE 1212 "KWOrder.hs" #-} ) -- copy rule (up) _lhsOrulenumber =- ({-# LINE 36 "KWOrder.ag" #-}+ ({-# LINE 33 "KWOrder.ag" #-} _rulesIrulenumber- {-# LINE 1102 "KWOrder.hs" #-}+ {-# LINE 1218 "KWOrder.hs" #-} ) -- copy rule (down) _rulesOrulenumber =- ({-# LINE 36 "KWOrder.ag" #-}+ ({-# LINE 33 "KWOrder.ag" #-} _lhsIrulenumber- {-# LINE 1108 "KWOrder.hs" #-}+ {-# LINE 1224 "KWOrder.hs" #-} )- ( _childrenIedges,_childrenInontnames,_childrenIvertices) =+ ( _childrenIechilds,_childrenIedges,_childrenInontnames,_childrenIvertices) = children_ - ( _rulesIedges,_rulesIrulenumber,_rulesIvertices) =+ ( _rulesIedges,_rulesIerules,_rulesIrulenumber,_rulesIvertices) = rules_ _rulesOrulenumber in ( _lhsOdepgraph,_lhsOrulenumber))) ) -- Productions -------------------------------------------------@@ -1153,29 +1269,29 @@ _hdIrulenumber :: Int _tlIdepgraph :: ([ProdDependencyGraph]) _tlIrulenumber :: Int- -- use rule "KWOrder.ag"(line 122, column 33)+ -- use rule "KWOrder.ag"(line 146, column 33) _lhsOdepgraph =- ({-# LINE 122 "KWOrder.ag" #-}+ ({-# LINE 146 "KWOrder.ag" #-} _hdIdepgraph : _tlIdepgraph- {-# LINE 1161 "KWOrder.hs" #-}+ {-# LINE 1277 "KWOrder.hs" #-} ) -- copy rule (up) _lhsOrulenumber =- ({-# LINE 36 "KWOrder.ag" #-}+ ({-# LINE 33 "KWOrder.ag" #-} _tlIrulenumber- {-# LINE 1167 "KWOrder.hs" #-}+ {-# LINE 1283 "KWOrder.hs" #-} ) -- copy rule (down) _hdOrulenumber =- ({-# LINE 36 "KWOrder.ag" #-}+ ({-# LINE 33 "KWOrder.ag" #-} _lhsIrulenumber- {-# LINE 1173 "KWOrder.hs" #-}+ {-# LINE 1289 "KWOrder.hs" #-} ) -- copy rule (chain) _tlOrulenumber =- ({-# LINE 36 "KWOrder.ag" #-}+ ({-# LINE 33 "KWOrder.ag" #-} _hdIrulenumber- {-# LINE 1179 "KWOrder.hs" #-}+ {-# LINE 1295 "KWOrder.hs" #-} ) ( _hdIdepgraph,_hdIrulenumber) = hd_ _hdOrulenumber @@ -1187,17 +1303,17 @@ (T_Productions (\ _lhsIrulenumber -> (let _lhsOdepgraph :: ([ProdDependencyGraph]) _lhsOrulenumber :: Int- -- use rule "KWOrder.ag"(line 122, column 33)+ -- use rule "KWOrder.ag"(line 146, column 33) _lhsOdepgraph =- ({-# LINE 122 "KWOrder.ag" #-}+ ({-# LINE 146 "KWOrder.ag" #-} []- {-# LINE 1195 "KWOrder.hs" #-}+ {-# LINE 1311 "KWOrder.hs" #-} ) -- copy rule (chain) _lhsOrulenumber =- ({-# LINE 36 "KWOrder.ag" #-}+ ({-# LINE 33 "KWOrder.ag" #-} _lhsIrulenumber- {-# LINE 1201 "KWOrder.hs" #-}+ {-# LINE 1317 "KWOrder.hs" #-} ) in ( _lhsOdepgraph,_lhsOrulenumber))) ) -- Rule --------------------------------------------------------@@ -1207,6 +1323,7 @@ rulenumber : Int synthesized attributes: edges : Set.Set Edge+ erules : ERule vertices : Set.Set Vertex alternatives: alternative Rule:@@ -1229,15 +1346,15 @@ (sem_Rule_Rule _mbName (sem_Pattern _pattern ) (sem_Expression _rhs ) _owrt _origin _explicit ) -- semantic domain newtype T_Rule = T_Rule (Int ->- ( (Set.Set Edge),Int,(Set.Set Vertex)))+ ( (Set.Set Edge),ERule,Int,(Set.Set Vertex))) data Inh_Rule = Inh_Rule {rulenumber_Inh_Rule :: Int}-data Syn_Rule = Syn_Rule {edges_Syn_Rule :: (Set.Set Edge),rulenumber_Syn_Rule :: Int,vertices_Syn_Rule :: (Set.Set Vertex)}+data Syn_Rule = Syn_Rule {edges_Syn_Rule :: (Set.Set Edge),erules_Syn_Rule :: ERule,rulenumber_Syn_Rule :: Int,vertices_Syn_Rule :: (Set.Set Vertex)} wrap_Rule :: T_Rule -> Inh_Rule -> Syn_Rule wrap_Rule (T_Rule sem ) (Inh_Rule _lhsIrulenumber ) =- (let ( _lhsOedges,_lhsOrulenumber,_lhsOvertices) = sem _lhsIrulenumber - in (Syn_Rule _lhsOedges _lhsOrulenumber _lhsOvertices ))+ (let ( _lhsOedges,_lhsOerules,_lhsOrulenumber,_lhsOvertices) = sem _lhsIrulenumber + in (Syn_Rule _lhsOedges _lhsOerules _lhsOrulenumber _lhsOvertices )) sem_Rule_Rule :: (Maybe Identifier) -> T_Pattern -> T_Expression ->@@ -1248,58 +1365,71 @@ sem_Rule_Rule mbName_ (T_Pattern pattern_ ) (T_Expression rhs_ ) owrt_ origin_ explicit_ = (T_Rule (\ _lhsIrulenumber -> (let _lhsOrulenumber :: Int+ _lhsOerules :: ERule _lhsOvertices :: (Set.Set Vertex) _lhsOedges :: (Set.Set Edge) _patternIcopy :: Pattern _patternIvertices :: (Set.Set Vertex)+ _rhsIcopy :: Expression _rhsIvertices :: (Set.Set Vertex)- -- "KWOrder.ag"(line 42, column 11)+ -- "KWOrder.ag"(line 39, column 11) _lhsOrulenumber =- ({-# LINE 42 "KWOrder.ag" #-}+ ({-# LINE 39 "KWOrder.ag" #-} _lhsIrulenumber + 1- {-# LINE 1261 "KWOrder.hs" #-}+ {-# LINE 1380 "KWOrder.hs" #-} )- -- "KWOrder.ag"(line 43, column 11)+ -- "KWOrder.ag"(line 40, column 11) _rulename =- ({-# LINE 43 "KWOrder.ag" #-}+ ({-# LINE 40 "KWOrder.ag" #-} maybe (identifier $ "rule" ++ show _lhsIrulenumber) id mbName_- {-# LINE 1267 "KWOrder.hs" #-}+ {-# LINE 1386 "KWOrder.hs" #-} )- -- "KWOrder.ag"(line 85, column 11)+ -- "KWOrder.ag"(line 51, column 10)+ _lhsOerules =+ ({-# LINE 51 "KWOrder.ag" #-}+ ERule _rulename+ _patternIcopy+ _rhsIcopy+ owrt_+ origin_+ explicit_+ {-# LINE 1397 "KWOrder.hs" #-}+ )+ -- "KWOrder.ag"(line 109, column 11) _vertex =- ({-# LINE 85 "KWOrder.ag" #-}+ ({-# LINE 109 "KWOrder.ag" #-} VRule _rulename- {-# LINE 1273 "KWOrder.hs" #-}+ {-# LINE 1403 "KWOrder.hs" #-} )- -- "KWOrder.ag"(line 86, column 11)+ -- "KWOrder.ag"(line 110, column 11) _lhsOvertices =- ({-# LINE 86 "KWOrder.ag" #-}+ ({-# LINE 110 "KWOrder.ag" #-} Set.insert _vertex $ _patternIvertices `Set.union` _rhsIvertices- {-# LINE 1279 "KWOrder.hs" #-}+ {-# LINE 1409 "KWOrder.hs" #-} )- -- "KWOrder.ag"(line 98, column 11)+ -- "KWOrder.ag"(line 122, column 11) _edgesout =- ({-# LINE 98 "KWOrder.ag" #-}+ ({-# LINE 122 "KWOrder.ag" #-} map ((,) _vertex ) (Set.toList _rhsIvertices)- {-# LINE 1285 "KWOrder.hs" #-}+ {-# LINE 1415 "KWOrder.hs" #-} )- -- "KWOrder.ag"(line 99, column 11)+ -- "KWOrder.ag"(line 123, column 11) _edgesin =- ({-# LINE 99 "KWOrder.ag" #-}+ ({-# LINE 123 "KWOrder.ag" #-} map (flip (,) _vertex ) (Set.toList _patternIvertices)- {-# LINE 1291 "KWOrder.hs" #-}+ {-# LINE 1421 "KWOrder.hs" #-} )- -- "KWOrder.ag"(line 100, column 11)+ -- "KWOrder.ag"(line 124, column 11) _lhsOedges =- ({-# LINE 100 "KWOrder.ag" #-}+ ({-# LINE 124 "KWOrder.ag" #-} Set.fromList $ _edgesout ++ _edgesin- {-# LINE 1297 "KWOrder.hs" #-}+ {-# LINE 1427 "KWOrder.hs" #-} ) ( _patternIcopy,_patternIvertices) = pattern_ - ( _rhsIvertices) =+ ( _rhsIcopy,_rhsIvertices) = rhs_ - in ( _lhsOedges,_lhsOrulenumber,_lhsOvertices))) )+ in ( _lhsOedges,_lhsOerules,_lhsOrulenumber,_lhsOvertices))) ) -- Rules ------------------------------------------------------- {- visit 0:@@ -1307,6 +1437,7 @@ rulenumber : Int synthesized attributes: edges : Set.Set Edge+ erules : ERules vertices : Set.Set Vertex alternatives: alternative Cons:@@ -1321,91 +1452,107 @@ (Prelude.foldr sem_Rules_Cons sem_Rules_Nil (Prelude.map sem_Rule list) ) -- semantic domain newtype T_Rules = T_Rules (Int ->- ( (Set.Set Edge),Int,(Set.Set Vertex)))+ ( (Set.Set Edge),ERules,Int,(Set.Set Vertex))) data Inh_Rules = Inh_Rules {rulenumber_Inh_Rules :: Int}-data Syn_Rules = Syn_Rules {edges_Syn_Rules :: (Set.Set Edge),rulenumber_Syn_Rules :: Int,vertices_Syn_Rules :: (Set.Set Vertex)}+data Syn_Rules = Syn_Rules {edges_Syn_Rules :: (Set.Set Edge),erules_Syn_Rules :: ERules,rulenumber_Syn_Rules :: Int,vertices_Syn_Rules :: (Set.Set Vertex)} wrap_Rules :: T_Rules -> Inh_Rules -> Syn_Rules wrap_Rules (T_Rules sem ) (Inh_Rules _lhsIrulenumber ) =- (let ( _lhsOedges,_lhsOrulenumber,_lhsOvertices) = sem _lhsIrulenumber - in (Syn_Rules _lhsOedges _lhsOrulenumber _lhsOvertices ))+ (let ( _lhsOedges,_lhsOerules,_lhsOrulenumber,_lhsOvertices) = sem _lhsIrulenumber + in (Syn_Rules _lhsOedges _lhsOerules _lhsOrulenumber _lhsOvertices )) sem_Rules_Cons :: T_Rule -> T_Rules -> T_Rules sem_Rules_Cons (T_Rule hd_ ) (T_Rules tl_ ) = (T_Rules (\ _lhsIrulenumber -> (let _lhsOedges :: (Set.Set Edge)+ _lhsOerules :: ERules _lhsOvertices :: (Set.Set Vertex) _lhsOrulenumber :: Int _hdOrulenumber :: Int _tlOrulenumber :: Int _hdIedges :: (Set.Set Edge)+ _hdIerules :: ERule _hdIrulenumber :: Int _hdIvertices :: (Set.Set Vertex) _tlIedges :: (Set.Set Edge)+ _tlIerules :: ERules _tlIrulenumber :: Int _tlIvertices :: (Set.Set Vertex)- -- use rule "KWOrder.ag"(line 94, column 33)+ -- use rule "KWOrder.ag"(line 118, column 33) _lhsOedges =- ({-# LINE 94 "KWOrder.ag" #-}+ ({-# LINE 118 "KWOrder.ag" #-} _hdIedges `Set.union` _tlIedges- {-# LINE 1354 "KWOrder.hs" #-}+ {-# LINE 1488 "KWOrder.hs" #-} )- -- use rule "KWOrder.ag"(line 52, column 36)+ -- use rule "KWOrder.ag"(line 48, column 25)+ _lhsOerules =+ ({-# LINE 48 "KWOrder.ag" #-}+ _hdIerules : _tlIerules+ {-# LINE 1494 "KWOrder.hs" #-}+ )+ -- use rule "KWOrder.ag"(line 76, column 36) _lhsOvertices =- ({-# LINE 52 "KWOrder.ag" #-}+ ({-# LINE 76 "KWOrder.ag" #-} _hdIvertices `Set.union` _tlIvertices- {-# LINE 1360 "KWOrder.hs" #-}+ {-# LINE 1500 "KWOrder.hs" #-} ) -- copy rule (up) _lhsOrulenumber =- ({-# LINE 36 "KWOrder.ag" #-}+ ({-# LINE 33 "KWOrder.ag" #-} _tlIrulenumber- {-# LINE 1366 "KWOrder.hs" #-}+ {-# LINE 1506 "KWOrder.hs" #-} ) -- copy rule (down) _hdOrulenumber =- ({-# LINE 36 "KWOrder.ag" #-}+ ({-# LINE 33 "KWOrder.ag" #-} _lhsIrulenumber- {-# LINE 1372 "KWOrder.hs" #-}+ {-# LINE 1512 "KWOrder.hs" #-} ) -- copy rule (chain) _tlOrulenumber =- ({-# LINE 36 "KWOrder.ag" #-}+ ({-# LINE 33 "KWOrder.ag" #-} _hdIrulenumber- {-# LINE 1378 "KWOrder.hs" #-}+ {-# LINE 1518 "KWOrder.hs" #-} )- ( _hdIedges,_hdIrulenumber,_hdIvertices) =+ ( _hdIedges,_hdIerules,_hdIrulenumber,_hdIvertices) = hd_ _hdOrulenumber - ( _tlIedges,_tlIrulenumber,_tlIvertices) =+ ( _tlIedges,_tlIerules,_tlIrulenumber,_tlIvertices) = tl_ _tlOrulenumber - in ( _lhsOedges,_lhsOrulenumber,_lhsOvertices))) )+ in ( _lhsOedges,_lhsOerules,_lhsOrulenumber,_lhsOvertices))) ) sem_Rules_Nil :: T_Rules sem_Rules_Nil = (T_Rules (\ _lhsIrulenumber -> (let _lhsOedges :: (Set.Set Edge)+ _lhsOerules :: ERules _lhsOvertices :: (Set.Set Vertex) _lhsOrulenumber :: Int- -- use rule "KWOrder.ag"(line 94, column 33)+ -- use rule "KWOrder.ag"(line 118, column 33) _lhsOedges =- ({-# LINE 94 "KWOrder.ag" #-}+ ({-# LINE 118 "KWOrder.ag" #-} Set.empty- {-# LINE 1395 "KWOrder.hs" #-}+ {-# LINE 1536 "KWOrder.hs" #-} )- -- use rule "KWOrder.ag"(line 52, column 36)+ -- use rule "KWOrder.ag"(line 48, column 25)+ _lhsOerules =+ ({-# LINE 48 "KWOrder.ag" #-}+ []+ {-# LINE 1542 "KWOrder.hs" #-}+ )+ -- use rule "KWOrder.ag"(line 76, column 36) _lhsOvertices =- ({-# LINE 52 "KWOrder.ag" #-}+ ({-# LINE 76 "KWOrder.ag" #-} Set.empty- {-# LINE 1401 "KWOrder.hs" #-}+ {-# LINE 1548 "KWOrder.hs" #-} ) -- copy rule (chain) _lhsOrulenumber =- ({-# LINE 36 "KWOrder.ag" #-}+ ({-# LINE 33 "KWOrder.ag" #-} _lhsIrulenumber- {-# LINE 1407 "KWOrder.hs" #-}+ {-# LINE 1554 "KWOrder.hs" #-} )- in ( _lhsOedges,_lhsOrulenumber,_lhsOvertices))) )+ in ( _lhsOedges,_lhsOerules,_lhsOrulenumber,_lhsOvertices))) ) -- TypeSig ----------------------------------------------------- {- alternatives:
src/Ag.hs view
@@ -23,6 +23,7 @@ import qualified KWOrder as Pass3a (sem_Grammar, wrap_Grammar, Syn_Grammar (..), Inh_Grammar (..)) import qualified GenerateCode as Pass4 (sem_CGrammar, wrap_CGrammar, Syn_CGrammar(..), Inh_CGrammar(..)) import qualified PrintVisitCode as Pass4a (sem_CGrammar, wrap_CGrammar, Syn_CGrammar(..), Inh_CGrammar(..))+import qualified ExecutionPlan2Hs as Pass4b (sem_ExecutionPlan, wrap_ExecutionPlan, Syn_ExecutionPlan(..), Inh_ExecutionPlan(..)) import qualified PrintCode as Pass5 (sem_Program, wrap_Program, Syn_Program (..), Inh_Program (..)) import qualified PrintOcamlCode as Pass5a (sem_Program, wrap_Program, Syn_Program (..), Inh_Program (..)) import qualified PrintErrorMessages as PrErr (sem_Errors , wrap_Errors , Syn_Errors (..), Inh_Errors (..), isError)@@ -75,9 +76,11 @@ output3 = Pass3.wrap_Grammar (Pass3.sem_Grammar grammar2 ) Pass3.Inh_Grammar {Pass3.options_Inh_Grammar = flags'} grammar3 = Pass3.output_Syn_Grammar output3 output3a = Pass3a.wrap_Grammar (Pass3a.sem_Grammar grammar2 ) Pass3a.Inh_Grammar {Pass3a.options_Inh_Grammar = flags'}- debug3a = Pass3a.debugoutput_Syn_Grammar output3a+ grammar3a = Pass3a.output_Syn_Grammar output3a output4 = Pass4.wrap_CGrammar (Pass4.sem_CGrammar(Pass3.output_Syn_Grammar output3)) Pass4.Inh_CGrammar {Pass4.options_Inh_CGrammar = flags'} output4a = Pass4a.wrap_CGrammar (Pass4a.sem_CGrammar(Pass3.output_Syn_Grammar output3)) Pass4a.Inh_CGrammar {Pass4a.options_Inh_CGrammar = flags'}+ output4b = Pass4b.wrap_ExecutionPlan (Pass4b.sem_ExecutionPlan grammar3a) Pass4b.Inh_ExecutionPlan {Pass4b.options_Inh_ExecutionPlan = flags', Pass4b.inhmap_Inh_ExecutionPlan = Pass3a.inhmap_Syn_Grammar output3a, Pass4b.synmap_Inh_ExecutionPlan = Pass3a.synmap_Syn_Grammar output3a, Pass4b.pragmaBlocks_Inh_ExecutionPlan = pragmaBlocksTxt, Pass4b.importBlocks_Inh_ExecutionPlan = importBlocksTxt, Pass4b.textBlocks_Inh_ExecutionPlan = textBlocksDoc, Pass4b.moduleHeader_Inh_ExecutionPlan = mkModuleHeader $ Pass1.moduleDecl_Syn_AG output1, Pass4b.mainName_Inh_ExecutionPlan = mkMainName mainName $ Pass1.moduleDecl_Syn_AG output1}+ debug4b = Pass4b.debugoutput_Syn_ExecutionPlan output4b output5 = Pass5.wrap_Program (Pass5.sem_Program (Pass4.output_Syn_CGrammar output4)) Pass5.Inh_Program {Pass5.options_Inh_Program = flags', Pass5.pragmaBlocks_Inh_Program = pragmaBlocksTxt, Pass5.importBlocks_Inh_Program = importBlocksTxt, Pass5.textBlocks_Inh_Program = textBlocksDoc, Pass5.textBlockMap_Inh_Program = textBlockMap, Pass5.optionsLine_Inh_Program = optionsLine, Pass5.mainFile_Inh_Program = mainFile, Pass5.moduleHeader_Inh_Program = mkModuleHeader $ Pass1.moduleDecl_Syn_AG output1, Pass5.mainName_Inh_Program = mkMainName mainName $ Pass1.moduleDecl_Syn_AG output1} output5a = Pass5a.wrap_Program (Pass5a.sem_Program (Pass4.output_Syn_CGrammar output4)) Pass5a.Inh_Program { Pass5a.options_Inh_Program = flags', Pass5a.textBlockMap_Inh_Program = textBlockMap } output6 = PrErr.wrap_Errors (PrErr.sem_Errors errorsToReport) PrErr.Inh_Errors {PrErr.options_Inh_Errors = flags', PrErr.dups_Inh_Errors = [] }@@ -206,7 +209,7 @@ , AspectAGDump.pp_Syn_Grammar aspectAG ] | kennedyWarren flags'- = vlist [debug3a,+ = vlist [debug4b, if dumpgrammar flags' then vlist [ pp "{- Dump of grammar with default rules" , GrammarDump.pp_Syn_Grammar dump2
src/CommonTypes.hs view
@@ -68,6 +68,8 @@ type NontermIdent = Identifier type ConstructorIdent = Identifier type AttrOrderMap = Map NontermIdent (Map ConstructorIdent (Set Dependency))+type VisitIdentifier = Int+type StateIdentifier = Int data Dependency = Dependency Occurrence Occurrence deriving (Eq,Ord,Show) data Occurrence = OccAttr Identifier Identifier
src/KennedyWarren.hs view
@@ -3,6 +3,7 @@ import CommonTypes import Pretty import Knuth1+import ExecutionPlan import Debug.Trace import Control.Monad.ST import Control.Monad.State@@ -10,34 +11,39 @@ import Data.STRef import Data.Maybe import Data.List+import Data.Ord import qualified Data.Set as Set import qualified Data.Map as Map import qualified Data.IntMap as IntMap import qualified Data.IntSet as IntSet -kennedyWarrenIO :: [NontDependencyInformation] -> PP_Doc-kennedyWarrenIO ndis = runST $ do +kennedyWarrenOrder :: Set.Set NontermIdent -> [NontDependencyInformation] -> TypeSyns -> Maybe ExecutionPlan+kennedyWarrenOrder wr ndis typesyns = runST $ do indi <- mapM mkNontDependencyInformationM ndis knuth1 indi -- Check all graphs for cyclicity, transitive closure and consistency traceST $ "Checking graphs..."- forM_ indi $ \ndi -> do+ allok <- forM indi $ \ndi -> do let nont = ndiNonterminal . ndimOrig $ ndi let g = ndgmDepGraph . ndimDepGraph $ ndi+ -- Topological sort+ --tsedg <- graphTopSort g -- Cyclicity check c1 <- graphIsCyclic g when c1 $ traceST $ "Nonterminal graph " ++ show nont ++ " is cylic!" -- Transtive closure check- trc <- graphIsTRC g- when (not trc) $ traceST $ "Nonterminal graph " ++ show nont ++ " is not transitively closed!"+ --trc <- graphIsTRC g+ --when (not trc) $ traceST $ "Nonterminal graph " ++ show nont ++ " is not transitively closed!" -- Consistency check cons <- graphCheckConsistency g when (not cons) $ traceST $ "Nonterminal graph " ++ show nont ++ " is not consistent!" -- Loop trough all productions- forM_ (ndimProds ndi) $ \prod -> do+ allok <- forM (ndimProds ndi) $ \prod -> do let pr = pdgProduction $ pdgmOrig prod let g = pdgmDepGraph $ prod+ -- Topsort+ --addTopSortEdges tsedg prod -- Check for cyclicity c2 <- graphIsCyclic g when c2 $ traceST $ "Production graph " ++ show pr ++ " of nonterminal "@@ -50,13 +56,21 @@ cons <- graphCheckConsistency g when (not cons) $ traceST $ "Production graph " ++ show pr ++ " of nonterminal " ++ show nont ++ " is not consistent!"- -- Recreate non-transitive closed graph for efficiency- indi <- undoTransitiveClosure indi- -- Debug output- traceST $ "Converting to string..."- rtexts <- mapM toGVNontDependencyInfo indi- traceST $ "Done."- return (vlist rtexts)+ return $ (not c2) && trc && cons+ return $ (and allok) && (not c1) && cons+ if (and allok) + then do+ -- Create non-transitive closed graph for efficiency+ indi <- undoTransitiveClosure indi+ -- Doing kennedywarren+ ret <- runVG $ do+ traceVG $ "Running kennedy-warren..."+ initvs <- kennedyWarrenVisitM wr indi+ -- Generate execution plan+ kennedyWarrenExecutionPlan indi initvs wr typesyns+ -- Return the result+ return $ Just ret+ else return Nothing ------------------------------------------------------------------------------- -- Debugging functionality@@ -115,3 +129,529 @@ text "}" >-< text "")++-------------------------------------------------------------------------------+-- Kennedy-Warren in monadic style+-------------------------------------------------------------------------------+{-+runVG :: VG s a -> ST s a+insertInitialNode :: NontDependencyInformationM s -> VG s VGNode+createPending :: VGNode -> Set.Set Identifier -> Set.Set Identifier -> VG s VGEdge+selectPending :: VG s VGEdge+getInherited :: VGEdge -> VG s (Set.Set Identifier)+getSynthesized :: VGEdge -> VG s (Set.Set Identifier)+markFinal :: VGEdge -> VG s ()+getProductions :: VGEdge -> VG s [VGProd]+onMarkedDepGraph :: (ProdDependencyGraphM s -> ST s a) -> VGProd -> VG s a+isDepGraphVertexFinal :: VGProd -> Vertex -> VG s Bool+setDepGraphVerticesFinal :: VGProd -> [Vertex] -> VG s ()+getChildState :: VGProd -> Identifier -> VG s VGNode+addChildVisit :: VGProd -> Identifier -> VGEdge -> VG s VisitStep+addVisitStep :: VGProd -> VisitStep -> VG s ()+repeatM :: VG s () -> VG s ()+-}++newtype VGNode = VGNode Int deriving (Show,Eq,Ord)+newtype VGEdge = VGEdge Int deriving (Show,Eq,Ord)+newtype VGProd = VGProd (VGEdge,Int) deriving (Show,Eq,Ord)++data VGState s = VGState { vgNodeNum :: Int+ , vgEdgeNum :: Int+ -- Node maps+ , vgOutgoing :: IntMap.IntMap (STRef s (Set.Set VGEdge))+ , vgIncoming :: IntMap.IntMap (Maybe VGEdge)+ , vgNDI :: IntMap.IntMap (STRef s (NontDependencyInformationM s))+ , vgInhSynNode :: Map.Map (Identifier, Set.Set Identifier, Set.Set Identifier) VGNode+ , vgNodeInhSyn :: IntMap.IntMap (Set.Set Identifier, Set.Set Identifier)+ , vgInitial :: Map.Map Identifier VGNode+ -- Edge maps+ , vgEdges :: IntMap.IntMap (VGNode, VGNode)+ , vgEdgesR :: Map.Map (VGNode,VGNode) VGEdge+ , vgInherited :: IntMap.IntMap (Set.Set Identifier)+ , vgSynthesized :: IntMap.IntMap (Set.Set Identifier)+ , vgPending :: IntSet.IntSet+ , vgChildVisits :: IntMap.IntMap (STRef s (Map.Map (Identifier,Int) [VGNode]))+ -- Final vertices in production graphs+ , vgFinalVertices :: IntMap.IntMap (STRef s (Set.Set (Vertex,Int)))+ -- Construction of execution plan (Nonterminal,Production,Visit)+ , vgProdVisits :: Map.Map (Identifier,Identifier,VGEdge) (STRef s [VisitStep])+ }++type VG s a = ErrorT String (StateT (VGState s) (ST s)) a++------------------------------------------------------------+--- Public functions ---+------------------------------------------------------------+-- | Run the VG monad in the ST monad+runVG :: VG s a -> ST s a+runVG vg = do (Right a,rs) <- runStateT (runErrorT vg) vgEmptyState+ return a++-- | Insert an initial node for this nonterminal into the visit graph+insertInitialNode :: NontDependencyInformationM s -> VG s VGNode+insertInitialNode ndi = do+ rndi <- vgInST $ newSTRef ndi+ (VGNode node) <- vgCreateNode rndi Set.empty Set.empty+ initial <- gets vgInitial+ incoming <- gets vgIncoming+ modify $ \st -> st { vgInitial = Map.insert (ndiNonterminal $ ndimOrig ndi) (VGNode node) initial + , vgIncoming = IntMap.insert node Nothing incoming }+ return (VGNode node)++-- | Create a pending edge from this node with a set of inherited and synthesized attributes+createPending :: VGNode -> Set.Set Identifier -> Set.Set Identifier -> VG s VGEdge+createPending vgn@(VGNode n) inh syn = do+ -- Check if target node already exists+ ninhsyn <- gets vgNodeInhSyn+ let (pinh,psyn) = imLookup n ninhsyn+ let ninh = Set.union pinh inh+ let nsyn = Set.union psyn syn+ mndi <- gets vgNDI+ let rndi = imLookup n mndi+ ndi <- vgInST $ readSTRef rndi+ inhsynn <- gets vgInhSynNode+ case Map.lookup (ndiNonterminal $ ndimOrig ndi, ninh, nsyn) inhsynn of+ Just tn -> do+ when (tn == vgn) $ do traceVG $ "Source and target nodes are the same!"+ traceVG $ "Maybe there is a wrapper with no inherited or synthesized attributes."+ traceVG $ "Inh: " ++ show inh+ traceVG $ "Syn: " ++ show syn+ traceVG $ "PInh: " ++ show pinh+ traceVG $ "PSyn: " ++ show psyn+ -- tn is target node, now check if edge exists and create if not+ edgesr <- gets vgEdgesR+ case Map.lookup (vgn,tn) edgesr of+ Just e -> return e+ Nothing -> vgCreatePendingEdge vgn tn inh syn+ Nothing -> do+ -- target node does not exist, create it and then create the new edge+ tn <- vgCreateNode rndi ninh nsyn+ vgCreatePendingEdge vgn tn inh syn++-- | Return an arbitrary pending edge of which the from node is ready+selectPending :: VG s VGEdge+selectPending = do+ pending <- gets vgPending+ incoming <- gets vgIncoming+ edges <- gets vgEdges+ let readyPend = filter (\p -> let (VGNode fr,_) = imLookup p edges+ in isJust $ IntMap.lookup fr incoming) $ IntSet.toList pending+ guard $ not $ null readyPend+ return $ VGEdge $ head $ readyPend++-- | Get the inherited attributes of an edge+getInherited :: VGEdge -> VG s (Set.Set Identifier)+getInherited (VGEdge edg) = do+ inhs <- gets vgInherited+ return $ imLookup edg inhs++-- | Get the synthesized attributes of an edge+getSynthesized :: VGEdge -> VG s (Set.Set Identifier)+getSynthesized (VGEdge edg) = do+ syns <- gets vgSynthesized+ return $ imLookup edg syns++-- | Mark an edge as final+markFinal :: VGEdge -> VG s ()+markFinal vgedg@(VGEdge edg) = do+ incoming <- gets vgIncoming+ edges <- gets vgEdges+ pending <- gets vgPending+ let (VGNode from,VGNode to) = imLookup edg edges+ modify $ \st -> st { vgIncoming = IntMap.insert to (Just vgedg) incoming+ , vgPending = IntSet.delete edg pending }++-- | Get all productions for an edge+getProductions :: VGEdge -> VG s [VGProd]+getProductions vedg@(VGEdge edg) = do+ edges <- gets vgEdges+ let (VGNode fr,_) = imLookup edg edges+ ndis <- gets vgNDI+ let rndi = imLookup fr ndis+ ndi <- vgInST $ readSTRef rndi+ return $ map (\x -> VGProd (vedg,x)) [0..(length $ ndimProds ndi)-1]++-- | Execute a function on the dependency graph for this production+onMarkedDepGraph :: (ProdDependencyGraphM s -> ST s a) -> VGProd -> VG s a+onMarkedDepGraph f (VGProd (VGEdge edg, n)) = do+ edges <- gets vgEdges+ let (VGNode fr,_) = imLookup edg edges+ ndis <- gets vgNDI+ let rndi = imLookup fr ndis+ ndi <- vgInST $ readSTRef rndi+ vgInST $ f $ (ndimProds ndi) !! n -- not efficient, but lists are usually short++-- | Check whether this vertex has been marked as final+isDepGraphVertexFinal :: VGProd -> Vertex -> VG s Bool+isDepGraphVertexFinal (VGProd (VGEdge edg, p)) v = do+ edges <- gets vgEdges+ let (from,_) = imLookup edg edges+ vgDepGraphVertexFinal from p v++-- | Mark these vertices final in this production+setDepGraphVerticesFinal :: VGProd -> [Vertex] -> VG s ()+setDepGraphVerticesFinal (VGProd (VGEdge edg, p)) vs = do+ edges <- gets vgEdges+ let (_,VGNode to) = imLookup edg edges+ finalv <- gets vgFinalVertices+ let rfinalv = imLookup to finalv+ vgInST $ modifySTRef rfinalv $ Set.union (Set.fromList $ map (\v -> (v,p)) vs)++-- | Add a child visit to this production and return the step for the execution plan+addChildVisit :: VGProd -> Identifier -> VGEdge -> VG s VisitStep+addChildVisit vgp@(VGProd (VGEdge edg, p)) id (VGEdge vs) = do+ edges <- gets vgEdges+ let (VGNode from,vgto@(VGNode to)) = imLookup vs edges -- from must be equal to the current state+ childvs <- gets vgChildVisits+ let rchildv = imLookup edg childvs+ vgInST $ modifySTRef rchildv $ Map.insertWith' (++) (id,p) [vgto]+ ndis <- gets vgNDI+ let rndi = imLookup from ndis+ ndi <- vgInST $ readSTRef rndi+ let nt = ndiNonterminal $ ndimOrig ndi+ return $ ChildVisit id nt vs++-- | Add a step to the execution plan of this visit+addVisitStep :: VGProd -> VisitStep -> VG s ()+addVisitStep (VGProd (VGEdge edg, p)) st = do+ edges <- gets vgEdges+ let (VGNode fr,_) = imLookup edg edges+ ndis <- gets vgNDI+ let rndi = imLookup fr ndis+ ndi <- vgInST $ readSTRef rndi+ prodvs <- gets vgProdVisits+ let nont = ndiNonterminal $ ndimOrig ndi+ let prod = pdgProduction $ pdgmOrig $ ndimProds ndi !! p+ let Just rprodv = Map.lookup (nont, prod, VGEdge edg) prodvs+ vgInST $ modifySTRef rprodv (++ [st])++-- | Get the state of a child in a certain production+getChildState :: VGProd -> Identifier -> VG s VGNode+getChildState (VGProd (VGEdge edg,p)) id = do+ childvs <- gets vgChildVisits+ let rchildv = imLookup edg childvs+ childv <- vgInST $ readSTRef rchildv+ case Map.lookup (id,p) childv of+ Just (n:_) -> return n+ Nothing -> do+ -- Look for previous edge+ edges <- gets vgEdges+ let (VGNode from,_) = imLookup edg edges+ incoming <- gets vgIncoming+ case IntMap.lookup from incoming of+ Just (Just iedg) -> getChildState (VGProd (iedg,p)) id+ Just Nothing -> do+ -- Lookup initial state+ ndis <- gets vgNDI+ let rndi = imLookup from ndis+ ndi <- vgInST $ readSTRef rndi+ let Just nt = lookup id $ pdgChildMap $ pdgmOrig $ (ndimProds ndi) !! p+ vgFindInitial nt+ Nothing -> error "getChildState"++-- | Repeat action untill mzero is encountered+repeatM :: VG s () -> VG s ()+repeatM m = catchError (m >> repeatM m) (const $ return ())++------------------------------------------------------------+--- Internal functions ---+------------------------------------------------------------+-- | Execute a ST action inside the VG monad+vgInST :: ST s a -> VG s a+vgInST = lift . lift++vgEmptyState :: VGState s+vgEmptyState = VGState { vgNodeNum = 0+ , vgEdgeNum = 0+ , vgOutgoing = IntMap.empty+ , vgIncoming = IntMap.empty+ , vgNDI = IntMap.empty+ , vgInhSynNode = Map.empty+ , vgNodeInhSyn = IntMap.empty+ , vgInitial = Map.empty+ , vgEdges = IntMap.empty+ , vgEdgesR = Map.empty+ , vgInherited = IntMap.empty+ , vgSynthesized = IntMap.empty+ , vgPending = IntSet.empty+ , vgChildVisits = IntMap.empty+ , vgFinalVertices = IntMap.empty+ , vgProdVisits = Map.empty+ }+-- | Create a new node+vgCreateNode :: STRef s (NontDependencyInformationM s) -> Set.Set Identifier -> Set.Set Identifier -> VG s VGNode+vgCreateNode rndi inh syn = do+ num <- gets vgNodeNum+ outgoing <- gets vgOutgoing+ inhsyn <- gets vgInhSynNode+ ninhsyn <- gets vgNodeInhSyn+ ndi <- gets vgNDI+ finalv <- gets vgFinalVertices+ rout <- vgInST $ newSTRef Set.empty+ rfinalv <- vgInST $ newSTRef Set.empty+ nndi <- vgInST $ readSTRef rndi+ modify $ \st -> st { vgNodeNum = num + 1+ , vgOutgoing = IntMap.insert num rout outgoing+ , vgInhSynNode = Map.insert (ndiNonterminal $ ndimOrig nndi,inh,syn) (VGNode num) inhsyn+ , vgNodeInhSyn = IntMap.insert num (inh,syn) ninhsyn+ , vgNDI = IntMap.insert num rndi ndi + , vgFinalVertices = IntMap.insert num rfinalv finalv }+ return $ VGNode num++-- | Create a new pending edge+vgCreatePendingEdge :: VGNode -> VGNode -> Set.Set Identifier -> Set.Set Identifier -> VG s VGEdge+vgCreatePendingEdge vgn1@(VGNode n1) vgn2@(VGNode n2) inh syn = do + num <- gets vgEdgeNum+ edges <- gets vgEdges+ edgesr <- gets vgEdgesR+ inhs <- gets vgInherited+ syns <- gets vgSynthesized+ outgoing <- gets vgOutgoing+ pend <- gets vgPending+ childv <- gets vgChildVisits+ rchildv <- vgInST $ newSTRef Map.empty+ let outr = imLookup n1 outgoing+ let ret = VGEdge num+ vgInST $ modifySTRef outr (Set.insert ret)+ modify $ \st -> st { vgEdgeNum = num + 1+ , vgEdges = IntMap.insert num (vgn1,vgn2) edges+ , vgEdgesR = Map.insert (vgn1,vgn2) ret edgesr+ , vgPending = IntSet.insert num pend+ , vgInherited = IntMap.insert num inh inhs+ , vgSynthesized = IntMap.insert num syn syns + , vgChildVisits = IntMap.insert num rchildv childv }+ -- Add prod visits (for constructing an execution plan)+ ndis <- gets vgNDI+ let rndi = imLookup n1 ndis+ ndi <- vgInST $ readSTRef rndi+ prodv <- gets vgProdVisits+ refs <- forM (ndimProds ndi) $ \prod -> do+ rprod <- vgInST $ newSTRef []+ return ((ndiNonterminal $ ndimOrig ndi, pdgProduction $ pdgmOrig prod, ret),rprod)+ modify $ \st -> st { vgProdVisits = Map.union (Map.fromList refs) prodv }+ return $ ret++-- | Check whether a vertex is marked final on this node in this production+vgDepGraphVertexFinal :: VGNode -> Int -> Vertex -> VG s Bool+vgDepGraphVertexFinal (VGNode n) p v = do+ finalv <- gets vgFinalVertices+ let rfinalv = imLookup n finalv+ curset <- vgInST $ readSTRef rfinalv+ if Set.member (v,p) curset+ then return True+ else do+ incoming <- gets vgIncoming+ case IntMap.lookup n incoming of+ Just (Just (VGEdge edg)) -> do+ edges <- gets vgEdges+ let (fr,_) = imLookup edg edges+ vgDepGraphVertexFinal fr p v+ Just Nothing -> return False+ -- Nothing can never happen++-- | Find the initial node for a nonterminal+vgFindInitial :: Identifier -> VG s VGNode+vgFindInitial nt = do+ initial <- gets vgInitial+ let Just r = Map.lookup nt initial+ return r++-- | Always succeeding IntMap lookup+imLookup :: Int -> IntMap.IntMap a -> a+imLookup k m = let Just r = IntMap.lookup k m in r++-- | Trace inside the vg monad+traceVG :: String -> VG s ()+traceVG s = trace s (return ())++------------------------------------------------------------+--- The kennedy warren algorithm ---+------------------------------------------------------------+{-+runVG :: VG s a -> ST s a+insertInitialNode :: NontDependencyInformationM s -> VG s VGNode+createPending :: VGNode -> Set.Set Identifier -> Set.Set Identifier -> VG s VGEdge+selectPending :: VG s VGEdge+getInherited :: VGEdge -> VG s (Set.Set Identifier)+getSynthesized :: VGEdge -> VG s (Set.Set Identifier)+markFinal :: VGEdge -> VG s ()+getProductions :: VGEdge -> VG s [VGProd]+onMarkedDepGraph :: (ProdDependencyGraphM s -> ST s a) -> VGProd -> VG s a+isDepGraphVertexFinal :: VGProd -> Vertex -> VG s Bool+setDepGraphVerticesFinal :: VGProd -> [Vertex] -> VG s ()+getChildState :: VGProd -> Identifier -> VG s VGNode+addChildVisit :: VGProd -> Identifier -> VGEdge -> VG s VisitStep+addVisitStep :: VGProd -> VisitStep -> VG s ()+repeatM :: VG s () -> VG s ()+-}++kennedyWarrenVisitM :: Set.Set NontermIdent -> [NontDependencyInformationM s] -> VG s [Maybe Int]+kennedyWarrenVisitM wr ndis = do+ -- Create initial nodes and edges (edges only for wrapper nodes)+ initvs <- forM ndis $ \ndi -> do+ nd <- insertInitialNode ndi+ if (Set.member (ndiNonterminal $ ndimOrig $ ndi) wr)+ then do+ VGEdge initv <- createPending nd (Set.fromList $ ndiInh $ ndimOrig ndi) (Set.fromList $ ndiSyn $ ndimOrig ndi)+ return $ Just initv+ else return Nothing+ -- Handle all pending edges while there are any+ repeatM $ do+ pend <- selectPending+ prods <- getProductions pend+ inhs <- getInherited pend+ syns <- getSynthesized pend+ -- Handle each production for this edge+ forM_ prods $ \prod -> do+ -- Find depth of all synthesized child visits+ (vis,i) <- foldM (foldChildVisits prod) ([],0) (map (VAttr Syn _LHS) . Set.toList $ syns)+ -- Mark them as final+ setDepGraphVerticesFinal prod (map fst vis)+ -- Change the inherited child visits+ vis2 <- forM vis $ \(v,i) -> do+ if isChildInh v+ then do+ preds <- onMarkedDepGraph (liftM Set.toList . flip graphPredecessors v . pdgmDepGraph) prod+ let ni = foldl1 min $ map (\x -> case x `lookup` vis of { Just i -> i; Nothing -> 99999999 }) preds+ return (v,ni)+ else if not $ isChildSyn v+ then do+ succs <- onMarkedDepGraph (liftM Set.toList . flip graphSuccessors v . pdgmDepGraph) prod+ let ni = foldl max 0 $ map (\x -> case x `lookup` vis of { Just i -> i + 1; Nothing -> 0 }) succs+ return (v,ni)+ else return (v,i)+ -- Add all synthesized attributes that are also ready but are not needed+ allpreds <- forM vis2 $ \(v,i) -> do+ if isChildInh v+ then do+ preds <- onMarkedDepGraph (liftM Set.toList . flip graphPredecessors v . pdgmDepGraph) prod+ return $ Set.fromList $ filter isChildSyn preds+ else return Set.empty+ lextravis <- mapM (\v -> do ready <- isReadyVertex prod vis2 v+ return $ do i <- ready+ return (v,i)) $ Set.toList $ Set.unions allpreds+ let extravis = catMaybes lextravis+ setDepGraphVerticesFinal prod (map fst extravis)+ -- Group by visit number and do visit for every num+ let gvis = groupSortBy (comparing snd) $ vis2 ++ extravis+ forM_ gvis $ \visit -> do+ -- Split child visits from rules+ let (chattrs, rules) = partition isChildAttr $ map fst visit+ -- Evaluate all rules+ forM_ (reverse $ rules) $ \rule ->+ case rule of + VRule r -> addVisitStep prod $ Sem r+ VChild c -> addVisitStep prod $ ChildIntro c+ _ -> return ()+ -- Now group by child, and do a visit for each child+ let chs = groupSortBy (comparing getAttrChildName) $ chattrs+ chvs <- forM chs $ \childvs -> do -- childs :: [Vertex]+ let cinhs = map getAttrName $ filter isChildInh childvs+ let csyns = map getAttrName $ filter isChildSyn childvs+ let cname = getAttrChildName $ head childvs+ -- Insert a new pending edge for this visit+ curstate <- getChildState prod cname+ target <- createPending curstate (Set.fromList cinhs) (Set.fromList csyns)+ addChildVisit prod cname target+ -- Add child visits as simultanuous step+ when (length chvs > 0) $ do+ addVisitStep prod $ Sim chvs+ -- Mark this edge as final+ markFinal pend+ -- We are done+ traceVG "Done."+ return initvs++-- | groupBy that groups all equal (according to the function) elements instead of consequtive equal elements+groupSortBy :: (a -> a -> Ordering) -> [a] -> [[a]]+groupSortBy f = groupBy (\x y -> f x y == EQ) . sortBy f++type ChildVisits = [(Vertex,Int)]++-- | Helper function for folding over child visits+foldChildVisits :: VGProd -> (ChildVisits, Int) -> Vertex -> VG s (ChildVisits, Int)+foldChildVisits prod (vis,i) v = do+ (nvis,ni) <- findChildVisits prod v vis+ return (nvis, ni `max` i)++-- | Recursively find all visits to childs+findChildVisits :: VGProd -> Vertex -> ChildVisits -> VG s (ChildVisits, Int)+findChildVisits prod v vis = do+ case lookup v vis of+ Just i -> return (vis,i)+ Nothing -> do+ final <- isDepGraphVertexFinal prod v+ if final+ then return (vis,0)+ else do+ successors <- onMarkedDepGraph (liftM Set.toList . flip graphSuccessors v . pdgmDepGraph) prod+ (nvis,ni) <- foldM (foldChildVisits prod) (vis,0) successors+ if isChildSyn v+ then return ((v,ni + 1) : nvis, ni + 1)+ else return ((v,ni) : nvis, ni)++-- | Check if a vertex can be marked final in this step (and is not final yet) and return the visit num+isReadyVertex :: VGProd -> ChildVisits -> Vertex -> VG s (Maybe Int)+isReadyVertex prod vis v = do + final <- isDepGraphVertexFinal prod v+ if v `elem` (map fst vis) || final+ then return Nothing+ else do+ succ <- onMarkedDepGraph (flip graphSuccessors v . pdgmDepGraph) prod+ rd <- mapM (\x -> do case lookup x vis of + Just i -> return $ Just i+ Nothing -> do fin <- isDepGraphVertexFinal prod x+ return $ if fin then Just 1 else Nothing) (Set.toList succ)+ if all isJust rd+ then return $ Just $ foldl1 max $ catMaybes rd+ else return $ Nothing++-- | Check if this vertex is a synthesized attribute of a child+isChildSyn :: Vertex -> Bool+isChildSyn v = isChildAttr v && getAttrType v == Syn++-- | Check if this vertex is an inherited attribute of a child+isChildInh :: Vertex -> Bool+isChildInh v = isChildAttr v && getAttrType v == Inh++-- | Check if this vertex is an attribute of a child+isChildAttr :: Vertex -> Bool+isChildAttr v = isVertexAttr v && getAttrChildName v /= _LHS && getAttrType v /= Loc++------------------------------------------------------------+--- Construction of the execution plan ---+------------------------------------------------------------+kennedyWarrenExecutionPlan :: [NontDependencyInformationM s] -> [Maybe Int] -> Set.Set NontermIdent+ -> TypeSyns -> VG s ExecutionPlan+kennedyWarrenExecutionPlan ndis initvs wr typesyns = do+ -- Loop over all nonterminals+ nonts <- forM (zip ndis initvs) $ \(ndi, initv) -> do+ -- Loop over all productions of this nonterminal+ prods <- forM (ndimProds ndi) $ \prod -> do+ -- Construct the visits for this production+ let inont = ndiNonterminal $ ndimOrig ndi+ let iprod = pdgProduction $ pdgmOrig prod+ prodvs <- gets vgProdVisits+ let thisvisits = filter (\((int,ipr,_),_) -> int == inont && ipr == iprod) $ Map.toList prodvs+ visits <- forM thisvisits $ \((_,_,vgedg@(VGEdge edg)),rprodvs) -> do+ edges <- gets vgEdges+ let (VGNode fr, VGNode to) = imLookup edg edges+ steps <- vgInST $ readSTRef rprodvs+ inh <- getInherited vgedg+ syn <- getSynthesized vgedg+ return $ Visit edg fr to inh syn steps+ -- Return execution plan for this production+ return $ EProduction (pdgProduction $ pdgmOrig prod)+ (pdgRules $ pdgmOrig prod)+ (pdgChilds $ pdgmOrig prod)+ visits+ -- Find initial state for this nonterminal+ VGNode init <- vgFindInitial $ ndiNonterminal $ ndimOrig ndi+ -- Return execution plan for this nonterminal+ return $ ENonterminal (ndiNonterminal $ ndimOrig ndi)+ (ndiParams $ ndimOrig ndi)+ init+ initv+ prods+ -- Return complete execution plan+ return $ ExecutionPlan nonts typesyns wr
src/Knuth1.hs view
@@ -1,6 +1,7 @@ module Knuth1 where import Pretty+import ExecutionPlan import CommonTypes import Control.Monad import Control.Monad.ST@@ -93,13 +94,17 @@ -- Insert all initial edges graphInsertEdgesTRC g es return g- -- | Return all successors of a vertex graphSuccessors :: DependencyGraph s -> Vertex -> ST s (Set.Set Vertex) graphSuccessors g v = do sucs <- readSTRef $ (successors g) Array.! (graphGetIVertex g v) return $ Set.map (graphGetVertex g) sucs +-- | Return all predecessors of a vertex+graphPredecessors :: DependencyGraph s -> Vertex -> ST s (Set.Set Vertex)+graphPredecessors g v = do sucs <- readSTRef $ (predecessors g) Array.! (graphGetIVertex g v)+ return $ Set.map (graphGetVertex g) sucs+ -- | Check if the graph contains an edge graphContainsEdge :: DependencyGraph s -> Edge -> ST s Bool graphContainsEdge g (v1,v2) = do let iv1 = graphGetIVertex g v1@@ -107,8 +112,7 @@ sucs <- readSTRef $ (successors g) Array.! iv1 return $ iv2 `Set.member` sucs --- | Insert an edge in a transtive closed graph and return all other edges that were--- added due to transtivity+-- | Insert an edge in the graph graphInsert :: DependencyGraph s -> Edge -> ST s () graphInsert g (v1,v2) = do let iv1 = graphGetIVertex g v1 let iv2 = graphGetIVertex g v2@@ -164,6 +168,10 @@ return $ map ((,) rv . graphGetVertex g) sucl return $ concat perv +-- | Insert a list of edges in the graph+graphInsertEdges :: DependencyGraph s -> [Edge] -> ST s ()+graphInsertEdges g ed = mapM_ (graphInsert g) ed+ -- | Insert a list of edges in the graph and return all other edges that -- were added due to transitivity graphInsertEdgesTRC :: DependencyGraph s -> [Edge] -> ST s [Edge]@@ -225,6 +233,26 @@ return $ and $ r1 ++ r2 return $ and $ ret +-- | Add edges to the graph so that it is topologically sorted (this will not work if graph is cyclic)+graphTopSort :: DependencyGraph s -> ST s [Edge]+graphTopSort g = do let vs = Array.indices $ vertexOMap g+ order <- foldM (graphTopSort' g) [] vs+ mb <- forM (zip order (tail order)) $ \(v1,v2) -> do+ let edg = graphGetEdge g (v2,v1) -- order is actually reverse order+ ce <- graphContainsEdge g edg+ if ce+ then return Nothing + else do graphInsert g edg+ return $ Just edg+ return $ catMaybes mb++-- | Helper function for graphTopSort+graphTopSort' :: DependencyGraph s -> [IVertex] -> IVertex -> ST s [IVertex]+graphTopSort' g prev cur | cur `elem` prev = return prev+ | otherwise = do pred <- readSTRef $ (predecessors g) Array.! cur+ order <- foldM (graphTopSort' g) prev $ Set.toList pred+ return $ cur : order+ ------------------------------------------------------------------------------- -- Dependency graph information wrappers -------------------------------------------------------------------------------@@ -236,12 +264,15 @@ -- | Special wrapper for production dependency graphs, including mapping between child names and nonterminals data ProdDependencyGraph = ProdDependencyGraph { pdgVertices :: [Vertex] , pdgEdges :: [Edge]+ , pdgRules :: ERules+ , pdgChilds :: EChildren , pdgProduction :: Identifier , pdgChildMap :: [(Identifier, Identifier)] } -- | Represent all information from the dependency graphs for a nonterminal data NontDependencyInformation = NontDependencyInformation { ndiNonterminal :: Identifier+ , ndiParams :: [Identifier] , ndiInh :: [Identifier] , ndiSyn :: [Identifier] , ndiDepGraph :: NontDependencyGraph@@ -289,18 +320,32 @@ , ndimDepGraph = dg , ndimProds = prods } --- | Construct the production graphs from the +-- | Construct the production graphs from the transitivelly closed graphs undoTransitiveClosure :: [NontDependencyInformationM s] -> ST s [NontDependencyInformationM s] undoTransitiveClosure ndis = do edgesl <- mapM (\ndi -> graphEdges (ndgmDepGraph $ ndimDepGraph ndi)) ndis let edges = concat edgesl forM ndis $ \ndi -> do prods <- mapM (mkProdDependencyGraphM False) (ndiProds $ ndimOrig ndi)- let ret = NontDependencyInformationM { ndimOrig = ndimOrig ndi- , ndimDepGraph = ndimDepGraph ndi- , ndimProds = prods }- addNontProd False (edges, ret)- return ret+ forM_ (zip prods (ndimProds ndi)) $ \(nprod,oprod) -> do+ -- All possible edges+ let possa = do (v1,v2) <- edges+ -- Take a child of this nonterminal type+ guard $ isVertexAttr v1+ guard $ isVertexAttr v2+ let tp = getAttrChildName v1+ (ch,chtp) <- pdgChildMap $ pdgmOrig nprod+ guard $ tp == chtp+ -- Construct edge as it should be in the production graph+ let nv1 = setAttrChildName v1 ch+ let nv2 = setAttrChildName v2 ch+ return (nv1, nv2)+ toadd <- filterM (graphContainsEdge (pdgmDepGraph oprod)) possa+ graphInsertEdges (pdgmDepGraph nprod) toadd+ return $ NontDependencyInformationM { ndimOrig = ndimOrig ndi+ , ndimDepGraph = ndimDepGraph ndi+ , ndimProds = prods } + ------------------------------------------------------------------------------- -- Knuth-1 algorithm -------------------------------------------------------------------------------@@ -308,29 +353,33 @@ -- | Combine the dependency and nonterminal graphs using Knuth-1 -- this function assumes that the nonterminal graphs initially contains no edges knuth1 :: [NontDependencyInformationM s] -> ST s ()-knuth1 ndis = do -- Create initial list of pending edges for each ndi (just all edges of the production graphs)- let ipending :: NontDependencyInformationM s -> ST s [Edge]- ipending = liftM concat . mapM (graphEdges . pdgmDepGraph) . ndimProds--- pndis :: [([Edge], NontDependencyInformation)]+knuth1 ndis = do -- Create initial list of pending edges for each ndi per production (initially all prod edges)+ let ipending :: NontDependencyInformationM s -> ST s [[Edge]]+ ipending = mapM (graphEdges . pdgmDepGraph) . ndimProds+-- pndis :: [([[Edge]], NontDependencyInformation)] pndis <- mapM (\ndi -> liftM2 (,) (ipending ndi) (return ndi)) ndis knuth1' pndis -- | Helper function for |knuth1| which repeats the process until we are done-knuth1' :: [([Edge], NontDependencyInformationM s)] -> ST s ()+knuth1' :: [([[Edge]], NontDependencyInformationM s)] -> ST s () knuth1' ndis = do -- Add edges from the production graphs to the nonterminal graph -- ndis' :: [Maybe [Edge]] ndis' <- mapM addProdNont ndis -- List of all newly added edges -- ntedge :: [Edge]- let ntedge = concatMap (\x -> maybe [] id x) ndis'+ let pntedge = concatMap (\x -> maybe [] id x) ndis'+ -- Add backedges+ bedges <- addBackEdges ndis+ -- All added nonterminal edges+ let ntedge = pntedge ++ bedges if null ntedge -- When no new edges have been added we are done then return () else do -- Otherwise, the next step is to add edges from nonterminal to production graphs--- ndis'' :: [Maybe [Edge]]+-- ndis'' :: [Maybe [[Edge]]] ndis'' <- mapM (\(_,x) -> addNontProd True (ntedge, x)) ndis -- List of new states (production edges + dependency graphs)--- nndis' :: [([Edge], NontDependencyInformation)]+-- nndis' :: [([[Edge]], NontDependencyInformation)] nndis' <- zipWithM (\(_,ndi) me -> return (maybe [] id me, ndi)) ndis ndis'' if any isJust ndis'' -- We have added some edges, so continue the process@@ -340,12 +389,12 @@ -- | Add pending edges from the production graphs to the nonterminal graph, return Nothing if none were added -- otherwise, return the list of newly added nonterminal edges-addProdNont :: ([Edge], NontDependencyInformationM s) -> ST s (Maybe [Edge])+addProdNont :: ([[Edge]], NontDependencyInformationM s) -> ST s (Maybe [Edge]) addProdNont (pending, ndi) = do -- Unwrapping of the records let nontDepGraph = ndimDepGraph ndi let nontGraph = ndgmDepGraph nontDepGraph -- nub the list because multiple productions can result in the same new edges- let possa = nub $ do (v1,v2) <- pending+ let possa = nub $ do (v1,v2) <- concat pending -- Take only edges from syn.lhs to inh.lhs guard $ isVertexAttr v1 guard $ getAttrChildName v1 == _LHS@@ -369,13 +418,13 @@ -- | Add edges from the nonterminal graphs to the production graphs, return Nothing if none were added -- otherwise, return the list of newly added production edges and the updated graph-addNontProd :: Bool -> ([Edge], NontDependencyInformationM s) -> ST s (Maybe [Edge])+addNontProd :: Bool -> ([Edge], NontDependencyInformationM s) -> ST s (Maybe [[Edge]]) addNontProd trc (pending, ndi) = do -- Call the helper function for each nonterminal prods' <- mapM (addNontProd' trc pending) (ndimProds ndi) -- Check if any edges were added if any isJust prods' then -- Return list of newly created edges- return $ Just $ concatMap (maybe [] id) prods'+ return $ Just $ map (maybe [] id) prods' else return Nothing -- | Helper function for |addNontProd| for a single production@@ -409,13 +458,12 @@ return $ Just ret -- | Add the "back edges" to the nonterminal graphs for creating a global ordering-addBackEdges :: [NontDependencyInformationM s] -> ST s ()-addBackEdges ndis = do -- gather all back edges- lBackEdges <- forM ndis $ \ndi -> do+addBackEdges :: [([[Edge]], NontDependencyInformationM s)] -> ST s [Edge]+addBackEdges ndis = do -- gather all backedges+ lBackEdges <- forM ndis $ \(aedg,ndi) -> do -- For every production- bs <- forM (ndimProds ndi) $ \prod -> do- -- Go through all edges- edg <- graphEdges . pdgmDepGraph $ prod+ bs <- forM (zip aedg (ndimProds ndi)) $ \(edg,prod) -> do+ -- Filter out the backedges return $ do (v1,v2) <- edg -- Backedges are from inh.ch to syn.ch guard $ isVertexAttr v1@@ -433,13 +481,39 @@ let nv1 = setAttrChildName v1 chtp let nv2 = setAttrChildName v2 chtp return (nv1, nv2)- return $ concat bs+ return $ foldl' union [] bs -- Concatenate all lists of backedges- let backedges = concat lBackEdges- -- Now add backedges to every nonterminal graph- forM_ ndis $ \ndi -> do+ let backedges = foldl' union [] lBackEdges+ -- Add backedges to every nonterminal graph+ ret <- forM ndis $ \(_,ndi) -> do -- Find the backedges for this nonterminal let nont = ndiNonterminal . ndimOrig $ ndi let thisbe = filter ((==) nont . getAttrChildName . fst) backedges -- Add them to the graph graphInsertEdgesTRC (ndgmDepGraph . ndimDepGraph $ ndi) thisbe+ return $ backedges ++ concat ret+++-- | Add all resulting edges from a topsort on the nonterminal graph to the production graph+-- this will ignore edges that will make the graph cyclic+addTopSortEdges :: [Edge] -> ProdDependencyGraphM s -> ST s ()+addTopSortEdges pend pdg = do -- Unwrapping of the records+ prodGraph <- return $ pdgmDepGraph pdg+ -- Construct all possible new edges+ let possa = do (v1,v2) <- pend+ -- Take a child of this nonterminal type+ guard $ isVertexAttr v1+ guard $ isVertexAttr v2+ let tp = getAttrChildName v1+ (ch,chtp) <- pdgChildMap $ pdgmOrig pdg+ guard $ tp == chtp+ -- Construct edge as it should be in the production graph+ let nv1 = setAttrChildName v1 ch+ let nv2 = setAttrChildName v2 ch+ return (nv1, nv2)+ -- Edges that are not in the production graph yet+ forM_ possa $ \(v1,v2) -> do e1 <- graphContainsEdge prodGraph (v1,v2)+ e2 <- graphContainsEdge prodGraph (v2,v1)+ when (not $ e1 || e2) $ do+ graphInsertTRC prodGraph (v1,v2)+ return ()
src/Version.hs view
@@ -1,4 +1,4 @@ module Version where banner :: String -banner = "Attribute Grammar compiler / HUT project. Version 0.9.38.5" +banner = "Attribute Grammar compiler / HUT project. Version 0.9.38.6"
uuagc.cabal view
@@ -1,7 +1,7 @@ cabal-version: >=1.2 build-type: Simple name: uuagc-version: 0.9.38.5+version: 0.9.38.6 license: GPL license-file: LICENSE maintainer: Arie Middelkoop <ariem@cs.uu.nl>@@ -80,6 +80,8 @@ , Knuth1 , KennedyWarren , KWOrder+ , ExecutionPlan+ , ExecutionPlan2Hs extensions: TypeSynonymInstances, MultiParamTypeClasses hs-source-dirs: src, src-derived
uuagc.cabal-for-ghc-6.6 view
@@ -1,5 +1,5 @@ name: uuagc-version: 0.9.38.5+version: 0.9.38.6 license: GPL license-file: LICENSE maintainer: Arie Middelkoop <ariem@cs.uu.nl>