packages feed

uuagc-0.9.38.6: src-derived/ExecutionPlan2Hs.hs


-- 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))) )