packages feed

uuagc-bootstrap-0.9.38.6.2: src-derived/ExecutionPlan2Hs.hs


-- UUAGC 0.9.38.6 (ExecutionPlan2Hs.ag)
module ExecutionPlan2Hs where
{-# LINE 7 "ExecutionPlan2Hs.ag" #-}

import ExecutionPlan
import Pretty
import PPUtil
import Options
import Data.Maybe
import Debug.Trace
import System.IO
import System.Directory

import TokenDef
import HsToken

import qualified Data.Set as Set
import qualified Data.Map as Map
{-# LINE 22 "../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 32 "../src-derived/ExecutionPlan2Hs.hs" #-}

{-# LINE 2 "./Patterns.ag" #-}

-- Patterns.ag imports
import UU.Scanner.Position(Pos)
import CommonTypes (ConstructorIdent,Identifier)
{-# LINE 39 "../src-derived/ExecutionPlan2Hs.hs" #-}

{-# LINE 2 "./Expression.ag" #-}

import UU.Scanner.Position(Pos)
import HsToken
{-# LINE 45 "../src-derived/ExecutionPlan2Hs.hs" #-}

{-# LINE 2 "./HsToken.ag" #-}

import CommonTypes
import UU.Scanner.Position(Pos)
{-# LINE 51 "../src-derived/ExecutionPlan2Hs.hs" #-}
{-# LINE 204 "ExecutionPlan2Hs.ag" #-}
type VisitStateState = (VisitIdentifier,StateIdentifier, StateIdentifier)
{-# LINE 54 "../src-derived/ExecutionPlan2Hs.hs" #-}

{-# LINE 475 "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 60 "../src-derived/ExecutionPlan2Hs.hs" #-}

{-# LINE 644 "ExecutionPlan2Hs.ag" #-}

renderDocs :: [PP_Doc] -> String
renderDocs pps = foldr (.) id (map (\d -> (disp d 50000) . ( '\n':) ) pps) ""

writeModule :: FilePath -> [PP_Doc] -> IO ()
writeModule path docs
  = do bExists <- doesFileExist path
       if bExists
        then do input <- readFile path
                seq (length input) (return ())
                if input /= output
                 then dumpIt
                 else return ()
        else dumpIt
  where
    output = renderDocs docs
    dumpIt = writeFile path output
{-# LINE 80 "../src-derived/ExecutionPlan2Hs.hs" #-}
-- EChild ------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         nt                   : NontermIdent
         options              : Options
      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 addStrict   : _
            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 ->
                              Options ->
                              ( (  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,options_Inh_EChild :: Options}
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 _lhsIoptions )  =
    (let ( _lhsOargnames,_lhsOargnamesw,_lhsOargtps,_lhsOchildintros,_lhsOdatatype,_lhsOterminaldefs) = sem _lhsInt _lhsIoptions 
     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
                 _lhsIoptions ->
                   (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 127, column 12)
                        _lhsOdatatype =
                            ({-# LINE 127 "ExecutionPlan2Hs.ag" #-}
                             if isJust virtual_
                             then empty
                             else _addStrict     $ pp_parens $ typeToHaskellString (Just _lhsInt) [] tp_
                             {-# LINE 139 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- "ExecutionPlan2Hs.ag"(line 130, column 12)
                        _addStrict =
                            ({-# LINE 130 "ExecutionPlan2Hs.ag" #-}
                             \x -> if strictData _lhsIoptions then "!" >|< x else x
                             {-# LINE 145 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- "ExecutionPlan2Hs.ag"(line 177, column 12)
                        _lhsOargnamesw =
                            ({-# LINE 177 "ExecutionPlan2Hs.ag" #-}
                             if isJust virtual_
                             then empty
                             else if isNonterminal tp_
                                  then "(" >#< "sem_" >|< extractNonterminal tp_ >#< "field_" >|< name_ >#< ")"
                                  else text $ locname name_
                             {-# LINE 155 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- "ExecutionPlan2Hs.ag"(line 324, column 12)
                        _lhsOargtps =
                            ({-# LINE 324 "ExecutionPlan2Hs.ag" #-}
                             if isJust virtual_
                             then empty
                             else if isNonterminal tp_
                                  then ("T_" >|< extractNonterminal tp_) >#< "->"
                                  else (text $ show tp_) >#< "->"
                             {-# LINE 165 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- "ExecutionPlan2Hs.ag"(line 329, column 12)
                        _argnames =
                            ({-# LINE 329 "ExecutionPlan2Hs.ag" #-}
                             if isJust virtual_
                             then empty
                             else if isNonterminal tp_
                                  then "field_" >|< name_
                                  else text $ locname name_
                             {-# LINE 175 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- "ExecutionPlan2Hs.ag"(line 390, column 12)
                        _lhsOchildintros =
                            ({-# LINE 390 "ExecutionPlan2Hs.ag" #-}
                             Map.singleton name_ $ locname name_ >#< "<-" >#< "return" >#< "$" >#<
                             if isJust virtual_
                             then "sem_" >|< extractNonterminal tp_ >#< instname name_
                             else "field_" >|< name_
                             {-# LINE 184 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- "ExecutionPlan2Hs.ag"(line 486, column 12)
                        _lhsOterminaldefs =
                            ({-# LINE 486 "ExecutionPlan2Hs.ag" #-}
                             if isJust virtual_ || isNonterminal tp_
                             then Set.empty
                             else Set.singleton $ locname name_
                             {-# LINE 192 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- copy rule (from local)
                        _lhsOargnames =
                            ({-# LINE 319 "ExecutionPlan2Hs.ag" #-}
                             _argnames
                             {-# LINE 198 "ExecutionPlan2Hs.hs" #-}
                             )
                    in  ( _lhsOargnames,_lhsOargnamesw,_lhsOargtps,_lhsOchildintros,_lhsOdatatype,_lhsOterminaldefs))) )
-- EChildren ---------------------------------------------------
{-
   visit 0:
      inherited attributes:
         nt                   : NontermIdent
         options              : Options
      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 ->
                                    Options ->
                                    ( ( [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,options_Inh_EChildren :: Options}
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 _lhsIoptions )  =
    (let ( _lhsOargnames,_lhsOargnamesw,_lhsOargtps,_lhsOchildintros,_lhsOdatatype,_lhsOterminaldefs) = sem _lhsInt _lhsIoptions 
     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
                    _lhsIoptions ->
                      (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
                           _hdOoptions :: Options
                           _tlOnt :: NontermIdent
                           _tlOoptions :: Options
                           _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 321, column 31)
                           _lhsOargnames =
                               ({-# LINE 321 "ExecutionPlan2Hs.ag" #-}
                                _hdIargnames : _tlIargnames
                                {-# LINE 269 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- use rule "ExecutionPlan2Hs.ag"(line 174, column 32)
                           _lhsOargnamesw =
                               ({-# LINE 174 "ExecutionPlan2Hs.ag" #-}
                                _hdIargnamesw : _tlIargnamesw
                                {-# LINE 275 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- use rule "ExecutionPlan2Hs.ag"(line 320, column 31)
                           _lhsOargtps =
                               ({-# LINE 320 "ExecutionPlan2Hs.ag" #-}
                                _hdIargtps : _tlIargtps
                                {-# LINE 281 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- use rule "ExecutionPlan2Hs.ag"(line 381, column 41)
                           _lhsOchildintros =
                               ({-# LINE 381 "ExecutionPlan2Hs.ag" #-}
                                _hdIchildintros `Map.union` _tlIchildintros
                                {-# LINE 287 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- use rule "ExecutionPlan2Hs.ag"(line 124, column 51)
                           _lhsOdatatype =
                               ({-# LINE 124 "ExecutionPlan2Hs.ag" #-}
                                _hdIdatatype : _tlIdatatype
                                {-# LINE 293 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- use rule "ExecutionPlan2Hs.ag"(line 483, column 42)
                           _lhsOterminaldefs =
                               ({-# LINE 483 "ExecutionPlan2Hs.ag" #-}
                                _hdIterminaldefs `Set.union` _tlIterminaldefs
                                {-# LINE 299 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- copy rule (down)
                           _hdOnt =
                               ({-# LINE 123 "ExecutionPlan2Hs.ag" #-}
                                _lhsInt
                                {-# LINE 305 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- copy rule (down)
                           _hdOoptions =
                               ({-# LINE 41 "ExecutionPlan2Hs.ag" #-}
                                _lhsIoptions
                                {-# LINE 311 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- copy rule (down)
                           _tlOnt =
                               ({-# LINE 124 "ExecutionPlan2Hs.ag" #-}
                                _lhsInt
                                {-# LINE 317 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- copy rule (down)
                           _tlOoptions =
                               ({-# LINE 41 "ExecutionPlan2Hs.ag" #-}
                                _lhsIoptions
                                {-# LINE 323 "ExecutionPlan2Hs.hs" #-}
                                )
                           ( _hdIargnames,_hdIargnamesw,_hdIargtps,_hdIchildintros,_hdIdatatype,_hdIterminaldefs) =
                               hd_ _hdOnt _hdOoptions 
                           ( _tlIargnames,_tlIargnamesw,_tlIargtps,_tlIchildintros,_tlIdatatype,_tlIterminaldefs) =
                               tl_ _tlOnt _tlOoptions 
                       in  ( _lhsOargnames,_lhsOargnamesw,_lhsOargtps,_lhsOchildintros,_lhsOdatatype,_lhsOterminaldefs))) )
sem_EChildren_Nil :: T_EChildren 
sem_EChildren_Nil  =
    (T_EChildren (\ _lhsInt
                    _lhsIoptions ->
                      (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 321, column 31)
                           _lhsOargnames =
                               ({-# LINE 321 "ExecutionPlan2Hs.ag" #-}
                                []
                                {-# LINE 344 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- use rule "ExecutionPlan2Hs.ag"(line 174, column 32)
                           _lhsOargnamesw =
                               ({-# LINE 174 "ExecutionPlan2Hs.ag" #-}
                                []
                                {-# LINE 350 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- use rule "ExecutionPlan2Hs.ag"(line 320, column 31)
                           _lhsOargtps =
                               ({-# LINE 320 "ExecutionPlan2Hs.ag" #-}
                                []
                                {-# LINE 356 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- use rule "ExecutionPlan2Hs.ag"(line 381, column 41)
                           _lhsOchildintros =
                               ({-# LINE 381 "ExecutionPlan2Hs.ag" #-}
                                Map.empty
                                {-# LINE 362 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- use rule "ExecutionPlan2Hs.ag"(line 124, column 51)
                           _lhsOdatatype =
                               ({-# LINE 124 "ExecutionPlan2Hs.ag" #-}
                                []
                                {-# LINE 368 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- use rule "ExecutionPlan2Hs.ag"(line 483, column 42)
                           _lhsOterminaldefs =
                               ({-# LINE 483 "ExecutionPlan2Hs.ag" #-}
                                Set.empty
                                {-# LINE 374 "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)
         derivings            : Derivings
         importBlocks         : PP_Doc
         inhmap               : Map.Map NontermIdent Attributes
         mainFile             : String
         mainName             : String
         moduleHeader         : String -> String -> String -> Bool -> String
         options              : Options
         optionsLine          : String
         pragmaBlocks         : String
         synmap               : Map.Map NontermIdent Attributes
         textBlocks           : PP_Doc
         typeSyns             : TypeSyns
         wrappers             : Set.Set NontermIdent
      synthesized attributes:
         appendCommon         :  PP_Doc 
         appendMain           :  PP_Doc 
         childvisit           : Map.Map VisitIdentifier (Identifier -> PP_Doc)
         genProdIO            : IO ()
         imports              : [PP_Doc]
         output               : 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 derivings   : _
            local fsemname    : _
            local semname     : _
            local frecarg     : _
            local sem_nt      : _
            local outedges    : _
            local inedges     : _
            local allstates   : _
            local t_type      : _
            local t_init      : _
            local t_states    : _
            local k_type      : _
            local k_states    : _
            local wr_inh      : _
            local wr_syn      : _
            local genwrap     : _
            local wr_inhs     : _
            local wr_syns     : _
            local inhlist     : _
            local synlist     : _
            local wrapname    : _
            local inhname     : _
            local synname     : _
            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)) ->
                                          Derivings ->
                                          PP_Doc ->
                                          (Map.Map NontermIdent Attributes) ->
                                          String ->
                                          String ->
                                          (String -> String -> String -> Bool -> String) ->
                                          Options ->
                                          String ->
                                          String ->
                                          (Map.Map NontermIdent Attributes) ->
                                          PP_Doc ->
                                          TypeSyns ->
                                          (Set.Set NontermIdent) ->
                                          ( ( PP_Doc ),( PP_Doc ),(Map.Map VisitIdentifier (Identifier -> PP_Doc)),(IO ()),([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)),derivings_Inh_ENonterminal :: Derivings,importBlocks_Inh_ENonterminal :: PP_Doc,inhmap_Inh_ENonterminal :: (Map.Map NontermIdent Attributes),mainFile_Inh_ENonterminal :: String,mainName_Inh_ENonterminal :: String,moduleHeader_Inh_ENonterminal :: (String -> String -> String -> Bool -> String),options_Inh_ENonterminal :: Options,optionsLine_Inh_ENonterminal :: String,pragmaBlocks_Inh_ENonterminal :: String,synmap_Inh_ENonterminal :: (Map.Map NontermIdent Attributes),textBlocks_Inh_ENonterminal :: PP_Doc,typeSyns_Inh_ENonterminal :: TypeSyns,wrappers_Inh_ENonterminal :: (Set.Set NontermIdent)}
data Syn_ENonterminal  = Syn_ENonterminal {appendCommon_Syn_ENonterminal :: ( PP_Doc ),appendMain_Syn_ENonterminal :: ( PP_Doc ),childvisit_Syn_ENonterminal :: (Map.Map VisitIdentifier (Identifier -> PP_Doc)),genProdIO_Syn_ENonterminal :: (IO ()),imports_Syn_ENonterminal :: ([PP_Doc]),output_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 _lhsIderivings _lhsIimportBlocks _lhsIinhmap _lhsImainFile _lhsImainName _lhsImoduleHeader _lhsIoptions _lhsIoptionsLine _lhsIpragmaBlocks _lhsIsynmap _lhsItextBlocks _lhsItypeSyns _lhsIwrappers )  =
    (let ( _lhsOappendCommon,_lhsOappendMain,_lhsOchildvisit,_lhsOgenProdIO,_lhsOimports,_lhsOoutput,_lhsOvisitdefs,_lhsOvisituses) = sem _lhsIallchildvisit _lhsIavisitdefs _lhsIavisituses _lhsIderivings _lhsIimportBlocks _lhsIinhmap _lhsImainFile _lhsImainName _lhsImoduleHeader _lhsIoptions _lhsIoptionsLine _lhsIpragmaBlocks _lhsIsynmap _lhsItextBlocks _lhsItypeSyns _lhsIwrappers 
     in  (Syn_ENonterminal _lhsOappendCommon _lhsOappendMain _lhsOchildvisit _lhsOgenProdIO _lhsOimports _lhsOoutput _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
                       _lhsIderivings
                       _lhsIimportBlocks
                       _lhsIinhmap
                       _lhsImainFile
                       _lhsImainName
                       _lhsImoduleHeader
                       _lhsIoptions
                       _lhsIoptionsLine
                       _lhsIpragmaBlocks
                       _lhsIsynmap
                       _lhsItextBlocks
                       _lhsItypeSyns
                       _lhsIwrappers ->
                         (let _prodsOrename :: Bool
                              _lhsOoutput :: PP_Doc
                              _prodsOinhmap :: Attributes
                              _prodsOsynmap :: Attributes
                              _prodsOnt :: NontermIdent
                              _prodsOinitial :: StateIdentifier
                              _prodsOallstates :: (Set.Set StateIdentifier)
                              _lhsOappendMain :: ( PP_Doc )
                              _lhsOappendCommon :: ( PP_Doc )
                              _lhsOchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))
                              _lhsOgenProdIO :: (IO ())
                              _lhsOimports :: ([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))
                              _prodsOimportBlocks :: PP_Doc
                              _prodsOmainFile :: String
                              _prodsOmainName :: String
                              _prodsOmoduleHeader :: (String -> String -> String -> Bool -> String)
                              _prodsOoptions :: Options
                              _prodsOoptionsLine :: String
                              _prodsOpragmaBlocks :: String
                              _prodsOtextBlocks :: PP_Doc
                              _prodsIallvisits :: ([VisitStateState])
                              _prodsIchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))
                              _prodsIdatatype :: ([PP_Doc])
                              _prodsIgenProdIO :: (IO ())
                              _prodsIimports :: ([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 45, column 18)
                              _prodsOrename =
                                  ({-# LINE 45 "ExecutionPlan2Hs.ag" #-}
                                   rename _lhsIoptions
                                   {-# LINE 533 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 62, column 18)
                              _lhsOoutput =
                                  ({-# LINE 62 "ExecutionPlan2Hs.ag" #-}
                                   ("-- " ++ getName nt_ ++ " " ++ replicate (60 - length (getName nt_)) '-')
                                   >-< (if dataTypes _lhsIoptions
                                        then "-- data"
                                             >-< _datatype
                                             >-< ""
                                        else empty)
                                   >-< (if nt_ `Set.member` _lhsIwrappers
                                        then "-- wrapper"
                                             >-< _wr_inh
                                             >-< _wr_syn
                                             >-< _wrapper
                                             >-< ""
                                        else empty)
                                   >-< (if   folds _lhsIoptions
                                        then "-- cata"
                                             >-< _sem_nt
                                             >-< ""
                                        else empty)
                                   >-< (if   semfuns _lhsIoptions
                                        then "-- semantic domain"
                                             >-< _t_init
                                             >-< _t_states
                                             >-< _k_states
                                             >-< _prodsIt_visits
                                             >-< _prodsIsem_prod
                                             >-< ""
                                        else empty)
                                   {-# LINE 565 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 101, column 18)
                              _datatype =
                                  ({-# LINE 101 "ExecutionPlan2Hs.ag" #-}
                                   case lookup nt_ _lhsItypeSyns of
                                      Nothing -> "data" >#< nt_ >#< (vlist $ ("=" >#< head _prodsIdatatype)
                                                  : (map ("|" >#<) $ tail _prodsIdatatype)) >#< _derivings
                                      Just (List t) -> "type" >#< nt_ >#< "=" >#< "[" >#< show t >#< "]"
                                      Just (Maybe t) -> "type" >#< nt_ >#< "=" >#< "Maybe" >#< show t
                                      Just (Tuple ts) -> "type" >#< nt_ >#< "=" >#< pp_parens (ppCommas $ map (show . snd) ts)
                                      Just (Either l r) -> "type" >#< nt_ >#< "=" >#< "Either" >#< show l >#< show r
                                      Just (Map k v) -> "type" >#< nt_ >#< "=" >#< "Data.Map.Map" >#< pp_parens (show k) >#< show v
                                      Just (IntMap t) -> "type" >#< nt_ >#< "=" >#< "Data.IntMap.IntMap" >#< show t
                                   {-# LINE 579 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 111, column 18)
                              _derivings =
                                  ({-# LINE 111 "ExecutionPlan2Hs.ag" #-}
                                   case Map.lookup nt_ _lhsIderivings of
                                      Nothing -> empty
                                      Just s  -> if   Set.null s
                                                 then empty
                                                 else "deriving" >#< (pp_parens $ ppCommas $ map pp $ Set.toList s)
                                   {-# LINE 589 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 136, column 18)
                              _fsemname =
                                  ({-# LINE 136 "ExecutionPlan2Hs.ag" #-}
                                   \x -> "sem_" ++ show x
                                   {-# LINE 595 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 137, column 18)
                              _semname =
                                  ({-# LINE 137 "ExecutionPlan2Hs.ag" #-}
                                   _fsemname     nt_
                                   {-# LINE 601 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 138, column 18)
                              _frecarg =
                                  ({-# LINE 138 "ExecutionPlan2Hs.ag" #-}
                                   \t x -> case t of
                                              NT nt _ -> pp_parens (_fsemname nt >#< x)
                                              _       -> pp x
                                   {-# LINE 609 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 141, column 18)
                              _sem_nt =
                                  ({-# LINE 141 "ExecutionPlan2Hs.ag" #-}
                                   _semname     >#< "::" >#< nt_ >#< "->" >#< _t_type
                                   >-< case lookup nt_ _lhsItypeSyns of
                                          Nothing -> _prodsIsem_nt
                                          Just (List t) -> _semname     >#< "list" >#< "=" >#< "Prelude.foldr" >#< _semname     >|< "_Cons"
                                                           >#< _semname     >|< "_Nil"
                                                           >#< case t of
                                                                  NT nt _ -> pp_parens ("Prelude.map" >#< _fsemname nt >#< "list")
                                                                  _ -> pp "list"
                                          Just (Maybe t) -> _semname     >#< "Prelude.Nothing" >#< "=" >#< _semname     >|< "_Nothing"
                                                            >-< _semname     >#< pp_parens ("Prelude.Just just") >#< "="
                                                            >#< _semname     >|< "_Just" >#< _frecarg t "just"
                                          Just (Tuple ts) -> _semname     >#< pp_parens (ppCommas $ map fst ts) >#< "="
                                                             >#< _semname     >|< "_Tuple" >#< ppSpaced (map (\t -> _frecarg (snd t) (show $ fst t)) ts)
                                          Just (Either l r) -> _semname     >#< "(Prelude.Left left)" >#< "=" >#< _semname     >|< "_Left" >#< _frecarg l "left"
                                                               >-< _semname     >#< "(Prelude.Right right)" >#< "=" >#< _semname     >|< "_Right" >#< _frecarg r "right"
                                          Just (Map k v) -> _semname     >#< "m" >#< "=" >#< "Data.Map.foldrWithKey"
                                                            >#< _semname     >|< "_Entry" >#< _semname     >|< "_Nil"
                                                            >#< case v of
                                                                   NT nt _ -> pp_parens ("Data.Map.map" >#< _fsemname nt >#< "m")
                                                                   _ -> pp "m"
                                          Just (IntMap v) -> _semname     >#< "m" >#< "=" >#< "Data.IntMap.foldWithKey"
                                                             >#< _semname     >|< "_Entry" >#< _semname     >|< "_Nil"
                                                             >#< case v of
                                                                    NT nt _ -> pp_parens ("Data.IntMap.map" >#< _fsemname nt >#< "m")
                                                                    _ -> pp "m"
                                   {-# LINE 639 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 198, column 19)
                              (Just _prodsOinhmap ) =
                                  ({-# LINE 198 "ExecutionPlan2Hs.ag" #-}
                                   Map.lookup nt_ _lhsIinhmap
                                   {-# LINE 645 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 199, column 19)
                              (Just _prodsOsynmap ) =
                                  ({-# LINE 199 "ExecutionPlan2Hs.ag" #-}
                                   Map.lookup nt_ _lhsIsynmap
                                   {-# LINE 651 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 220, column 18)
                              _outedges =
                                  ({-# LINE 220 "ExecutionPlan2Hs.ag" #-}
                                   Set.fromList $ map (\(_,f,_) -> f) _prodsIallvisits
                                   {-# LINE 657 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 221, column 18)
                              _inedges =
                                  ({-# LINE 221 "ExecutionPlan2Hs.ag" #-}
                                   Set.fromList $ map (\(_,_,t) -> t) _prodsIallvisits
                                   {-# LINE 663 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 222, column 18)
                              _allstates =
                                  ({-# LINE 222 "ExecutionPlan2Hs.ag" #-}
                                   Set.insert initial_ $ _inedges     `Set.union` _outedges
                                   {-# LINE 669 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 223, column 18)
                              _t_type =
                                  ({-# LINE 223 "ExecutionPlan2Hs.ag" #-}
                                   "T_" ++ show nt_
                                   {-# LINE 675 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 224, column 18)
                              _t_init =
                                  ({-# LINE 224 "ExecutionPlan2Hs.ag" #-}
                                   "type" >#< _t_type     >#< "=" >#< _t_type     >|< "_s" >|< initial_
                                   {-# LINE 681 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 225, column 18)
                              _t_states =
                                  ({-# LINE 225 "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 >#< "::"
                                                 >#< "!" >|< pp_parens ("forall t." >#< k_st >#< "t" >#< "->" >#< "t") >#< "}"
                                                 >#< "->" >#< t_st
                                          ) $ Set.toList _allstates
                                   {-# LINE 696 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 238, column 18)
                              _k_type =
                                  ({-# LINE 238 "ExecutionPlan2Hs.ag" #-}
                                   "K_" ++ show nt_
                                   {-# LINE 702 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 239, column 18)
                              _k_states =
                                  ({-# LINE 239 "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_type     >|< "_v" >|< v >#< "::" >#< k_st >#< _t_type     >|< "_v" >|< v
                                               ) outg
                                      in  "data" >#< k_st >#< "k" >#< "where"
                                          >-< indent 3 visitlist) $ Set.toList _allstates
                                   {-# LINE 716 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 259, column 18)
                              _prodsOnt =
                                  ({-# LINE 259 "ExecutionPlan2Hs.ag" #-}
                                   nt_
                                   {-# LINE 722 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 276, column 18)
                              _wr_inh =
                                  ({-# LINE 276 "ExecutionPlan2Hs.ag" #-}
                                   _genwrap     "Inh" _wr_inhs
                                   {-# LINE 728 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 277, column 18)
                              _wr_syn =
                                  ({-# LINE 277 "ExecutionPlan2Hs.ag" #-}
                                   _genwrap     "Syn" _wr_syns
                                   {-# LINE 734 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 278, column 18)
                              _genwrap =
                                  ({-# LINE 278 "ExecutionPlan2Hs.ag" #-}
                                   \nm attr -> "data" >#< nm >|< "_" >|< nt_ >#< "=" >#< nm >|< "_" >|< nt_ >#< "{"
                                               >#< (ppCommas $ map (\(i,t) -> i >|< "_" >|< nm >|< "_" >|< nt_ >#< "::"
                                               >#< typeToHaskellString (Just nt_) [] t) attr) >#< "}"
                                   {-# LINE 742 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 281, column 18)
                              _wr_inhs =
                                  ({-# LINE 281 "ExecutionPlan2Hs.ag" #-}
                                   Map.toList $ fromJust $ Map.lookup nt_ _lhsIinhmap
                                   {-# LINE 748 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 282, column 18)
                              _wr_syns =
                                  ({-# LINE 282 "ExecutionPlan2Hs.ag" #-}
                                   Map.toList $ fromJust $ Map.lookup nt_ _lhsIsynmap
                                   {-# LINE 754 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 283, column 18)
                              _inhlist =
                                  ({-# LINE 283 "ExecutionPlan2Hs.ag" #-}
                                   map (lhsname True . fst) _wr_inhs
                                   {-# LINE 760 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 284, column 18)
                              _synlist =
                                  ({-# LINE 284 "ExecutionPlan2Hs.ag" #-}
                                   map (lhsname False . fst) _wr_syns
                                   {-# LINE 766 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 285, column 18)
                              _wrapname =
                                  ({-# LINE 285 "ExecutionPlan2Hs.ag" #-}
                                   "wrap_" ++ show nt_
                                   {-# LINE 772 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 286, column 18)
                              _inhname =
                                  ({-# LINE 286 "ExecutionPlan2Hs.ag" #-}
                                   "Inh_" ++ show nt_
                                   {-# LINE 778 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 287, column 18)
                              _synname =
                                  ({-# LINE 287 "ExecutionPlan2Hs.ag" #-}
                                   "Syn_" ++ show nt_
                                   {-# LINE 784 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 288, column 18)
                              _wrapper =
                                  ({-# LINE 288 "ExecutionPlan2Hs.ag" #-}
                                   (_wrapname     >#< "::" >#< _t_type     >#< "->"
                                    >#< _inhname     >#< "->" >#< _synname    )
                                   >-<
                                   (_wrapname     >#< "sem" >#< "(" >#< _inhname
                                    >#< ppSpaced _inhlist     >#< ")" >#< "=")
                                   >-<
                                   indent 3 (case initialv_ of
                                     Nothing -> _synname     >#< " { }"
                                     Just initv ->
                                        "let" >#< "(" >#< ppCommas _synlist     >#< "," >#< "_" >#< ")" >#< "="
                                              >#< "Control.Monad.Identity.runIdentity"
                                              >#< pp_parens ("inv_" >|< nt_ >|< "_s" >|< initial_
                                              >#< "sem" >#< _k_type     >|< "_v" >|< initv
                                              >#< ppSpaced _inhlist    )
                                        >-<
                                        "in " >#< "(" >#< _synname     >#< ppSpaced _synlist     >#< ")")
                                   {-# LINE 805 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 315, column 18)
                              _prodsOinitial =
                                  ({-# LINE 315 "ExecutionPlan2Hs.ag" #-}
                                   initial_
                                   {-# LINE 811 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 316, column 18)
                              _prodsOallstates =
                                  ({-# LINE 316 "ExecutionPlan2Hs.ag" #-}
                                   _allstates
                                   {-# LINE 817 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 613, column 18)
                              _lhsOappendMain =
                                  ({-# LINE 613 "ExecutionPlan2Hs.ag" #-}
                                   (if nt_ `Set.member` _lhsIwrappers
                                    then     _wr_inh
                                         >-< _wr_syn
                                         >-< _wrapper
                                    else empty)
                                   >-< _sem_nt
                                   {-# LINE 828 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 619, column 18)
                              _lhsOappendCommon =
                                  ({-# LINE 619 "ExecutionPlan2Hs.ag" #-}
                                   (if dataTypes _lhsIoptions then _datatype     else empty)
                                   >-< _t_init
                                   >-< _t_states
                                   >-< _k_states
                                   >-< _prodsIt_visits
                                   {-# LINE 838 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- use rule "ExecutionPlan2Hs.ag"(line 458, column 37)
                              _lhsOchildvisit =
                                  ({-# LINE 458 "ExecutionPlan2Hs.ag" #-}
                                   _prodsIchildvisit
                                   {-# LINE 844 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- use rule "ExecutionPlan2Hs.ag"(line 627, column 49)
                              _lhsOgenProdIO =
                                  ({-# LINE 627 "ExecutionPlan2Hs.ag" #-}
                                   _prodsIgenProdIO
                                   {-# LINE 850 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- use rule "ExecutionPlan2Hs.ag"(line 626, column 47)
                              _lhsOimports =
                                  ({-# LINE 626 "ExecutionPlan2Hs.ag" #-}
                                   _prodsIimports
                                   {-# LINE 856 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- use rule "ExecutionPlan2Hs.ag"(line 518, column 36)
                              _lhsOvisitdefs =
                                  ({-# LINE 518 "ExecutionPlan2Hs.ag" #-}
                                   _prodsIvisitdefs
                                   {-# LINE 862 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- use rule "ExecutionPlan2Hs.ag"(line 519, column 36)
                              _lhsOvisituses =
                                  ({-# LINE 519 "ExecutionPlan2Hs.ag" #-}
                                   _prodsIvisituses
                                   {-# LINE 868 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _prodsOallchildvisit =
                                  ({-# LINE 457 "ExecutionPlan2Hs.ag" #-}
                                   _lhsIallchildvisit
                                   {-# LINE 874 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _prodsOavisitdefs =
                                  ({-# LINE 528 "ExecutionPlan2Hs.ag" #-}
                                   _lhsIavisitdefs
                                   {-# LINE 880 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _prodsOavisituses =
                                  ({-# LINE 529 "ExecutionPlan2Hs.ag" #-}
                                   _lhsIavisituses
                                   {-# LINE 886 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _prodsOimportBlocks =
                                  ({-# LINE 25 "ExecutionPlan2Hs.ag" #-}
                                   _lhsIimportBlocks
                                   {-# LINE 892 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _prodsOmainFile =
                                  ({-# LINE 29 "ExecutionPlan2Hs.ag" #-}
                                   _lhsImainFile
                                   {-# LINE 898 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _prodsOmainName =
                                  ({-# LINE 31 "ExecutionPlan2Hs.ag" #-}
                                   _lhsImainName
                                   {-# LINE 904 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _prodsOmoduleHeader =
                                  ({-# LINE 28 "ExecutionPlan2Hs.ag" #-}
                                   _lhsImoduleHeader
                                   {-# LINE 910 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _prodsOoptions =
                                  ({-# LINE 41 "ExecutionPlan2Hs.ag" #-}
                                   _lhsIoptions
                                   {-# LINE 916 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _prodsOoptionsLine =
                                  ({-# LINE 30 "ExecutionPlan2Hs.ag" #-}
                                   _lhsIoptionsLine
                                   {-# LINE 922 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _prodsOpragmaBlocks =
                                  ({-# LINE 26 "ExecutionPlan2Hs.ag" #-}
                                   _lhsIpragmaBlocks
                                   {-# LINE 928 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _prodsOtextBlocks =
                                  ({-# LINE 27 "ExecutionPlan2Hs.ag" #-}
                                   _lhsItextBlocks
                                   {-# LINE 934 "ExecutionPlan2Hs.hs" #-}
                                   )
                              ( _prodsIallvisits,_prodsIchildvisit,_prodsIdatatype,_prodsIgenProdIO,_prodsIimports,_prodsIsem_nt,_prodsIsem_prod,_prodsIt_visits,_prodsIvisitdefs,_prodsIvisituses) =
                                  prods_ _prodsOallchildvisit _prodsOallstates _prodsOavisitdefs _prodsOavisituses _prodsOimportBlocks _prodsOinhmap _prodsOinitial _prodsOmainFile _prodsOmainName _prodsOmoduleHeader _prodsOnt _prodsOoptions _prodsOoptionsLine _prodsOpragmaBlocks _prodsOrename _prodsOsynmap _prodsOtextBlocks 
                          in  ( _lhsOappendCommon,_lhsOappendMain,_lhsOchildvisit,_lhsOgenProdIO,_lhsOimports,_lhsOoutput,_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)
         derivings            : Derivings
         importBlocks         : PP_Doc
         inhmap               : Map.Map NontermIdent Attributes
         mainFile             : String
         mainName             : String
         moduleHeader         : String -> String -> String -> Bool -> String
         options              : Options
         optionsLine          : String
         pragmaBlocks         : String
         synmap               : Map.Map NontermIdent Attributes
         textBlocks           : PP_Doc
         typeSyns             : TypeSyns
         wrappers             : Set.Set NontermIdent
      synthesized attributes:
         appendCommon         : [PP_Doc]
         appendMain           : [PP_Doc]
         childvisit           : Map.Map VisitIdentifier (Identifier -> PP_Doc)
         genProdIO            : IO ()
         imports              : [PP_Doc]
         output               : 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)) ->
                                            Derivings ->
                                            PP_Doc ->
                                            (Map.Map NontermIdent Attributes) ->
                                            String ->
                                            String ->
                                            (String -> String -> String -> Bool -> String) ->
                                            Options ->
                                            String ->
                                            String ->
                                            (Map.Map NontermIdent Attributes) ->
                                            PP_Doc ->
                                            TypeSyns ->
                                            (Set.Set NontermIdent) ->
                                            ( ([PP_Doc]),([PP_Doc]),(Map.Map VisitIdentifier (Identifier -> PP_Doc)),(IO ()),([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)),derivings_Inh_ENonterminals :: Derivings,importBlocks_Inh_ENonterminals :: PP_Doc,inhmap_Inh_ENonterminals :: (Map.Map NontermIdent Attributes),mainFile_Inh_ENonterminals :: String,mainName_Inh_ENonterminals :: String,moduleHeader_Inh_ENonterminals :: (String -> String -> String -> Bool -> String),options_Inh_ENonterminals :: Options,optionsLine_Inh_ENonterminals :: String,pragmaBlocks_Inh_ENonterminals :: String,synmap_Inh_ENonterminals :: (Map.Map NontermIdent Attributes),textBlocks_Inh_ENonterminals :: PP_Doc,typeSyns_Inh_ENonterminals :: TypeSyns,wrappers_Inh_ENonterminals :: (Set.Set NontermIdent)}
data Syn_ENonterminals  = Syn_ENonterminals {appendCommon_Syn_ENonterminals :: ([PP_Doc]),appendMain_Syn_ENonterminals :: ([PP_Doc]),childvisit_Syn_ENonterminals :: (Map.Map VisitIdentifier (Identifier -> PP_Doc)),genProdIO_Syn_ENonterminals :: (IO ()),imports_Syn_ENonterminals :: ([PP_Doc]),output_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 _lhsIderivings _lhsIimportBlocks _lhsIinhmap _lhsImainFile _lhsImainName _lhsImoduleHeader _lhsIoptions _lhsIoptionsLine _lhsIpragmaBlocks _lhsIsynmap _lhsItextBlocks _lhsItypeSyns _lhsIwrappers )  =
    (let ( _lhsOappendCommon,_lhsOappendMain,_lhsOchildvisit,_lhsOgenProdIO,_lhsOimports,_lhsOoutput,_lhsOvisitdefs,_lhsOvisituses) = sem _lhsIallchildvisit _lhsIavisitdefs _lhsIavisituses _lhsIderivings _lhsIimportBlocks _lhsIinhmap _lhsImainFile _lhsImainName _lhsImoduleHeader _lhsIoptions _lhsIoptionsLine _lhsIpragmaBlocks _lhsIsynmap _lhsItextBlocks _lhsItypeSyns _lhsIwrappers 
     in  (Syn_ENonterminals _lhsOappendCommon _lhsOappendMain _lhsOchildvisit _lhsOgenProdIO _lhsOimports _lhsOoutput _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
                        _lhsIderivings
                        _lhsIimportBlocks
                        _lhsIinhmap
                        _lhsImainFile
                        _lhsImainName
                        _lhsImoduleHeader
                        _lhsIoptions
                        _lhsIoptionsLine
                        _lhsIpragmaBlocks
                        _lhsIsynmap
                        _lhsItextBlocks
                        _lhsItypeSyns
                        _lhsIwrappers ->
                          (let _lhsOappendCommon :: ([PP_Doc])
                               _lhsOappendMain :: ([PP_Doc])
                               _lhsOchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))
                               _lhsOgenProdIO :: (IO ())
                               _lhsOimports :: ([PP_Doc])
                               _lhsOoutput :: 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))
                               _hdOderivings :: Derivings
                               _hdOimportBlocks :: PP_Doc
                               _hdOinhmap :: (Map.Map NontermIdent Attributes)
                               _hdOmainFile :: String
                               _hdOmainName :: String
                               _hdOmoduleHeader :: (String -> String -> String -> Bool -> String)
                               _hdOoptions :: Options
                               _hdOoptionsLine :: String
                               _hdOpragmaBlocks :: String
                               _hdOsynmap :: (Map.Map NontermIdent Attributes)
                               _hdOtextBlocks :: PP_Doc
                               _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))
                               _tlOderivings :: Derivings
                               _tlOimportBlocks :: PP_Doc
                               _tlOinhmap :: (Map.Map NontermIdent Attributes)
                               _tlOmainFile :: String
                               _tlOmainName :: String
                               _tlOmoduleHeader :: (String -> String -> String -> Bool -> String)
                               _tlOoptions :: Options
                               _tlOoptionsLine :: String
                               _tlOpragmaBlocks :: String
                               _tlOsynmap :: (Map.Map NontermIdent Attributes)
                               _tlOtextBlocks :: PP_Doc
                               _tlOtypeSyns :: TypeSyns
                               _tlOwrappers :: (Set.Set NontermIdent)
                               _hdIappendCommon :: ( PP_Doc )
                               _hdIappendMain :: ( PP_Doc )
                               _hdIchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))
                               _hdIgenProdIO :: (IO ())
                               _hdIimports :: ([PP_Doc])
                               _hdIoutput :: PP_Doc
                               _hdIvisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))
                               _hdIvisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))
                               _tlIappendCommon :: ([PP_Doc])
                               _tlIappendMain :: ([PP_Doc])
                               _tlIchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))
                               _tlIgenProdIO :: (IO ())
                               _tlIimports :: ([PP_Doc])
                               _tlIoutput :: PP_Doc
                               _tlIvisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))
                               _tlIvisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))
                               -- use rule "ExecutionPlan2Hs.ag"(line 610, column 51)
                               _lhsOappendCommon =
                                   ({-# LINE 610 "ExecutionPlan2Hs.ag" #-}
                                    _hdIappendCommon : _tlIappendCommon
                                    {-# LINE 1085 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- use rule "ExecutionPlan2Hs.ag"(line 610, column 51)
                               _lhsOappendMain =
                                   ({-# LINE 610 "ExecutionPlan2Hs.ag" #-}
                                    _hdIappendMain : _tlIappendMain
                                    {-# LINE 1091 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- use rule "ExecutionPlan2Hs.ag"(line 458, column 37)
                               _lhsOchildvisit =
                                   ({-# LINE 458 "ExecutionPlan2Hs.ag" #-}
                                    _hdIchildvisit `Map.union` _tlIchildvisit
                                    {-# LINE 1097 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- use rule "ExecutionPlan2Hs.ag"(line 627, column 49)
                               _lhsOgenProdIO =
                                   ({-# LINE 627 "ExecutionPlan2Hs.ag" #-}
                                    _hdIgenProdIO >> _tlIgenProdIO
                                    {-# LINE 1103 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- use rule "ExecutionPlan2Hs.ag"(line 626, column 47)
                               _lhsOimports =
                                   ({-# LINE 626 "ExecutionPlan2Hs.ag" #-}
                                    _hdIimports ++ _tlIimports
                                    {-# LINE 1109 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- use rule "ExecutionPlan2Hs.ag"(line 56, column 45)
                               _lhsOoutput =
                                   ({-# LINE 56 "ExecutionPlan2Hs.ag" #-}
                                    _hdIoutput >-< _tlIoutput
                                    {-# LINE 1115 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- use rule "ExecutionPlan2Hs.ag"(line 518, column 36)
                               _lhsOvisitdefs =
                                   ({-# LINE 518 "ExecutionPlan2Hs.ag" #-}
                                    _hdIvisitdefs `uwSetUnion` _tlIvisitdefs
                                    {-# LINE 1121 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- use rule "ExecutionPlan2Hs.ag"(line 519, column 36)
                               _lhsOvisituses =
                                   ({-# LINE 519 "ExecutionPlan2Hs.ag" #-}
                                    _hdIvisituses `uwSetUnion` _tlIvisituses
                                    {-# LINE 1127 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _hdOallchildvisit =
                                   ({-# LINE 457 "ExecutionPlan2Hs.ag" #-}
                                    _lhsIallchildvisit
                                    {-# LINE 1133 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _hdOavisitdefs =
                                   ({-# LINE 528 "ExecutionPlan2Hs.ag" #-}
                                    _lhsIavisitdefs
                                    {-# LINE 1139 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _hdOavisituses =
                                   ({-# LINE 529 "ExecutionPlan2Hs.ag" #-}
                                    _lhsIavisituses
                                    {-# LINE 1145 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _hdOderivings =
                                   ({-# LINE 94 "ExecutionPlan2Hs.ag" #-}
                                    _lhsIderivings
                                    {-# LINE 1151 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _hdOimportBlocks =
                                   ({-# LINE 25 "ExecutionPlan2Hs.ag" #-}
                                    _lhsIimportBlocks
                                    {-# LINE 1157 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _hdOinhmap =
                                   ({-# LINE 188 "ExecutionPlan2Hs.ag" #-}
                                    _lhsIinhmap
                                    {-# LINE 1163 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _hdOmainFile =
                                   ({-# LINE 29 "ExecutionPlan2Hs.ag" #-}
                                    _lhsImainFile
                                    {-# LINE 1169 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _hdOmainName =
                                   ({-# LINE 31 "ExecutionPlan2Hs.ag" #-}
                                    _lhsImainName
                                    {-# LINE 1175 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _hdOmoduleHeader =
                                   ({-# LINE 28 "ExecutionPlan2Hs.ag" #-}
                                    _lhsImoduleHeader
                                    {-# LINE 1181 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _hdOoptions =
                                   ({-# LINE 41 "ExecutionPlan2Hs.ag" #-}
                                    _lhsIoptions
                                    {-# LINE 1187 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _hdOoptionsLine =
                                   ({-# LINE 30 "ExecutionPlan2Hs.ag" #-}
                                    _lhsIoptionsLine
                                    {-# LINE 1193 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _hdOpragmaBlocks =
                                   ({-# LINE 26 "ExecutionPlan2Hs.ag" #-}
                                    _lhsIpragmaBlocks
                                    {-# LINE 1199 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _hdOsynmap =
                                   ({-# LINE 189 "ExecutionPlan2Hs.ag" #-}
                                    _lhsIsynmap
                                    {-# LINE 1205 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _hdOtextBlocks =
                                   ({-# LINE 27 "ExecutionPlan2Hs.ag" #-}
                                    _lhsItextBlocks
                                    {-# LINE 1211 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _hdOtypeSyns =
                                   ({-# LINE 93 "ExecutionPlan2Hs.ag" #-}
                                    _lhsItypeSyns
                                    {-# LINE 1217 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _hdOwrappers =
                                   ({-# LINE 55 "ExecutionPlan2Hs.ag" #-}
                                    _lhsIwrappers
                                    {-# LINE 1223 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _tlOallchildvisit =
                                   ({-# LINE 457 "ExecutionPlan2Hs.ag" #-}
                                    _lhsIallchildvisit
                                    {-# LINE 1229 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _tlOavisitdefs =
                                   ({-# LINE 528 "ExecutionPlan2Hs.ag" #-}
                                    _lhsIavisitdefs
                                    {-# LINE 1235 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _tlOavisituses =
                                   ({-# LINE 529 "ExecutionPlan2Hs.ag" #-}
                                    _lhsIavisituses
                                    {-# LINE 1241 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _tlOderivings =
                                   ({-# LINE 94 "ExecutionPlan2Hs.ag" #-}
                                    _lhsIderivings
                                    {-# LINE 1247 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _tlOimportBlocks =
                                   ({-# LINE 25 "ExecutionPlan2Hs.ag" #-}
                                    _lhsIimportBlocks
                                    {-# LINE 1253 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _tlOinhmap =
                                   ({-# LINE 188 "ExecutionPlan2Hs.ag" #-}
                                    _lhsIinhmap
                                    {-# LINE 1259 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _tlOmainFile =
                                   ({-# LINE 29 "ExecutionPlan2Hs.ag" #-}
                                    _lhsImainFile
                                    {-# LINE 1265 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _tlOmainName =
                                   ({-# LINE 31 "ExecutionPlan2Hs.ag" #-}
                                    _lhsImainName
                                    {-# LINE 1271 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _tlOmoduleHeader =
                                   ({-# LINE 28 "ExecutionPlan2Hs.ag" #-}
                                    _lhsImoduleHeader
                                    {-# LINE 1277 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _tlOoptions =
                                   ({-# LINE 41 "ExecutionPlan2Hs.ag" #-}
                                    _lhsIoptions
                                    {-# LINE 1283 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _tlOoptionsLine =
                                   ({-# LINE 30 "ExecutionPlan2Hs.ag" #-}
                                    _lhsIoptionsLine
                                    {-# LINE 1289 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _tlOpragmaBlocks =
                                   ({-# LINE 26 "ExecutionPlan2Hs.ag" #-}
                                    _lhsIpragmaBlocks
                                    {-# LINE 1295 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _tlOsynmap =
                                   ({-# LINE 189 "ExecutionPlan2Hs.ag" #-}
                                    _lhsIsynmap
                                    {-# LINE 1301 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _tlOtextBlocks =
                                   ({-# LINE 27 "ExecutionPlan2Hs.ag" #-}
                                    _lhsItextBlocks
                                    {-# LINE 1307 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _tlOtypeSyns =
                                   ({-# LINE 93 "ExecutionPlan2Hs.ag" #-}
                                    _lhsItypeSyns
                                    {-# LINE 1313 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _tlOwrappers =
                                   ({-# LINE 55 "ExecutionPlan2Hs.ag" #-}
                                    _lhsIwrappers
                                    {-# LINE 1319 "ExecutionPlan2Hs.hs" #-}
                                    )
                               ( _hdIappendCommon,_hdIappendMain,_hdIchildvisit,_hdIgenProdIO,_hdIimports,_hdIoutput,_hdIvisitdefs,_hdIvisituses) =
                                   hd_ _hdOallchildvisit _hdOavisitdefs _hdOavisituses _hdOderivings _hdOimportBlocks _hdOinhmap _hdOmainFile _hdOmainName _hdOmoduleHeader _hdOoptions _hdOoptionsLine _hdOpragmaBlocks _hdOsynmap _hdOtextBlocks _hdOtypeSyns _hdOwrappers 
                               ( _tlIappendCommon,_tlIappendMain,_tlIchildvisit,_tlIgenProdIO,_tlIimports,_tlIoutput,_tlIvisitdefs,_tlIvisituses) =
                                   tl_ _tlOallchildvisit _tlOavisitdefs _tlOavisituses _tlOderivings _tlOimportBlocks _tlOinhmap _tlOmainFile _tlOmainName _tlOmoduleHeader _tlOoptions _tlOoptionsLine _tlOpragmaBlocks _tlOsynmap _tlOtextBlocks _tlOtypeSyns _tlOwrappers 
                           in  ( _lhsOappendCommon,_lhsOappendMain,_lhsOchildvisit,_lhsOgenProdIO,_lhsOimports,_lhsOoutput,_lhsOvisitdefs,_lhsOvisituses))) )
sem_ENonterminals_Nil :: T_ENonterminals 
sem_ENonterminals_Nil  =
    (T_ENonterminals (\ _lhsIallchildvisit
                        _lhsIavisitdefs
                        _lhsIavisituses
                        _lhsIderivings
                        _lhsIimportBlocks
                        _lhsIinhmap
                        _lhsImainFile
                        _lhsImainName
                        _lhsImoduleHeader
                        _lhsIoptions
                        _lhsIoptionsLine
                        _lhsIpragmaBlocks
                        _lhsIsynmap
                        _lhsItextBlocks
                        _lhsItypeSyns
                        _lhsIwrappers ->
                          (let _lhsOappendCommon :: ([PP_Doc])
                               _lhsOappendMain :: ([PP_Doc])
                               _lhsOchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))
                               _lhsOgenProdIO :: (IO ())
                               _lhsOimports :: ([PP_Doc])
                               _lhsOoutput :: PP_Doc
                               _lhsOvisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))
                               _lhsOvisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))
                               -- use rule "ExecutionPlan2Hs.ag"(line 610, column 51)
                               _lhsOappendCommon =
                                   ({-# LINE 610 "ExecutionPlan2Hs.ag" #-}
                                    []
                                    {-# LINE 1356 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- use rule "ExecutionPlan2Hs.ag"(line 610, column 51)
                               _lhsOappendMain =
                                   ({-# LINE 610 "ExecutionPlan2Hs.ag" #-}
                                    []
                                    {-# LINE 1362 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- use rule "ExecutionPlan2Hs.ag"(line 458, column 37)
                               _lhsOchildvisit =
                                   ({-# LINE 458 "ExecutionPlan2Hs.ag" #-}
                                    Map.empty
                                    {-# LINE 1368 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- use rule "ExecutionPlan2Hs.ag"(line 627, column 49)
                               _lhsOgenProdIO =
                                   ({-# LINE 627 "ExecutionPlan2Hs.ag" #-}
                                    return ()
                                    {-# LINE 1374 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- use rule "ExecutionPlan2Hs.ag"(line 626, column 47)
                               _lhsOimports =
                                   ({-# LINE 626 "ExecutionPlan2Hs.ag" #-}
                                    []
                                    {-# LINE 1380 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- use rule "ExecutionPlan2Hs.ag"(line 56, column 45)
                               _lhsOoutput =
                                   ({-# LINE 56 "ExecutionPlan2Hs.ag" #-}
                                    empty
                                    {-# LINE 1386 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- use rule "ExecutionPlan2Hs.ag"(line 518, column 36)
                               _lhsOvisitdefs =
                                   ({-# LINE 518 "ExecutionPlan2Hs.ag" #-}
                                    Map.empty
                                    {-# LINE 1392 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- use rule "ExecutionPlan2Hs.ag"(line 519, column 36)
                               _lhsOvisituses =
                                   ({-# LINE 519 "ExecutionPlan2Hs.ag" #-}
                                    Map.empty
                                    {-# LINE 1398 "ExecutionPlan2Hs.hs" #-}
                                    )
                           in  ( _lhsOappendCommon,_lhsOappendMain,_lhsOchildvisit,_lhsOgenProdIO,_lhsOimports,_lhsOoutput,_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)
         importBlocks         : PP_Doc
         inhmap               : Attributes
         initial              : StateIdentifier
         mainFile             : String
         mainName             : String
         moduleHeader         : String -> String -> String -> Bool -> String
         nt                   : NontermIdent
         options              : Options
         optionsLine          : String
         pragmaBlocks         : String
         rename               : Bool
         synmap               : Attributes
         textBlocks           : PP_Doc
      synthesized attributes:
         allvisits            : [VisitStateState]
         childvisit           : Map.Map VisitIdentifier (Identifier -> PP_Doc)
         datatype             : PP_Doc
         genProdIO            : IO ()
         imports              : [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 semname     : _
            local sem_prod    : _
            local statefns    : _
            local stargs      : _
            local stks        : _
            local stvisits    : _
            local stvs        : _
            local moduleName  : _
            local suffix      : _
            local outputfile  : _
-}
-- 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)) ->
                                        PP_Doc ->
                                        Attributes ->
                                        StateIdentifier ->
                                        String ->
                                        String ->
                                        (String -> String -> String -> Bool -> String) ->
                                        NontermIdent ->
                                        Options ->
                                        String ->
                                        String ->
                                        Bool ->
                                        Attributes ->
                                        PP_Doc ->
                                        ( ([VisitStateState]),(Map.Map VisitIdentifier (Identifier -> PP_Doc)),PP_Doc,(IO ()),([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)),importBlocks_Inh_EProduction :: PP_Doc,inhmap_Inh_EProduction :: Attributes,initial_Inh_EProduction :: StateIdentifier,mainFile_Inh_EProduction :: String,mainName_Inh_EProduction :: String,moduleHeader_Inh_EProduction :: (String -> String -> String -> Bool -> String),nt_Inh_EProduction :: NontermIdent,options_Inh_EProduction :: Options,optionsLine_Inh_EProduction :: String,pragmaBlocks_Inh_EProduction :: String,rename_Inh_EProduction :: Bool,synmap_Inh_EProduction :: Attributes,textBlocks_Inh_EProduction :: PP_Doc}
data Syn_EProduction  = Syn_EProduction {allvisits_Syn_EProduction :: ([VisitStateState]),childvisit_Syn_EProduction :: (Map.Map VisitIdentifier (Identifier -> PP_Doc)),datatype_Syn_EProduction :: PP_Doc,genProdIO_Syn_EProduction :: (IO ()),imports_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 _lhsIimportBlocks _lhsIinhmap _lhsIinitial _lhsImainFile _lhsImainName _lhsImoduleHeader _lhsInt _lhsIoptions _lhsIoptionsLine _lhsIpragmaBlocks _lhsIrename _lhsIsynmap _lhsItextBlocks )  =
    (let ( _lhsOallvisits,_lhsOchildvisit,_lhsOdatatype,_lhsOgenProdIO,_lhsOimports,_lhsOsem_nt,_lhsOsem_prod,_lhsOt_visits,_lhsOvisitdefs,_lhsOvisituses) = sem _lhsIallchildvisit _lhsIallstates _lhsIavisitdefs _lhsIavisituses _lhsIimportBlocks _lhsIinhmap _lhsIinitial _lhsImainFile _lhsImainName _lhsImoduleHeader _lhsInt _lhsIoptions _lhsIoptionsLine _lhsIpragmaBlocks _lhsIrename _lhsIsynmap _lhsItextBlocks 
     in  (Syn_EProduction _lhsOallvisits _lhsOchildvisit _lhsOdatatype _lhsOgenProdIO _lhsOimports _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
                      _lhsIimportBlocks
                      _lhsIinhmap
                      _lhsIinitial
                      _lhsImainFile
                      _lhsImainName
                      _lhsImoduleHeader
                      _lhsInt
                      _lhsIoptions
                      _lhsIoptionsLine
                      _lhsIpragmaBlocks
                      _lhsIrename
                      _lhsIsynmap
                      _lhsItextBlocks ->
                        (let _lhsOdatatype :: PP_Doc
                             _lhsOsem_nt :: PP_Doc
                             _visitsOmrules :: (Map.Map Identifier PP_Doc)
                             _visitsOchildintros :: (Map.Map Identifier PP_Doc)
                             _rulesOusedrules :: (Set.Set Identifier)
                             _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))
                             _lhsOimports :: ([PP_Doc])
                             _lhsOgenProdIO :: (IO ())
                             _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 :: ([VisitStateState])
                             _lhsOsem_prod :: PP_Doc
                             _rulesOoptions :: Options
                             _childrenOnt :: NontermIdent
                             _childrenOoptions :: Options
                             _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
                             _visitsOoptions :: Options
                             _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 :: ([VisitStateState])
                             _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 121, column 17)
                             _lhsOdatatype =
                                 ({-# LINE 121 "ExecutionPlan2Hs.ag" #-}
                                  conname _lhsIrename _lhsInt con_ >#< ppSpaced _childrenIdatatype
                                  {-# LINE 1556 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- "ExecutionPlan2Hs.ag"(line 170, column 17)
                             _lhsOsem_nt =
                                 ({-# LINE 170 "ExecutionPlan2Hs.ag" #-}
                                  "sem_" >|< _lhsInt >#< "(" >#< conname _lhsIrename _lhsInt con_ >#< ppSpaced _childrenIargnames >#< ")"
                                  >#< "=" >#< "sem_" >|< _lhsInt >|< "_" >|< con_ >#< ppSpaced _childrenIargnamesw
                                  {-# LINE 1563 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- "ExecutionPlan2Hs.ag"(line 336, column 17)
                             _args =
                                 ({-# LINE 336 "ExecutionPlan2Hs.ag" #-}
                                  _childrenIargnames
                                  {-# LINE 1569 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- "ExecutionPlan2Hs.ag"(line 337, column 17)
                             _semname =
                                 ({-# LINE 337 "ExecutionPlan2Hs.ag" #-}
                                  "sem_" ++ show _lhsInt ++ "_" ++ show con_
                                  {-# LINE 1575 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- "ExecutionPlan2Hs.ag"(line 338, column 17)
                             _sem_prod =
                                 ({-# LINE 338 "ExecutionPlan2Hs.ag" #-}
                                  _semname     >#< "::" >#< ppSpaced _childrenIargtps >#< "T_" >|< _lhsInt
                                  >-< _semname     >#< ppSpaced _args     >#< "="
                                  >#< "st" >|< _lhsIinitial >#< "where"
                                  >-< (indent 3 $ vlist _statefns     >-< _rulesIsem_rules)
                                  {-# LINE 1584 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- "ExecutionPlan2Hs.ag"(line 342, column 17)
                             _statefns =
                                 ({-# LINE 342 "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 1593 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- "ExecutionPlan2Hs.ag"(line 346, column 17)
                             _stargs =
                                 ({-# LINE 346 "ExecutionPlan2Hs.ag" #-}
                                  \st -> ppSpaced $ Set.toList $ maybe Set.empty id $ Map.lookup st _visitsIintramap
                                  {-# LINE 1599 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- "ExecutionPlan2Hs.ag"(line 347, column 17)
                             _stks =
                                 ({-# LINE 347 "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 1610 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- "ExecutionPlan2Hs.ag"(line 353, column 17)
                             _stvisits =
                                 ({-# LINE 353 "ExecutionPlan2Hs.ag" #-}
                                  \st -> filter (\(v,f,t) -> f == st) _visitsIallvisits
                                  {-# LINE 1616 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- "ExecutionPlan2Hs.ag"(line 354, column 17)
                             _stvs =
                                 ({-# LINE 354 "ExecutionPlan2Hs.ag" #-}
                                  \st -> vlist $ map snd $ filter (\(f,pp) -> f == st) _visitsIsem_visit
                                  {-# LINE 1622 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- "ExecutionPlan2Hs.ag"(line 355, column 17)
                             _visitsOmrules =
                                 ({-# LINE 355 "ExecutionPlan2Hs.ag" #-}
                                  _rulesImrules
                                  {-# LINE 1628 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- "ExecutionPlan2Hs.ag"(line 387, column 17)
                             _visitsOchildintros =
                                 ({-# LINE 387 "ExecutionPlan2Hs.ag" #-}
                                  _childrenIchildintros
                                  {-# LINE 1634 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- "ExecutionPlan2Hs.ag"(line 403, column 17)
                             _rulesOusedrules =
                                 ({-# LINE 403 "ExecutionPlan2Hs.ag" #-}
                                  _visitsIusedrules
                                  {-# LINE 1640 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- "ExecutionPlan2Hs.ag"(line 491, column 17)
                             _visitsOallintramap =
                                 ({-# LINE 491 "ExecutionPlan2Hs.ag" #-}
                                  _visitsIintramap
                                  {-# LINE 1646 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- "ExecutionPlan2Hs.ag"(line 492, column 17)
                             _visitsOterminaldefs =
                                 ({-# LINE 492 "ExecutionPlan2Hs.ag" #-}
                                  _childrenIterminaldefs
                                  {-# LINE 1652 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- "ExecutionPlan2Hs.ag"(line 511, column 17)
                             _visitsOruledefs =
                                 ({-# LINE 511 "ExecutionPlan2Hs.ag" #-}
                                  _rulesIruledefs
                                  {-# LINE 1658 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- "ExecutionPlan2Hs.ag"(line 512, column 17)
                             _visitsOruleuses =
                                 ({-# LINE 512 "ExecutionPlan2Hs.ag" #-}
                                  _rulesIruleuses
                                  {-# LINE 1664 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- "ExecutionPlan2Hs.ag"(line 630, column 17)
                             _lhsOimports =
                                 ({-# LINE 630 "ExecutionPlan2Hs.ag" #-}
                                  [pp $ "import " ++ _moduleName    ]
                                  {-# LINE 1670 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- "ExecutionPlan2Hs.ag"(line 631, column 17)
                             _moduleName =
                                 ({-# LINE 631 "ExecutionPlan2Hs.ag" #-}
                                  _lhsImainName ++ _suffix
                                  {-# LINE 1676 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- "ExecutionPlan2Hs.ag"(line 632, column 17)
                             _suffix =
                                 ({-# LINE 632 "ExecutionPlan2Hs.ag" #-}
                                  "_" ++ show _lhsInt ++ "_" ++ show con_
                                  {-# LINE 1682 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- "ExecutionPlan2Hs.ag"(line 633, column 17)
                             _outputfile =
                                 ({-# LINE 633 "ExecutionPlan2Hs.ag" #-}
                                  _lhsImainFile ++ _suffix     ++ ".hs"
                                  {-# LINE 1688 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- "ExecutionPlan2Hs.ag"(line 634, column 17)
                             _lhsOgenProdIO =
                                 ({-# LINE 634 "ExecutionPlan2Hs.ag" #-}
                                  writeModule _outputfile
                                    [ pp "{-# LANGUAGE Rank2Types, GADTs, EmptyDataDecls #-}"
                                    , pp $ _lhsIpragmaBlocks
                                    , pp $ _lhsIoptionsLine
                                    , pp $ _lhsImoduleHeader _lhsImainName _suffix     _semname     True
                                    , pp $ "import Control.Monad.Identity"
                                    , pp $ "import " ++ _lhsImainName ++ "_common"
                                    , _sem_prod
                                    ]
                                  {-# LINE 1702 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- use rule "ExecutionPlan2Hs.ag"(line 458, column 37)
                             _lhsOchildvisit =
                                 ({-# LINE 458 "ExecutionPlan2Hs.ag" #-}
                                  _visitsIchildvisit
                                  {-# LINE 1708 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- use rule "ExecutionPlan2Hs.ag"(line 253, column 54)
                             _lhsOt_visits =
                                 ({-# LINE 253 "ExecutionPlan2Hs.ag" #-}
                                  _visitsIt_visits
                                  {-# LINE 1714 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- use rule "ExecutionPlan2Hs.ag"(line 518, column 36)
                             _lhsOvisitdefs =
                                 ({-# LINE 518 "ExecutionPlan2Hs.ag" #-}
                                  _visitsIvisitdefs
                                  {-# LINE 1720 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- use rule "ExecutionPlan2Hs.ag"(line 519, column 36)
                             _lhsOvisituses =
                                 ({-# LINE 519 "ExecutionPlan2Hs.ag" #-}
                                  _visitsIvisituses
                                  {-# LINE 1726 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- copy rule (up)
                             _lhsOallvisits =
                                 ({-# LINE 209 "ExecutionPlan2Hs.ag" #-}
                                  _visitsIallvisits
                                  {-# LINE 1732 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- copy rule (from local)
                             _lhsOsem_prod =
                                 ({-# LINE 309 "ExecutionPlan2Hs.ag" #-}
                                  _sem_prod
                                  {-# LINE 1738 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- copy rule (down)
                             _rulesOoptions =
                                 ({-# LINE 41 "ExecutionPlan2Hs.ag" #-}
                                  _lhsIoptions
                                  {-# LINE 1744 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- copy rule (down)
                             _childrenOnt =
                                 ({-# LINE 124 "ExecutionPlan2Hs.ag" #-}
                                  _lhsInt
                                  {-# LINE 1750 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- copy rule (down)
                             _childrenOoptions =
                                 ({-# LINE 41 "ExecutionPlan2Hs.ag" #-}
                                  _lhsIoptions
                                  {-# LINE 1756 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- copy rule (down)
                             _visitsOallchildvisit =
                                 ({-# LINE 457 "ExecutionPlan2Hs.ag" #-}
                                  _lhsIallchildvisit
                                  {-# LINE 1762 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- copy rule (down)
                             _visitsOavisitdefs =
                                 ({-# LINE 528 "ExecutionPlan2Hs.ag" #-}
                                  _lhsIavisitdefs
                                  {-# LINE 1768 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- copy rule (down)
                             _visitsOavisituses =
                                 ({-# LINE 529 "ExecutionPlan2Hs.ag" #-}
                                  _lhsIavisituses
                                  {-# LINE 1774 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- copy rule (down)
                             _visitsOinhmap =
                                 ({-# LINE 194 "ExecutionPlan2Hs.ag" #-}
                                  _lhsIinhmap
                                  {-# LINE 1780 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- copy rule (down)
                             _visitsOnt =
                                 ({-# LINE 253 "ExecutionPlan2Hs.ag" #-}
                                  _lhsInt
                                  {-# LINE 1786 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- copy rule (down)
                             _visitsOoptions =
                                 ({-# LINE 41 "ExecutionPlan2Hs.ag" #-}
                                  _lhsIoptions
                                  {-# LINE 1792 "ExecutionPlan2Hs.hs" #-}
                                  )
                             -- copy rule (down)
                             _visitsOsynmap =
                                 ({-# LINE 195 "ExecutionPlan2Hs.ag" #-}
                                  _lhsIsynmap
                                  {-# LINE 1798 "ExecutionPlan2Hs.hs" #-}
                                  )
                             ( _rulesImrules,_rulesIruledefs,_rulesIruleuses,_rulesIsem_rules) =
                                 rules_ _rulesOoptions _rulesOusedrules 
                             ( _childrenIargnames,_childrenIargnamesw,_childrenIargtps,_childrenIchildintros,_childrenIdatatype,_childrenIterminaldefs) =
                                 children_ _childrenOnt _childrenOoptions 
                             ( _visitsIallvisits,_visitsIchildvisit,_visitsIintramap,_visitsIsem_visit,_visitsIt_visits,_visitsIusedrules,_visitsIvisitdefs,_visitsIvisituses) =
                                 visits_ _visitsOallchildvisit _visitsOallintramap _visitsOavisitdefs _visitsOavisituses _visitsOchildintros _visitsOinhmap _visitsOmrules _visitsOnt _visitsOoptions _visitsOruledefs _visitsOruleuses _visitsOsynmap _visitsOterminaldefs 
                         in  ( _lhsOallvisits,_lhsOchildvisit,_lhsOdatatype,_lhsOgenProdIO,_lhsOimports,_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)
         importBlocks         : PP_Doc
         inhmap               : Attributes
         initial              : StateIdentifier
         mainFile             : String
         mainName             : String
         moduleHeader         : String -> String -> String -> Bool -> String
         nt                   : NontermIdent
         options              : Options
         optionsLine          : String
         pragmaBlocks         : String
         rename               : Bool
         synmap               : Attributes
         textBlocks           : PP_Doc
      synthesized attributes:
         allvisits            : [VisitStateState]
         childvisit           : Map.Map VisitIdentifier (Identifier -> PP_Doc)
         datatype             : [PP_Doc]
         genProdIO            : IO ()
         imports              : [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)) ->
                                          PP_Doc ->
                                          Attributes ->
                                          StateIdentifier ->
                                          String ->
                                          String ->
                                          (String -> String -> String -> Bool -> String) ->
                                          NontermIdent ->
                                          Options ->
                                          String ->
                                          String ->
                                          Bool ->
                                          Attributes ->
                                          PP_Doc ->
                                          ( ([VisitStateState]),(Map.Map VisitIdentifier (Identifier -> PP_Doc)),([PP_Doc]),(IO ()),([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)),importBlocks_Inh_EProductions :: PP_Doc,inhmap_Inh_EProductions :: Attributes,initial_Inh_EProductions :: StateIdentifier,mainFile_Inh_EProductions :: String,mainName_Inh_EProductions :: String,moduleHeader_Inh_EProductions :: (String -> String -> String -> Bool -> String),nt_Inh_EProductions :: NontermIdent,options_Inh_EProductions :: Options,optionsLine_Inh_EProductions :: String,pragmaBlocks_Inh_EProductions :: String,rename_Inh_EProductions :: Bool,synmap_Inh_EProductions :: Attributes,textBlocks_Inh_EProductions :: PP_Doc}
data Syn_EProductions  = Syn_EProductions {allvisits_Syn_EProductions :: ([VisitStateState]),childvisit_Syn_EProductions :: (Map.Map VisitIdentifier (Identifier -> PP_Doc)),datatype_Syn_EProductions :: ([PP_Doc]),genProdIO_Syn_EProductions :: (IO ()),imports_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 _lhsIimportBlocks _lhsIinhmap _lhsIinitial _lhsImainFile _lhsImainName _lhsImoduleHeader _lhsInt _lhsIoptions _lhsIoptionsLine _lhsIpragmaBlocks _lhsIrename _lhsIsynmap _lhsItextBlocks )  =
    (let ( _lhsOallvisits,_lhsOchildvisit,_lhsOdatatype,_lhsOgenProdIO,_lhsOimports,_lhsOsem_nt,_lhsOsem_prod,_lhsOt_visits,_lhsOvisitdefs,_lhsOvisituses) = sem _lhsIallchildvisit _lhsIallstates _lhsIavisitdefs _lhsIavisituses _lhsIimportBlocks _lhsIinhmap _lhsIinitial _lhsImainFile _lhsImainName _lhsImoduleHeader _lhsInt _lhsIoptions _lhsIoptionsLine _lhsIpragmaBlocks _lhsIrename _lhsIsynmap _lhsItextBlocks 
     in  (Syn_EProductions _lhsOallvisits _lhsOchildvisit _lhsOdatatype _lhsOgenProdIO _lhsOimports _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
                       _lhsIimportBlocks
                       _lhsIinhmap
                       _lhsIinitial
                       _lhsImainFile
                       _lhsImainName
                       _lhsImoduleHeader
                       _lhsInt
                       _lhsIoptions
                       _lhsIoptionsLine
                       _lhsIpragmaBlocks
                       _lhsIrename
                       _lhsIsynmap
                       _lhsItextBlocks ->
                         (let _lhsOallvisits :: ([VisitStateState])
                              _lhsOt_visits :: PP_Doc
                              _lhsOchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))
                              _lhsOdatatype :: ([PP_Doc])
                              _lhsOgenProdIO :: (IO ())
                              _lhsOimports :: ([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))
                              _hdOimportBlocks :: PP_Doc
                              _hdOinhmap :: Attributes
                              _hdOinitial :: StateIdentifier
                              _hdOmainFile :: String
                              _hdOmainName :: String
                              _hdOmoduleHeader :: (String -> String -> String -> Bool -> String)
                              _hdOnt :: NontermIdent
                              _hdOoptions :: Options
                              _hdOoptionsLine :: String
                              _hdOpragmaBlocks :: String
                              _hdOrename :: Bool
                              _hdOsynmap :: Attributes
                              _hdOtextBlocks :: PP_Doc
                              _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))
                              _tlOimportBlocks :: PP_Doc
                              _tlOinhmap :: Attributes
                              _tlOinitial :: StateIdentifier
                              _tlOmainFile :: String
                              _tlOmainName :: String
                              _tlOmoduleHeader :: (String -> String -> String -> Bool -> String)
                              _tlOnt :: NontermIdent
                              _tlOoptions :: Options
                              _tlOoptionsLine :: String
                              _tlOpragmaBlocks :: String
                              _tlOrename :: Bool
                              _tlOsynmap :: Attributes
                              _tlOtextBlocks :: PP_Doc
                              _hdIallvisits :: ([VisitStateState])
                              _hdIchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))
                              _hdIdatatype :: PP_Doc
                              _hdIgenProdIO :: (IO ())
                              _hdIimports :: ([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 :: ([VisitStateState])
                              _tlIchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))
                              _tlIdatatype :: ([PP_Doc])
                              _tlIgenProdIO :: (IO ())
                              _tlIimports :: ([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 215, column 10)
                              _lhsOallvisits =
                                  ({-# LINE 215 "ExecutionPlan2Hs.ag" #-}
                                   _hdIallvisits
                                   {-# LINE 1966 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- "ExecutionPlan2Hs.ag"(line 256, column 10)
                              _lhsOt_visits =
                                  ({-# LINE 256 "ExecutionPlan2Hs.ag" #-}
                                   _hdIt_visits
                                   {-# LINE 1972 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- use rule "ExecutionPlan2Hs.ag"(line 458, column 37)
                              _lhsOchildvisit =
                                  ({-# LINE 458 "ExecutionPlan2Hs.ag" #-}
                                   _hdIchildvisit `Map.union` _tlIchildvisit
                                   {-# LINE 1978 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- use rule "ExecutionPlan2Hs.ag"(line 118, column 34)
                              _lhsOdatatype =
                                  ({-# LINE 118 "ExecutionPlan2Hs.ag" #-}
                                   _hdIdatatype : _tlIdatatype
                                   {-# LINE 1984 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- use rule "ExecutionPlan2Hs.ag"(line 627, column 49)
                              _lhsOgenProdIO =
                                  ({-# LINE 627 "ExecutionPlan2Hs.ag" #-}
                                   _hdIgenProdIO >> _tlIgenProdIO
                                   {-# LINE 1990 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- use rule "ExecutionPlan2Hs.ag"(line 626, column 47)
                              _lhsOimports =
                                  ({-# LINE 626 "ExecutionPlan2Hs.ag" #-}
                                   _hdIimports ++ _tlIimports
                                   {-# LINE 1996 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- use rule "ExecutionPlan2Hs.ag"(line 168, column 44)
                              _lhsOsem_nt =
                                  ({-# LINE 168 "ExecutionPlan2Hs.ag" #-}
                                   _hdIsem_nt >-< _tlIsem_nt
                                   {-# LINE 2002 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- use rule "ExecutionPlan2Hs.ag"(line 310, column 34)
                              _lhsOsem_prod =
                                  ({-# LINE 310 "ExecutionPlan2Hs.ag" #-}
                                   _hdIsem_prod >-< _tlIsem_prod
                                   {-# LINE 2008 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- use rule "ExecutionPlan2Hs.ag"(line 518, column 36)
                              _lhsOvisitdefs =
                                  ({-# LINE 518 "ExecutionPlan2Hs.ag" #-}
                                   _hdIvisitdefs `uwSetUnion` _tlIvisitdefs
                                   {-# LINE 2014 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- use rule "ExecutionPlan2Hs.ag"(line 519, column 36)
                              _lhsOvisituses =
                                  ({-# LINE 519 "ExecutionPlan2Hs.ag" #-}
                                   _hdIvisituses `uwSetUnion` _tlIvisituses
                                   {-# LINE 2020 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOallchildvisit =
                                  ({-# LINE 457 "ExecutionPlan2Hs.ag" #-}
                                   _lhsIallchildvisit
                                   {-# LINE 2026 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOallstates =
                                  ({-# LINE 313 "ExecutionPlan2Hs.ag" #-}
                                   _lhsIallstates
                                   {-# LINE 2032 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOavisitdefs =
                                  ({-# LINE 528 "ExecutionPlan2Hs.ag" #-}
                                   _lhsIavisitdefs
                                   {-# LINE 2038 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOavisituses =
                                  ({-# LINE 529 "ExecutionPlan2Hs.ag" #-}
                                   _lhsIavisituses
                                   {-# LINE 2044 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOimportBlocks =
                                  ({-# LINE 25 "ExecutionPlan2Hs.ag" #-}
                                   _lhsIimportBlocks
                                   {-# LINE 2050 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOinhmap =
                                  ({-# LINE 194 "ExecutionPlan2Hs.ag" #-}
                                   _lhsIinhmap
                                   {-# LINE 2056 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOinitial =
                                  ({-# LINE 312 "ExecutionPlan2Hs.ag" #-}
                                   _lhsIinitial
                                   {-# LINE 2062 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOmainFile =
                                  ({-# LINE 29 "ExecutionPlan2Hs.ag" #-}
                                   _lhsImainFile
                                   {-# LINE 2068 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOmainName =
                                  ({-# LINE 31 "ExecutionPlan2Hs.ag" #-}
                                   _lhsImainName
                                   {-# LINE 2074 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOmoduleHeader =
                                  ({-# LINE 28 "ExecutionPlan2Hs.ag" #-}
                                   _lhsImoduleHeader
                                   {-# LINE 2080 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOnt =
                                  ({-# LINE 253 "ExecutionPlan2Hs.ag" #-}
                                   _lhsInt
                                   {-# LINE 2086 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOoptions =
                                  ({-# LINE 41 "ExecutionPlan2Hs.ag" #-}
                                   _lhsIoptions
                                   {-# LINE 2092 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOoptionsLine =
                                  ({-# LINE 30 "ExecutionPlan2Hs.ag" #-}
                                   _lhsIoptionsLine
                                   {-# LINE 2098 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOpragmaBlocks =
                                  ({-# LINE 26 "ExecutionPlan2Hs.ag" #-}
                                   _lhsIpragmaBlocks
                                   {-# LINE 2104 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOrename =
                                  ({-# LINE 42 "ExecutionPlan2Hs.ag" #-}
                                   _lhsIrename
                                   {-# LINE 2110 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOsynmap =
                                  ({-# LINE 195 "ExecutionPlan2Hs.ag" #-}
                                   _lhsIsynmap
                                   {-# LINE 2116 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOtextBlocks =
                                  ({-# LINE 27 "ExecutionPlan2Hs.ag" #-}
                                   _lhsItextBlocks
                                   {-# LINE 2122 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOallchildvisit =
                                  ({-# LINE 457 "ExecutionPlan2Hs.ag" #-}
                                   _lhsIallchildvisit
                                   {-# LINE 2128 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOallstates =
                                  ({-# LINE 313 "ExecutionPlan2Hs.ag" #-}
                                   _lhsIallstates
                                   {-# LINE 2134 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOavisitdefs =
                                  ({-# LINE 528 "ExecutionPlan2Hs.ag" #-}
                                   _lhsIavisitdefs
                                   {-# LINE 2140 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOavisituses =
                                  ({-# LINE 529 "ExecutionPlan2Hs.ag" #-}
                                   _lhsIavisituses
                                   {-# LINE 2146 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOimportBlocks =
                                  ({-# LINE 25 "ExecutionPlan2Hs.ag" #-}
                                   _lhsIimportBlocks
                                   {-# LINE 2152 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOinhmap =
                                  ({-# LINE 194 "ExecutionPlan2Hs.ag" #-}
                                   _lhsIinhmap
                                   {-# LINE 2158 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOinitial =
                                  ({-# LINE 312 "ExecutionPlan2Hs.ag" #-}
                                   _lhsIinitial
                                   {-# LINE 2164 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOmainFile =
                                  ({-# LINE 29 "ExecutionPlan2Hs.ag" #-}
                                   _lhsImainFile
                                   {-# LINE 2170 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOmainName =
                                  ({-# LINE 31 "ExecutionPlan2Hs.ag" #-}
                                   _lhsImainName
                                   {-# LINE 2176 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOmoduleHeader =
                                  ({-# LINE 28 "ExecutionPlan2Hs.ag" #-}
                                   _lhsImoduleHeader
                                   {-# LINE 2182 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOnt =
                                  ({-# LINE 253 "ExecutionPlan2Hs.ag" #-}
                                   _lhsInt
                                   {-# LINE 2188 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOoptions =
                                  ({-# LINE 41 "ExecutionPlan2Hs.ag" #-}
                                   _lhsIoptions
                                   {-# LINE 2194 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOoptionsLine =
                                  ({-# LINE 30 "ExecutionPlan2Hs.ag" #-}
                                   _lhsIoptionsLine
                                   {-# LINE 2200 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOpragmaBlocks =
                                  ({-# LINE 26 "ExecutionPlan2Hs.ag" #-}
                                   _lhsIpragmaBlocks
                                   {-# LINE 2206 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOrename =
                                  ({-# LINE 42 "ExecutionPlan2Hs.ag" #-}
                                   _lhsIrename
                                   {-# LINE 2212 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOsynmap =
                                  ({-# LINE 195 "ExecutionPlan2Hs.ag" #-}
                                   _lhsIsynmap
                                   {-# LINE 2218 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOtextBlocks =
                                  ({-# LINE 27 "ExecutionPlan2Hs.ag" #-}
                                   _lhsItextBlocks
                                   {-# LINE 2224 "ExecutionPlan2Hs.hs" #-}
                                   )
                              ( _hdIallvisits,_hdIchildvisit,_hdIdatatype,_hdIgenProdIO,_hdIimports,_hdIsem_nt,_hdIsem_prod,_hdIt_visits,_hdIvisitdefs,_hdIvisituses) =
                                  hd_ _hdOallchildvisit _hdOallstates _hdOavisitdefs _hdOavisituses _hdOimportBlocks _hdOinhmap _hdOinitial _hdOmainFile _hdOmainName _hdOmoduleHeader _hdOnt _hdOoptions _hdOoptionsLine _hdOpragmaBlocks _hdOrename _hdOsynmap _hdOtextBlocks 
                              ( _tlIallvisits,_tlIchildvisit,_tlIdatatype,_tlIgenProdIO,_tlIimports,_tlIsem_nt,_tlIsem_prod,_tlIt_visits,_tlIvisitdefs,_tlIvisituses) =
                                  tl_ _tlOallchildvisit _tlOallstates _tlOavisitdefs _tlOavisituses _tlOimportBlocks _tlOinhmap _tlOinitial _tlOmainFile _tlOmainName _tlOmoduleHeader _tlOnt _tlOoptions _tlOoptionsLine _tlOpragmaBlocks _tlOrename _tlOsynmap _tlOtextBlocks 
                          in  ( _lhsOallvisits,_lhsOchildvisit,_lhsOdatatype,_lhsOgenProdIO,_lhsOimports,_lhsOsem_nt,_lhsOsem_prod,_lhsOt_visits,_lhsOvisitdefs,_lhsOvisituses))) )
sem_EProductions_Nil :: T_EProductions 
sem_EProductions_Nil  =
    (T_EProductions (\ _lhsIallchildvisit
                       _lhsIallstates
                       _lhsIavisitdefs
                       _lhsIavisituses
                       _lhsIimportBlocks
                       _lhsIinhmap
                       _lhsIinitial
                       _lhsImainFile
                       _lhsImainName
                       _lhsImoduleHeader
                       _lhsInt
                       _lhsIoptions
                       _lhsIoptionsLine
                       _lhsIpragmaBlocks
                       _lhsIrename
                       _lhsIsynmap
                       _lhsItextBlocks ->
                         (let _lhsOallvisits :: ([VisitStateState])
                              _lhsOchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))
                              _lhsOdatatype :: ([PP_Doc])
                              _lhsOgenProdIO :: (IO ())
                              _lhsOimports :: ([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 216, column 10)
                              _lhsOallvisits =
                                  ({-# LINE 216 "ExecutionPlan2Hs.ag" #-}
                                   error "Every nonterminal should have at least 1 production"
                                   {-# LINE 2264 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- use rule "ExecutionPlan2Hs.ag"(line 458, column 37)
                              _lhsOchildvisit =
                                  ({-# LINE 458 "ExecutionPlan2Hs.ag" #-}
                                   Map.empty
                                   {-# LINE 2270 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- use rule "ExecutionPlan2Hs.ag"(line 118, column 34)
                              _lhsOdatatype =
                                  ({-# LINE 118 "ExecutionPlan2Hs.ag" #-}
                                   []
                                   {-# LINE 2276 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- use rule "ExecutionPlan2Hs.ag"(line 627, column 49)
                              _lhsOgenProdIO =
                                  ({-# LINE 627 "ExecutionPlan2Hs.ag" #-}
                                   return ()
                                   {-# LINE 2282 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- use rule "ExecutionPlan2Hs.ag"(line 626, column 47)
                              _lhsOimports =
                                  ({-# LINE 626 "ExecutionPlan2Hs.ag" #-}
                                   []
                                   {-# LINE 2288 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- use rule "ExecutionPlan2Hs.ag"(line 168, column 44)
                              _lhsOsem_nt =
                                  ({-# LINE 168 "ExecutionPlan2Hs.ag" #-}
                                   empty
                                   {-# LINE 2294 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- use rule "ExecutionPlan2Hs.ag"(line 310, column 34)
                              _lhsOsem_prod =
                                  ({-# LINE 310 "ExecutionPlan2Hs.ag" #-}
                                   empty
                                   {-# LINE 2300 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- use rule "ExecutionPlan2Hs.ag"(line 253, column 54)
                              _lhsOt_visits =
                                  ({-# LINE 253 "ExecutionPlan2Hs.ag" #-}
                                   empty
                                   {-# LINE 2306 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- use rule "ExecutionPlan2Hs.ag"(line 518, column 36)
                              _lhsOvisitdefs =
                                  ({-# LINE 518 "ExecutionPlan2Hs.ag" #-}
                                   Map.empty
                                   {-# LINE 2312 "ExecutionPlan2Hs.hs" #-}
                                   )
                              -- use rule "ExecutionPlan2Hs.ag"(line 519, column 36)
                              _lhsOvisituses =
                                  ({-# LINE 519 "ExecutionPlan2Hs.ag" #-}
                                   Map.empty
                                   {-# LINE 2318 "ExecutionPlan2Hs.hs" #-}
                                   )
                          in  ( _lhsOallvisits,_lhsOchildvisit,_lhsOdatatype,_lhsOgenProdIO,_lhsOimports,_lhsOsem_nt,_lhsOsem_prod,_lhsOt_visits,_lhsOvisitdefs,_lhsOvisituses))) )
-- ERule -------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         options              : Options
         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     : _
            local addbang     : _
-}
-- 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 (Options ->
                            (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 {options_Inh_ERule :: Options,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 _lhsIoptions _lhsIusedrules )  =
    (let ( _lhsOmrules,_lhsOruledefs,_lhsOruleuses,_lhsOsem_rules) = sem _lhsIoptions _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 (\ _lhsIoptions
                _lhsIusedrules ->
                  (let _lhsOsem_rules :: PP_Doc
                       _lhsOmrules :: (Map.Map Identifier PP_Doc)
                       _patternOaddtilde :: (PP_Doc -> 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 410, column 11)
                       _lhsOsem_rules =
                           ({-# LINE 410 "ExecutionPlan2Hs.ag" #-}
                            if Set.member name_ _lhsIusedrules
                            then (name_ >#< "=" >#<
                                 (if Set.null _rhsIattrs
                                  then empty
                                  else "\\" >|< _attrlst     >#< "->")
                                 >#< _rhsIsemfunc)
                            else empty
                            {-# LINE 2391 "ExecutionPlan2Hs.hs" #-}
                            )
                       -- "ExecutionPlan2Hs.ag"(line 417, column 11)
                       _attrlst =
                           ({-# LINE 417 "ExecutionPlan2Hs.ag" #-}
                            ppSpaced $ Set.toList _rhsIattrs
                            {-# LINE 2397 "ExecutionPlan2Hs.hs" #-}
                            )
                       -- "ExecutionPlan2Hs.ag"(line 418, column 11)
                       _lhsOmrules =
                           ({-# LINE 418 "ExecutionPlan2Hs.ag" #-}
                            Map.singleton name_ $ _addbang     _patternIsem_lhs >#< "<-" >#< "return" >#< "$" >#< name_ >#< _attrlst
                            {-# LINE 2403 "ExecutionPlan2Hs.hs" #-}
                            )
                       -- "ExecutionPlan2Hs.ag"(line 419, column 11)
                       _patternOaddtilde =
                           ({-# LINE 419 "ExecutionPlan2Hs.ag" #-}
                            \x -> if cases _lhsIoptions then x else "~" >|< x
                            {-# LINE 2409 "ExecutionPlan2Hs.hs" #-}
                            )
                       -- "ExecutionPlan2Hs.ag"(line 420, column 11)
                       _addbang =
                           ({-# LINE 420 "ExecutionPlan2Hs.ag" #-}
                            \x -> if bangpats _lhsIoptions then "!" >|< x else x
                            {-# LINE 2415 "ExecutionPlan2Hs.hs" #-}
                            )
                       -- "ExecutionPlan2Hs.ag"(line 507, column 11)
                       _lhsOruledefs =
                           ({-# LINE 507 "ExecutionPlan2Hs.ag" #-}
                            Map.singleton name_ _patternIattrs
                            {-# LINE 2421 "ExecutionPlan2Hs.hs" #-}
                            )
                       -- "ExecutionPlan2Hs.ag"(line 508, column 11)
                       _lhsOruleuses =
                           ({-# LINE 508 "ExecutionPlan2Hs.ag" #-}
                            Map.singleton name_ _rhsIattrs
                            {-# LINE 2427 "ExecutionPlan2Hs.hs" #-}
                            )
                       ( _patternIattrs,_patternIcopy,_patternIsem_lhs) =
                           pattern_ _patternOaddtilde 
                       ( _rhsIattrs,_rhsIsemfunc) =
                           rhs_ 
                   in  ( _lhsOmrules,_lhsOruledefs,_lhsOruleuses,_lhsOsem_rules))) )
-- ERules ------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         options              : Options
         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 (Options ->
                              (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 {options_Inh_ERules :: Options,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 _lhsIoptions _lhsIusedrules )  =
    (let ( _lhsOmrules,_lhsOruledefs,_lhsOruleuses,_lhsOsem_rules) = sem _lhsIoptions _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 (\ _lhsIoptions
                 _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
                        _hdOoptions :: Options
                        _hdOusedrules :: (Set.Set Identifier)
                        _tlOoptions :: Options
                        _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 407, column 32)
                        _lhsOmrules =
                            ({-# LINE 407 "ExecutionPlan2Hs.ag" #-}
                             _hdImrules `Map.union` _tlImrules
                             {-# LINE 2494 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- use rule "ExecutionPlan2Hs.ag"(line 500, column 34)
                        _lhsOruledefs =
                            ({-# LINE 500 "ExecutionPlan2Hs.ag" #-}
                             _hdIruledefs `uwSetUnion` _tlIruledefs
                             {-# LINE 2500 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- use rule "ExecutionPlan2Hs.ag"(line 501, column 34)
                        _lhsOruleuses =
                            ({-# LINE 501 "ExecutionPlan2Hs.ag" #-}
                             _hdIruleuses `uwSetUnion` _tlIruleuses
                             {-# LINE 2506 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- use rule "ExecutionPlan2Hs.ag"(line 406, column 35)
                        _lhsOsem_rules =
                            ({-# LINE 406 "ExecutionPlan2Hs.ag" #-}
                             _hdIsem_rules >-< _tlIsem_rules
                             {-# LINE 2512 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOoptions =
                            ({-# LINE 41 "ExecutionPlan2Hs.ag" #-}
                             _lhsIoptions
                             {-# LINE 2518 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOusedrules =
                            ({-# LINE 397 "ExecutionPlan2Hs.ag" #-}
                             _lhsIusedrules
                             {-# LINE 2524 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOoptions =
                            ({-# LINE 41 "ExecutionPlan2Hs.ag" #-}
                             _lhsIoptions
                             {-# LINE 2530 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOusedrules =
                            ({-# LINE 397 "ExecutionPlan2Hs.ag" #-}
                             _lhsIusedrules
                             {-# LINE 2536 "ExecutionPlan2Hs.hs" #-}
                             )
                        ( _hdImrules,_hdIruledefs,_hdIruleuses,_hdIsem_rules) =
                            hd_ _hdOoptions _hdOusedrules 
                        ( _tlImrules,_tlIruledefs,_tlIruleuses,_tlIsem_rules) =
                            tl_ _tlOoptions _tlOusedrules 
                    in  ( _lhsOmrules,_lhsOruledefs,_lhsOruleuses,_lhsOsem_rules))) )
sem_ERules_Nil :: T_ERules 
sem_ERules_Nil  =
    (T_ERules (\ _lhsIoptions
                 _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 407, column 32)
                        _lhsOmrules =
                            ({-# LINE 407 "ExecutionPlan2Hs.ag" #-}
                             Map.empty
                             {-# LINE 2555 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- use rule "ExecutionPlan2Hs.ag"(line 500, column 34)
                        _lhsOruledefs =
                            ({-# LINE 500 "ExecutionPlan2Hs.ag" #-}
                             Map.empty
                             {-# LINE 2561 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- use rule "ExecutionPlan2Hs.ag"(line 501, column 34)
                        _lhsOruleuses =
                            ({-# LINE 501 "ExecutionPlan2Hs.ag" #-}
                             Map.empty
                             {-# LINE 2567 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- use rule "ExecutionPlan2Hs.ag"(line 406, column 35)
                        _lhsOsem_rules =
                            ({-# LINE 406 "ExecutionPlan2Hs.ag" #-}
                             empty
                             {-# LINE 2573 "ExecutionPlan2Hs.hs" #-}
                             )
                    in  ( _lhsOmrules,_lhsOruledefs,_lhsOruleuses,_lhsOsem_rules))) )
-- ExecutionPlan -----------------------------------------------
{-
   visit 0:
      inherited attributes:
         importBlocks         : PP_Doc
         inhmap               : Map.Map NontermIdent Attributes
         mainFile             : String
         mainName             : String
         moduleHeader         : String -> String -> String -> Bool -> String
         options              : Options
         optionsLine          : String
         pragmaBlocks         : String
         synmap               : Map.Map NontermIdent Attributes
         textBlocks           : PP_Doc
      synthesized attributes:
         genIO                : IO ()
         output               : PP_Doc
   alternatives:
      alternative ExecutionPlan:
         child nonts          : ENonterminals 
         child typeSyns       : {TypeSyns}
         child wrappers       : {Set.Set NontermIdent}
         child derivings      : {Derivings}
         visit 0:
            local mainModuleFile : _
            local genMainModule : _
            local commonFile  : _
            local genCommonModule : _
-}
-- cata
sem_ExecutionPlan :: ExecutionPlan  ->
                     T_ExecutionPlan 
sem_ExecutionPlan (ExecutionPlan _nonts _typeSyns _wrappers _derivings )  =
    (sem_ExecutionPlan_ExecutionPlan (sem_ENonterminals _nonts ) _typeSyns _wrappers _derivings )
-- semantic domain
newtype T_ExecutionPlan  = T_ExecutionPlan (PP_Doc ->
                                            (Map.Map NontermIdent Attributes) ->
                                            String ->
                                            String ->
                                            (String -> String -> String -> Bool -> String) ->
                                            Options ->
                                            String ->
                                            String ->
                                            (Map.Map NontermIdent Attributes) ->
                                            PP_Doc ->
                                            ( (IO ()),PP_Doc))
data Inh_ExecutionPlan  = Inh_ExecutionPlan {importBlocks_Inh_ExecutionPlan :: PP_Doc,inhmap_Inh_ExecutionPlan :: (Map.Map NontermIdent Attributes),mainFile_Inh_ExecutionPlan :: String,mainName_Inh_ExecutionPlan :: String,moduleHeader_Inh_ExecutionPlan :: (String -> String -> String -> Bool -> String),options_Inh_ExecutionPlan :: Options,optionsLine_Inh_ExecutionPlan :: String,pragmaBlocks_Inh_ExecutionPlan :: String,synmap_Inh_ExecutionPlan :: (Map.Map NontermIdent Attributes),textBlocks_Inh_ExecutionPlan :: PP_Doc}
data Syn_ExecutionPlan  = Syn_ExecutionPlan {genIO_Syn_ExecutionPlan :: (IO ()),output_Syn_ExecutionPlan :: PP_Doc}
wrap_ExecutionPlan :: T_ExecutionPlan  ->
                      Inh_ExecutionPlan  ->
                      Syn_ExecutionPlan 
wrap_ExecutionPlan (T_ExecutionPlan sem ) (Inh_ExecutionPlan _lhsIimportBlocks _lhsIinhmap _lhsImainFile _lhsImainName _lhsImoduleHeader _lhsIoptions _lhsIoptionsLine _lhsIpragmaBlocks _lhsIsynmap _lhsItextBlocks )  =
    (let ( _lhsOgenIO,_lhsOoutput) = sem _lhsIimportBlocks _lhsIinhmap _lhsImainFile _lhsImainName _lhsImoduleHeader _lhsIoptions _lhsIoptionsLine _lhsIpragmaBlocks _lhsIsynmap _lhsItextBlocks 
     in  (Syn_ExecutionPlan _lhsOgenIO _lhsOoutput ))
sem_ExecutionPlan_ExecutionPlan :: T_ENonterminals  ->
                                   TypeSyns ->
                                   (Set.Set NontermIdent) ->
                                   Derivings ->
                                   T_ExecutionPlan 
sem_ExecutionPlan_ExecutionPlan (T_ENonterminals nonts_ ) typeSyns_ wrappers_ derivings_  =
    (T_ExecutionPlan (\ _lhsIimportBlocks
                        _lhsIinhmap
                        _lhsImainFile
                        _lhsImainName
                        _lhsImoduleHeader
                        _lhsIoptions
                        _lhsIoptionsLine
                        _lhsIpragmaBlocks
                        _lhsIsynmap
                        _lhsItextBlocks ->
                          (let _lhsOoutput :: PP_Doc
                               _nontsOwrappers :: (Set.Set NontermIdent)
                               _nontsOtypeSyns :: TypeSyns
                               _nontsOderivings :: Derivings
                               _nontsOallchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))
                               _nontsOavisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))
                               _nontsOavisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))
                               _lhsOgenIO :: (IO ())
                               _nontsOimportBlocks :: PP_Doc
                               _nontsOinhmap :: (Map.Map NontermIdent Attributes)
                               _nontsOmainFile :: String
                               _nontsOmainName :: String
                               _nontsOmoduleHeader :: (String -> String -> String -> Bool -> String)
                               _nontsOoptions :: Options
                               _nontsOoptionsLine :: String
                               _nontsOpragmaBlocks :: String
                               _nontsOsynmap :: (Map.Map NontermIdent Attributes)
                               _nontsOtextBlocks :: PP_Doc
                               _nontsIappendCommon :: ([PP_Doc])
                               _nontsIappendMain :: ([PP_Doc])
                               _nontsIchildvisit :: (Map.Map VisitIdentifier (Identifier -> PP_Doc))
                               _nontsIgenProdIO :: (IO ())
                               _nontsIimports :: ([PP_Doc])
                               _nontsIoutput :: PP_Doc
                               _nontsIvisitdefs :: (Map.Map VisitIdentifier (Set.Set Identifier))
                               _nontsIvisituses :: (Map.Map VisitIdentifier (Set.Set Identifier))
                               -- "ExecutionPlan2Hs.ag"(line 53, column 19)
                               _lhsOoutput =
                                   ({-# LINE 53 "ExecutionPlan2Hs.ag" #-}
                                    _nontsIoutput
                                    {-# LINE 2676 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- "ExecutionPlan2Hs.ag"(line 59, column 19)
                               _nontsOwrappers =
                                   ({-# LINE 59 "ExecutionPlan2Hs.ag" #-}
                                    wrappers_
                                    {-# LINE 2682 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- "ExecutionPlan2Hs.ag"(line 97, column 19)
                               _nontsOtypeSyns =
                                   ({-# LINE 97 "ExecutionPlan2Hs.ag" #-}
                                    typeSyns_
                                    {-# LINE 2688 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- "ExecutionPlan2Hs.ag"(line 98, column 19)
                               _nontsOderivings =
                                   ({-# LINE 98 "ExecutionPlan2Hs.ag" #-}
                                    derivings_
                                    {-# LINE 2694 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- "ExecutionPlan2Hs.ag"(line 463, column 19)
                               _nontsOallchildvisit =
                                   ({-# LINE 463 "ExecutionPlan2Hs.ag" #-}
                                    _nontsIchildvisit
                                    {-# LINE 2700 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- "ExecutionPlan2Hs.ag"(line 532, column 19)
                               _nontsOavisitdefs =
                                   ({-# LINE 532 "ExecutionPlan2Hs.ag" #-}
                                    _nontsIvisitdefs
                                    {-# LINE 2706 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- "ExecutionPlan2Hs.ag"(line 533, column 19)
                               _nontsOavisituses =
                                   ({-# LINE 533 "ExecutionPlan2Hs.ag" #-}
                                    _nontsIvisituses
                                    {-# LINE 2712 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- "ExecutionPlan2Hs.ag"(line 581, column 19)
                               _lhsOgenIO =
                                   ({-# LINE 581 "ExecutionPlan2Hs.ag" #-}
                                    do _genMainModule
                                       _genCommonModule
                                       _nontsIgenProdIO
                                    {-# LINE 2720 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- "ExecutionPlan2Hs.ag"(line 584, column 19)
                               _mainModuleFile =
                                   ({-# LINE 584 "ExecutionPlan2Hs.ag" #-}
                                    _lhsImainFile ++ ".hs"
                                    {-# LINE 2726 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- "ExecutionPlan2Hs.ag"(line 585, column 19)
                               _genMainModule =
                                   ({-# LINE 585 "ExecutionPlan2Hs.ag" #-}
                                    writeModule _mainModuleFile
                                      ( [ pp $ "{-# LANGUAGE Rank2Types, GADTs, EmptyDataDecls #-}"
                                        , pp $ _lhsIpragmaBlocks
                                        , pp $ _lhsIoptionsLine
                                        , pp $ _lhsImoduleHeader _lhsImainName "" "" False
                                        , pp $ "import Control.Monad.Identity"
                                        , pp $ "import " ++ _lhsImainName ++ "_common"
                                        ]
                                        ++ _nontsIimports
                                        ++ _nontsIappendMain
                                      )
                                    {-# LINE 2742 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- "ExecutionPlan2Hs.ag"(line 596, column 19)
                               _commonFile =
                                   ({-# LINE 596 "ExecutionPlan2Hs.ag" #-}
                                    _lhsImainFile ++ "_common.hs"
                                    {-# LINE 2748 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- "ExecutionPlan2Hs.ag"(line 597, column 19)
                               _genCommonModule =
                                   ({-# LINE 597 "ExecutionPlan2Hs.ag" #-}
                                    writeModule _commonFile
                                      ( [ pp $ "{-# LANGUAGE Rank2Types, GADTs, EmptyDataDecls #-}"
                                        , pp $ _lhsIpragmaBlocks
                                        , pp $ _lhsIoptionsLine
                                        , pp $ _lhsImoduleHeader _lhsImainName "_common" "" True
                                        , pp $ "import Control.Monad.Identity"
                                        , _lhsIimportBlocks
                                        , _lhsItextBlocks
                                        ]
                                        ++ _nontsIappendCommon
                                      )
                                    {-# LINE 2764 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _nontsOimportBlocks =
                                   ({-# LINE 25 "ExecutionPlan2Hs.ag" #-}
                                    _lhsIimportBlocks
                                    {-# LINE 2770 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _nontsOinhmap =
                                   ({-# LINE 188 "ExecutionPlan2Hs.ag" #-}
                                    _lhsIinhmap
                                    {-# LINE 2776 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _nontsOmainFile =
                                   ({-# LINE 29 "ExecutionPlan2Hs.ag" #-}
                                    _lhsImainFile
                                    {-# LINE 2782 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _nontsOmainName =
                                   ({-# LINE 31 "ExecutionPlan2Hs.ag" #-}
                                    _lhsImainName
                                    {-# LINE 2788 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _nontsOmoduleHeader =
                                   ({-# LINE 28 "ExecutionPlan2Hs.ag" #-}
                                    _lhsImoduleHeader
                                    {-# LINE 2794 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _nontsOoptions =
                                   ({-# LINE 41 "ExecutionPlan2Hs.ag" #-}
                                    _lhsIoptions
                                    {-# LINE 2800 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _nontsOoptionsLine =
                                   ({-# LINE 30 "ExecutionPlan2Hs.ag" #-}
                                    _lhsIoptionsLine
                                    {-# LINE 2806 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _nontsOpragmaBlocks =
                                   ({-# LINE 26 "ExecutionPlan2Hs.ag" #-}
                                    _lhsIpragmaBlocks
                                    {-# LINE 2812 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _nontsOsynmap =
                                   ({-# LINE 189 "ExecutionPlan2Hs.ag" #-}
                                    _lhsIsynmap
                                    {-# LINE 2818 "ExecutionPlan2Hs.hs" #-}
                                    )
                               -- copy rule (down)
                               _nontsOtextBlocks =
                                   ({-# LINE 27 "ExecutionPlan2Hs.ag" #-}
                                    _lhsItextBlocks
                                    {-# LINE 2824 "ExecutionPlan2Hs.hs" #-}
                                    )
                               ( _nontsIappendCommon,_nontsIappendMain,_nontsIchildvisit,_nontsIgenProdIO,_nontsIimports,_nontsIoutput,_nontsIvisitdefs,_nontsIvisituses) =
                                   nonts_ _nontsOallchildvisit _nontsOavisitdefs _nontsOavisituses _nontsOderivings _nontsOimportBlocks _nontsOinhmap _nontsOmainFile _nontsOmainName _nontsOmoduleHeader _nontsOoptions _nontsOoptionsLine _nontsOpragmaBlocks _nontsOsynmap _nontsOtextBlocks _nontsOtypeSyns _nontsOwrappers 
                           in  ( _lhsOgenIO,_lhsOoutput))) )
-- 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 448, column 16)
                       _lhsOattrs =
                           ({-# LINE 448 "ExecutionPlan2Hs.ag" #-}
                            Set.unions $ map (\tok -> attrs_Syn_HsToken (wrap_HsToken (sem_HsToken tok) Inh_HsToken)) tks_
                            {-# LINE 2865 "ExecutionPlan2Hs.hs" #-}
                            )
                       -- "ExecutionPlan2Hs.ag"(line 449, column 16)
                       _lhsOsemfunc =
                           ({-# LINE 449 "ExecutionPlan2Hs.ag" #-}
                            vlist $ showTokens $ map (\tok -> tok_Syn_HsToken (wrap_HsToken (sem_HsToken tok) Inh_HsToken)) tks_
                            {-# LINE 2871 "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 443, column 15)
                    _lhsOattrs =
                        ({-# LINE 443 "ExecutionPlan2Hs.ag" #-}
                         Set.singleton $ attrname True field_ attr_
                         {-# LINE 2944 "ExecutionPlan2Hs.hs" #-}
                         )
                    -- "ExecutionPlan2Hs.ag"(line 559, column 8)
                    _addTrace =
                        ({-# LINE 559 "ExecutionPlan2Hs.ag" #-}
                         case rdesc_ of
                           Just d  -> \x -> "(trace " ++ show (d ++ " -> " ++ show field_ ++ "." ++ show attr_) ++ " (" ++ x ++ "))"
                           Nothing -> id
                         {-# LINE 2952 "ExecutionPlan2Hs.hs" #-}
                         )
                    -- "ExecutionPlan2Hs.ag"(line 562, column 8)
                    _lhsOtok =
                        ({-# LINE 562 "ExecutionPlan2Hs.ag" #-}
                         (pos_, _addTrace     $ attrname True field_ attr_)
                         {-# LINE 2958 "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 442, column 15)
                    _lhsOattrs =
                        ({-# LINE 442 "ExecutionPlan2Hs.ag" #-}
                         Set.singleton $ locname var_
                         {-# LINE 2972 "ExecutionPlan2Hs.hs" #-}
                         )
                    -- "ExecutionPlan2Hs.ag"(line 555, column 15)
                    _tok =
                        ({-# LINE 555 "ExecutionPlan2Hs.ag" #-}
                         (pos_,locname var_)
                         {-# LINE 2978 "ExecutionPlan2Hs.hs" #-}
                         )
                    -- copy rule (from local)
                    _lhsOtok =
                        ({-# LINE 557 "ExecutionPlan2Hs.ag" #-}
                         _tok
                         {-# LINE 2984 "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 566, column 16)
                    _lhsOtok =
                        ({-# LINE 566 "ExecutionPlan2Hs.ag" #-}
                         (pos_, if null value_
                                   then ""
                                   else showCharShort (head value_)
                         )
                         {-# LINE 3000 "ExecutionPlan2Hs.hs" #-}
                         )
                    -- use rule "ExecutionPlan2Hs.ag"(line 440, column 37)
                    _lhsOattrs =
                        ({-# LINE 440 "ExecutionPlan2Hs.ag" #-}
                         Set.empty
                         {-# LINE 3006 "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 572, column 16)
                    _lhsOtok =
                        ({-# LINE 572 "ExecutionPlan2Hs.ag" #-}
                         (pos_, "")
                         {-# LINE 3019 "ExecutionPlan2Hs.hs" #-}
                         )
                    -- use rule "ExecutionPlan2Hs.ag"(line 440, column 37)
                    _lhsOattrs =
                        ({-# LINE 440 "ExecutionPlan2Hs.ag" #-}
                         Set.empty
                         {-# LINE 3025 "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 564, column 14)
                    _lhsOtok =
                        ({-# LINE 564 "ExecutionPlan2Hs.ag" #-}
                         (pos_, value_)
                         {-# LINE 3038 "ExecutionPlan2Hs.hs" #-}
                         )
                    -- use rule "ExecutionPlan2Hs.ag"(line 440, column 37)
                    _lhsOattrs =
                        ({-# LINE 440 "ExecutionPlan2Hs.ag" #-}
                         Set.empty
                         {-# LINE 3044 "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 571, column 16)
                    _lhsOtok =
                        ({-# LINE 571 "ExecutionPlan2Hs.ag" #-}
                         (pos_, showStrShort value_)
                         {-# LINE 3057 "ExecutionPlan2Hs.hs" #-}
                         )
                    -- use rule "ExecutionPlan2Hs.ag"(line 440, column 37)
                    _lhsOattrs =
                        ({-# LINE 440 "ExecutionPlan2Hs.ag" #-}
                         Set.empty
                         {-# LINE 3063 "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 551, column 10)
                     _lhsOtks =
                         ({-# LINE 551 "ExecutionPlan2Hs.ag" #-}
                          _hdItok : _tlItks
                          {-# LINE 3104 "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 552, column 10)
                     _lhsOtks =
                         ({-# LINE 552 "ExecutionPlan2Hs.ag" #-}
                          []
                          {-# LINE 3118 "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:
      inherited attribute:
         addtilde             : PP_Doc -> PP_Doc
      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 ((PP_Doc -> PP_Doc) ->
                                ( (Set.Set String),Pattern ,( PP_Doc )))
data Inh_Pattern  = Inh_Pattern {addtilde_Inh_Pattern :: (PP_Doc -> PP_Doc)}
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 _lhsIaddtilde )  =
    (let ( _lhsOattrs,_lhsOcopy,_lhsOsem_lhs) = sem _lhsIaddtilde 
     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 (\ _lhsIaddtilde ->
                    (let _lhsOsem_lhs :: ( PP_Doc )
                         _lhsOattrs :: (Set.Set String)
                         _lhsOcopy :: Pattern 
                         _patOaddtilde :: (PP_Doc -> PP_Doc)
                         _partsOaddtilde :: (PP_Doc -> PP_Doc)
                         _patIattrs :: (Set.Set String)
                         _patIcopy :: Pattern 
                         _patIsem_lhs :: ( PP_Doc )
                         _partsIattrs :: (Set.Set String)
                         _partsIcopy :: Patterns 
                         _partsIsem_lhs :: ([PP_Doc])
                         -- "ExecutionPlan2Hs.ag"(line 430, column 17)
                         _lhsOsem_lhs =
                             ({-# LINE 430 "ExecutionPlan2Hs.ag" #-}
                              text $ attrname False field_ attr_
                              {-# LINE 3231 "ExecutionPlan2Hs.hs" #-}
                              )
                         -- "ExecutionPlan2Hs.ag"(line 431, column 17)
                         _lhsOattrs =
                             ({-# LINE 431 "ExecutionPlan2Hs.ag" #-}
                              Set.singleton $ attrname False field_ attr_
                              {-# LINE 3237 "ExecutionPlan2Hs.hs" #-}
                              )
                         -- self rule
                         _copy =
                             ({-# LINE 23 "./Patterns.ag" #-}
                              Alias field_ attr_ _patIcopy _partsIcopy
                              {-# LINE 3243 "ExecutionPlan2Hs.hs" #-}
                              )
                         -- self rule
                         _lhsOcopy =
                             ({-# LINE 23 "./Patterns.ag" #-}
                              _copy
                              {-# LINE 3249 "ExecutionPlan2Hs.hs" #-}
                              )
                         -- copy rule (down)
                         _patOaddtilde =
                             ({-# LINE 425 "ExecutionPlan2Hs.ag" #-}
                              _lhsIaddtilde
                              {-# LINE 3255 "ExecutionPlan2Hs.hs" #-}
                              )
                         -- copy rule (down)
                         _partsOaddtilde =
                             ({-# LINE 425 "ExecutionPlan2Hs.ag" #-}
                              _lhsIaddtilde
                              {-# LINE 3261 "ExecutionPlan2Hs.hs" #-}
                              )
                         ( _patIattrs,_patIcopy,_patIsem_lhs) =
                             pat_ _patOaddtilde 
                         ( _partsIattrs,_partsIcopy,_partsIsem_lhs) =
                             parts_ _partsOaddtilde 
                     in  ( _lhsOattrs,_lhsOcopy,_lhsOsem_lhs))) )
sem_Pattern_Constr :: ConstructorIdent ->
                      T_Patterns  ->
                      T_Pattern 
sem_Pattern_Constr name_ (T_Patterns pats_ )  =
    (T_Pattern (\ _lhsIaddtilde ->
                    (let _lhsOsem_lhs :: ( PP_Doc )
                         _patsOaddtilde :: (PP_Doc -> PP_Doc)
                         _lhsOattrs :: (Set.Set String)
                         _lhsOcopy :: Pattern 
                         _patsIattrs :: (Set.Set String)
                         _patsIcopy :: Patterns 
                         _patsIsem_lhs :: ([PP_Doc])
                         -- "ExecutionPlan2Hs.ag"(line 434, column 17)
                         _lhsOsem_lhs =
                             ({-# LINE 434 "ExecutionPlan2Hs.ag" #-}
                              _lhsIaddtilde $ pp_parens $ name_ >#< hv_sp _patsIsem_lhs
                              {-# LINE 3284 "ExecutionPlan2Hs.hs" #-}
                              )
                         -- "ExecutionPlan2Hs.ag"(line 435, column 17)
                         _patsOaddtilde =
                             ({-# LINE 435 "ExecutionPlan2Hs.ag" #-}
                              id
                              {-# LINE 3290 "ExecutionPlan2Hs.hs" #-}
                              )
                         -- use rule "ExecutionPlan2Hs.ag"(line 427, column 36)
                         _lhsOattrs =
                             ({-# LINE 427 "ExecutionPlan2Hs.ag" #-}
                              _patsIattrs
                              {-# LINE 3296 "ExecutionPlan2Hs.hs" #-}
                              )
                         -- self rule
                         _copy =
                             ({-# LINE 23 "./Patterns.ag" #-}
                              Constr name_ _patsIcopy
                              {-# LINE 3302 "ExecutionPlan2Hs.hs" #-}
                              )
                         -- self rule
                         _lhsOcopy =
                             ({-# LINE 23 "./Patterns.ag" #-}
                              _copy
                              {-# LINE 3308 "ExecutionPlan2Hs.hs" #-}
                              )
                         ( _patsIattrs,_patsIcopy,_patsIsem_lhs) =
                             pats_ _patsOaddtilde 
                     in  ( _lhsOattrs,_lhsOcopy,_lhsOsem_lhs))) )
sem_Pattern_Irrefutable :: T_Pattern  ->
                           T_Pattern 
sem_Pattern_Irrefutable (T_Pattern pat_ )  =
    (T_Pattern (\ _lhsIaddtilde ->
                    (let _lhsOsem_lhs :: ( PP_Doc )
                         _patOaddtilde :: (PP_Doc -> PP_Doc)
                         _lhsOattrs :: (Set.Set String)
                         _lhsOcopy :: Pattern 
                         _patIattrs :: (Set.Set String)
                         _patIcopy :: Pattern 
                         _patIsem_lhs :: ( PP_Doc )
                         -- "ExecutionPlan2Hs.ag"(line 437, column 17)
                         _lhsOsem_lhs =
                             ({-# LINE 437 "ExecutionPlan2Hs.ag" #-}
                              text "~" >|< pp_parens _patIsem_lhs
                              {-# LINE 3328 "ExecutionPlan2Hs.hs" #-}
                              )
                         -- "ExecutionPlan2Hs.ag"(line 438, column 17)
                         _patOaddtilde =
                             ({-# LINE 438 "ExecutionPlan2Hs.ag" #-}
                              id
                              {-# LINE 3334 "ExecutionPlan2Hs.hs" #-}
                              )
                         -- use rule "ExecutionPlan2Hs.ag"(line 427, column 36)
                         _lhsOattrs =
                             ({-# LINE 427 "ExecutionPlan2Hs.ag" #-}
                              _patIattrs
                              {-# LINE 3340 "ExecutionPlan2Hs.hs" #-}
                              )
                         -- self rule
                         _copy =
                             ({-# LINE 23 "./Patterns.ag" #-}
                              Irrefutable _patIcopy
                              {-# LINE 3346 "ExecutionPlan2Hs.hs" #-}
                              )
                         -- self rule
                         _lhsOcopy =
                             ({-# LINE 23 "./Patterns.ag" #-}
                              _copy
                              {-# LINE 3352 "ExecutionPlan2Hs.hs" #-}
                              )
                         ( _patIattrs,_patIcopy,_patIsem_lhs) =
                             pat_ _patOaddtilde 
                     in  ( _lhsOattrs,_lhsOcopy,_lhsOsem_lhs))) )
sem_Pattern_Product :: Pos ->
                       T_Patterns  ->
                       T_Pattern 
sem_Pattern_Product pos_ (T_Patterns pats_ )  =
    (T_Pattern (\ _lhsIaddtilde ->
                    (let _lhsOsem_lhs :: ( PP_Doc )
                         _patsOaddtilde :: (PP_Doc -> PP_Doc)
                         _lhsOattrs :: (Set.Set String)
                         _lhsOcopy :: Pattern 
                         _patsIattrs :: (Set.Set String)
                         _patsIcopy :: Patterns 
                         _patsIsem_lhs :: ([PP_Doc])
                         -- "ExecutionPlan2Hs.ag"(line 432, column 17)
                         _lhsOsem_lhs =
                             ({-# LINE 432 "ExecutionPlan2Hs.ag" #-}
                              _lhsIaddtilde $ pp_block "(" ")" "," _patsIsem_lhs
                              {-# LINE 3373 "ExecutionPlan2Hs.hs" #-}
                              )
                         -- "ExecutionPlan2Hs.ag"(line 433, column 17)
                         _patsOaddtilde =
                             ({-# LINE 433 "ExecutionPlan2Hs.ag" #-}
                              id
                              {-# LINE 3379 "ExecutionPlan2Hs.hs" #-}
                              )
                         -- use rule "ExecutionPlan2Hs.ag"(line 427, column 36)
                         _lhsOattrs =
                             ({-# LINE 427 "ExecutionPlan2Hs.ag" #-}
                              _patsIattrs
                              {-# LINE 3385 "ExecutionPlan2Hs.hs" #-}
                              )
                         -- self rule
                         _copy =
                             ({-# LINE 23 "./Patterns.ag" #-}
                              Product pos_ _patsIcopy
                              {-# LINE 3391 "ExecutionPlan2Hs.hs" #-}
                              )
                         -- self rule
                         _lhsOcopy =
                             ({-# LINE 23 "./Patterns.ag" #-}
                              _copy
                              {-# LINE 3397 "ExecutionPlan2Hs.hs" #-}
                              )
                         ( _patsIattrs,_patsIcopy,_patsIsem_lhs) =
                             pats_ _patsOaddtilde 
                     in  ( _lhsOattrs,_lhsOcopy,_lhsOsem_lhs))) )
sem_Pattern_Underscore :: Pos ->
                          T_Pattern 
sem_Pattern_Underscore pos_  =
    (T_Pattern (\ _lhsIaddtilde ->
                    (let _lhsOsem_lhs :: ( PP_Doc )
                         _lhsOattrs :: (Set.Set String)
                         _lhsOcopy :: Pattern 
                         -- "ExecutionPlan2Hs.ag"(line 436, column 17)
                         _lhsOsem_lhs =
                             ({-# LINE 436 "ExecutionPlan2Hs.ag" #-}
                              text "_"
                              {-# LINE 3413 "ExecutionPlan2Hs.hs" #-}
                              )
                         -- use rule "ExecutionPlan2Hs.ag"(line 427, column 36)
                         _lhsOattrs =
                             ({-# LINE 427 "ExecutionPlan2Hs.ag" #-}
                              Set.empty
                              {-# LINE 3419 "ExecutionPlan2Hs.hs" #-}
                              )
                         -- self rule
                         _copy =
                             ({-# LINE 23 "./Patterns.ag" #-}
                              Underscore pos_
                              {-# LINE 3425 "ExecutionPlan2Hs.hs" #-}
                              )
                         -- self rule
                         _lhsOcopy =
                             ({-# LINE 23 "./Patterns.ag" #-}
                              _copy
                              {-# LINE 3431 "ExecutionPlan2Hs.hs" #-}
                              )
                     in  ( _lhsOattrs,_lhsOcopy,_lhsOsem_lhs))) )
-- Patterns ----------------------------------------------------
{-
   visit 0:
      inherited attribute:
         addtilde             : PP_Doc -> PP_Doc
      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 ((PP_Doc -> PP_Doc) ->
                                  ( (Set.Set String),Patterns ,([PP_Doc])))
data Inh_Patterns  = Inh_Patterns {addtilde_Inh_Patterns :: (PP_Doc -> PP_Doc)}
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 _lhsIaddtilde )  =
    (let ( _lhsOattrs,_lhsOcopy,_lhsOsem_lhs) = sem _lhsIaddtilde 
     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 (\ _lhsIaddtilde ->
                     (let _lhsOattrs :: (Set.Set String)
                          _lhsOsem_lhs :: ([PP_Doc])
                          _lhsOcopy :: Patterns 
                          _hdOaddtilde :: (PP_Doc -> PP_Doc)
                          _tlOaddtilde :: (PP_Doc -> PP_Doc)
                          _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 427, column 36)
                          _lhsOattrs =
                              ({-# LINE 427 "ExecutionPlan2Hs.ag" #-}
                               _hdIattrs `Set.union` _tlIattrs
                               {-# LINE 3489 "ExecutionPlan2Hs.hs" #-}
                               )
                          -- use rule "ExecutionPlan2Hs.ag"(line 424, column 29)
                          _lhsOsem_lhs =
                              ({-# LINE 424 "ExecutionPlan2Hs.ag" #-}
                               _hdIsem_lhs : _tlIsem_lhs
                               {-# LINE 3495 "ExecutionPlan2Hs.hs" #-}
                               )
                          -- self rule
                          _copy =
                              ({-# LINE 23 "./Patterns.ag" #-}
                               (:) _hdIcopy _tlIcopy
                               {-# LINE 3501 "ExecutionPlan2Hs.hs" #-}
                               )
                          -- self rule
                          _lhsOcopy =
                              ({-# LINE 23 "./Patterns.ag" #-}
                               _copy
                               {-# LINE 3507 "ExecutionPlan2Hs.hs" #-}
                               )
                          -- copy rule (down)
                          _hdOaddtilde =
                              ({-# LINE 425 "ExecutionPlan2Hs.ag" #-}
                               _lhsIaddtilde
                               {-# LINE 3513 "ExecutionPlan2Hs.hs" #-}
                               )
                          -- copy rule (down)
                          _tlOaddtilde =
                              ({-# LINE 425 "ExecutionPlan2Hs.ag" #-}
                               _lhsIaddtilde
                               {-# LINE 3519 "ExecutionPlan2Hs.hs" #-}
                               )
                          ( _hdIattrs,_hdIcopy,_hdIsem_lhs) =
                              hd_ _hdOaddtilde 
                          ( _tlIattrs,_tlIcopy,_tlIsem_lhs) =
                              tl_ _tlOaddtilde 
                      in  ( _lhsOattrs,_lhsOcopy,_lhsOsem_lhs))) )
sem_Patterns_Nil :: T_Patterns 
sem_Patterns_Nil  =
    (T_Patterns (\ _lhsIaddtilde ->
                     (let _lhsOattrs :: (Set.Set String)
                          _lhsOsem_lhs :: ([PP_Doc])
                          _lhsOcopy :: Patterns 
                          -- use rule "ExecutionPlan2Hs.ag"(line 427, column 36)
                          _lhsOattrs =
                              ({-# LINE 427 "ExecutionPlan2Hs.ag" #-}
                               Set.empty
                               {-# LINE 3536 "ExecutionPlan2Hs.hs" #-}
                               )
                          -- use rule "ExecutionPlan2Hs.ag"(line 424, column 29)
                          _lhsOsem_lhs =
                              ({-# LINE 424 "ExecutionPlan2Hs.ag" #-}
                               []
                               {-# LINE 3542 "ExecutionPlan2Hs.hs" #-}
                               )
                          -- self rule
                          _copy =
                              ({-# LINE 23 "./Patterns.ag" #-}
                               []
                               {-# LINE 3548 "ExecutionPlan2Hs.hs" #-}
                               )
                          -- self rule
                          _lhsOcopy =
                              ({-# LINE 23 "./Patterns.ag" #-}
                               _copy
                               {-# LINE 3554 "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
         options              : Options
         ruledefs             : Map.Map Identifier (Set.Set String)
         ruleuses             : Map.Map Identifier (Set.Set String)
         synmap               : Attributes
         terminaldefs         : Set.Set String
      synthesized attributes:
         allvisits            :  VisitStateState 
         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 addbang     : _
            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 ->
                            Options ->
                            (Map.Map Identifier (Set.Set String)) ->
                            (Map.Map Identifier (Set.Set String)) ->
                            Attributes ->
                            (Set.Set String) ->
                            ( ( VisitStateState ),(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,options_Inh_Visit :: Options,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 :: ( VisitStateState ),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 _lhsIoptions _lhsIruledefs _lhsIruleuses _lhsIsynmap _lhsIterminaldefs )  =
    (let ( _lhsOallvisits,_lhsOchildvisit,_lhsOintramap,_lhsOsem_visit,_lhsOt_visits,_lhsOusedrules,_lhsOvisitdefs,_lhsOvisituses) = sem _lhsIallchildvisit _lhsIallintramap _lhsIavisitdefs _lhsIavisituses _lhsIchildintros _lhsIinhmap _lhsImrules _lhsInt _lhsIoptions _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
                _lhsIoptions
                _lhsIruledefs
                _lhsIruleuses
                _lhsIsynmap
                _lhsIterminaldefs ->
                  (let _lhsOallvisits :: ( VisitStateState )
                       _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 212, column 11)
                       _lhsOallvisits =
                           ({-# LINE 212 "ExecutionPlan2Hs.ag" #-}
                            (ident_, from_, to_)
                            {-# LINE 3675 "ExecutionPlan2Hs.hs" #-}
                            )
                       -- "ExecutionPlan2Hs.ag"(line 262, column 11)
                       _lhsOt_visits =
                           ({-# LINE 262 "ExecutionPlan2Hs.ag" #-}
                            "type" >#< "T_" >|< _lhsInt >|< "_v" >|< ident_ >#< "=" >#< _inhpart     >#<
                               "Identity" >#< "(" >#< _synpart     >#< "T_" >|< _lhsInt >|< "_s" >|< to_ >#< ")"
                            {-# LINE 3682 "ExecutionPlan2Hs.hs" #-}
                            )
                       -- "ExecutionPlan2Hs.ag"(line 264, column 11)
                       _inhpart =
                           ({-# LINE 264 "ExecutionPlan2Hs.ag" #-}
                            if   Set.null inh_
                            then empty
                            else (ppSpaced $ map (\i -> (\x -> pp_parens x >#< "->") $ typeToHaskellString (Just _lhsInt) []
                                                  $ fromJust $ Map.lookup i _lhsIinhmap) $ Set.toList inh_)
                            {-# LINE 3691 "ExecutionPlan2Hs.hs" #-}
                            )
                       -- "ExecutionPlan2Hs.ag"(line 268, column 11)
                       _synpart =
                           ({-# LINE 268 "ExecutionPlan2Hs.ag" #-}
                            if   Set.null syn_
                            then empty
                            else (ppCommas $ map (\i -> typeToHaskellString (Just _lhsInt) [] $ fromJust $ Map.lookup i _lhsIsynmap) $ Set.toList syn_) >#< ","
                            {-# LINE 3699 "ExecutionPlan2Hs.hs" #-}
                            )
                       -- "ExecutionPlan2Hs.ag"(line 364, column 11)
                       _lhsOsem_visit =
                           ({-# LINE 364 "ExecutionPlan2Hs.ag" #-}
                            (from_, "v" >|< ident_ >#< "::" >#< "T_" >|< _lhsInt >|< "_v" >|< ident_
                                    >-< "v" >|< ident_ >#< (_inhargs     _LHS True) >#< "=" >#< "do"
                                    >-< indent 3 _sem_steps    )
                            {-# LINE 3707 "ExecutionPlan2Hs.hs" #-}
                            )
                       -- "ExecutionPlan2Hs.ag"(line 367, column 11)
                       _inhargs =
                           ({-# LINE 367 "ExecutionPlan2Hs.ag" #-}
                            \chn inh -> ppSpaced $ map (\arg -> attrname inh chn arg) $ Set.toList inh_
                            {-# LINE 3713 "ExecutionPlan2Hs.hs" #-}
                            )
                       -- "ExecutionPlan2Hs.ag"(line 368, column 11)
                       _synargs =
                           ({-# LINE 368 "ExecutionPlan2Hs.ag" #-}
                            ppSpaced $ map (\arg -> attrname False _LHS arg >#< ",") $ Set.toList syn_
                            {-# LINE 3719 "ExecutionPlan2Hs.hs" #-}
                            )
                       -- "ExecutionPlan2Hs.ag"(line 369, column 11)
                       _nextargs =
                           ({-# LINE 369 "ExecutionPlan2Hs.ag" #-}
                            ppSpaced $ Set.toList $ maybe Set.empty id $ Map.lookup to_ _lhsIallintramap
                            {-# LINE 3725 "ExecutionPlan2Hs.hs" #-}
                            )
                       -- "ExecutionPlan2Hs.ag"(line 370, column 11)
                       _sem_steps =
                           ({-# LINE 370 "ExecutionPlan2Hs.ag" #-}
                            _stepsIsem_steps
                            >-< "return" >#< "(" >#< _synargs     >#< "st" >|< to_ >#< _nextargs     >#< ")"
                            {-# LINE 3732 "ExecutionPlan2Hs.hs" #-}
                            )
                       -- "ExecutionPlan2Hs.ag"(line 466, column 11)
                       _lhsOchildvisit =
                           ({-# LINE 466 "ExecutionPlan2Hs.ag" #-}
                            Map.singleton ident_ $ \chn -> _addbang     ("(" >#< 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 3741 "ExecutionPlan2Hs.hs" #-}
                            )
                       -- "ExecutionPlan2Hs.ag"(line 470, column 11)
                       _addbang =
                           ({-# LINE 470 "ExecutionPlan2Hs.ag" #-}
                            \x -> if bangpats _lhsIoptions then "!" >|< x else x
                            {-# LINE 3747 "ExecutionPlan2Hs.hs" #-}
                            )
                       -- "ExecutionPlan2Hs.ag"(line 495, column 11)
                       _lhsOintramap =
                           ({-# LINE 495 "ExecutionPlan2Hs.ag" #-}
                            Map.singleton from_ $ (_uses     `Set.union` _nextintra    ) `Set.difference` _defs
                            {-# LINE 3753 "ExecutionPlan2Hs.hs" #-}
                            )
                       -- "ExecutionPlan2Hs.ag"(line 496, column 11)
                       _nextintra =
                           ({-# LINE 496 "ExecutionPlan2Hs.ag" #-}
                            maybe Set.empty id $ Map.lookup to_ _lhsIallintramap
                            {-# LINE 3759 "ExecutionPlan2Hs.hs" #-}
                            )
                       -- "ExecutionPlan2Hs.ag"(line 497, column 11)
                       _uses =
                           ({-# LINE 497 "ExecutionPlan2Hs.ag" #-}
                            _stepsIuses
                            {-# LINE 3765 "ExecutionPlan2Hs.hs" #-}
                            )
                       -- "ExecutionPlan2Hs.ag"(line 498, column 11)
                       _defs =
                           ({-# LINE 498 "ExecutionPlan2Hs.ag" #-}
                            _stepsIdefs `Set.union` (Set.map (lhsname True) inh_) `Set.union` _lhsIterminaldefs
                            {-# LINE 3771 "ExecutionPlan2Hs.hs" #-}
                            )
                       -- "ExecutionPlan2Hs.ag"(line 522, column 11)
                       _lhsOvisitdefs =
                           ({-# LINE 522 "ExecutionPlan2Hs.ag" #-}
                            Map.singleton ident_ syn_
                            {-# LINE 3777 "ExecutionPlan2Hs.hs" #-}
                            )
                       -- "ExecutionPlan2Hs.ag"(line 523, column 11)
                       _lhsOvisituses =
                           ({-# LINE 523 "ExecutionPlan2Hs.ag" #-}
                            Map.singleton ident_ inh_
                            {-# LINE 3783 "ExecutionPlan2Hs.hs" #-}
                            )
                       -- use rule "ExecutionPlan2Hs.ag"(line 396, column 56)
                       _lhsOusedrules =
                           ({-# LINE 396 "ExecutionPlan2Hs.ag" #-}
                            _stepsIusedrules
                            {-# LINE 3789 "ExecutionPlan2Hs.hs" #-}
                            )
                       -- copy rule (down)
                       _stepsOallchildvisit =
                           ({-# LINE 460 "ExecutionPlan2Hs.ag" #-}
                            _lhsIallchildvisit
                            {-# LINE 3795 "ExecutionPlan2Hs.hs" #-}
                            )
                       -- copy rule (down)
                       _stepsOavisitdefs =
                           ({-# LINE 528 "ExecutionPlan2Hs.ag" #-}
                            _lhsIavisitdefs
                            {-# LINE 3801 "ExecutionPlan2Hs.hs" #-}
                            )
                       -- copy rule (down)
                       _stepsOavisituses =
                           ({-# LINE 529 "ExecutionPlan2Hs.ag" #-}
                            _lhsIavisituses
                            {-# LINE 3807 "ExecutionPlan2Hs.hs" #-}
                            )
                       -- copy rule (down)
                       _stepsOchildintros =
                           ({-# LINE 384 "ExecutionPlan2Hs.ag" #-}
                            _lhsIchildintros
                            {-# LINE 3813 "ExecutionPlan2Hs.hs" #-}
                            )
                       -- copy rule (down)
                       _stepsOmrules =
                           ({-# LINE 373 "ExecutionPlan2Hs.ag" #-}
                            _lhsImrules
                            {-# LINE 3819 "ExecutionPlan2Hs.hs" #-}
                            )
                       -- copy rule (down)
                       _stepsOruledefs =
                           ({-# LINE 503 "ExecutionPlan2Hs.ag" #-}
                            _lhsIruledefs
                            {-# LINE 3825 "ExecutionPlan2Hs.hs" #-}
                            )
                       -- copy rule (down)
                       _stepsOruleuses =
                           ({-# LINE 504 "ExecutionPlan2Hs.ag" #-}
                            _lhsIruleuses
                            {-# LINE 3831 "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 377, column 16)
                           _lhsOsem_steps =
                               ({-# LINE 377 "ExecutionPlan2Hs.ag" #-}
                                maybe  (error $ "Child " ++ show child_ ++ " not found") id $ Map.lookup child_ _lhsIchildintros
                                {-# LINE 3910 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- "ExecutionPlan2Hs.ag"(line 540, column 16)
                           _lhsOdefs =
                               ({-# LINE 540 "ExecutionPlan2Hs.ag" #-}
                                Set.singleton $ locname child_
                                {-# LINE 3916 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- use rule "ExecutionPlan2Hs.ag"(line 396, column 56)
                           _lhsOusedrules =
                               ({-# LINE 396 "ExecutionPlan2Hs.ag" #-}
                                Set.empty
                                {-# LINE 3922 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- use rule "ExecutionPlan2Hs.ag"(line 536, column 38)
                           _lhsOuses =
                               ({-# LINE 536 "ExecutionPlan2Hs.ag" #-}
                                Set.empty
                                {-# LINE 3928 "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 378, column 16)
                           _lhsOsem_steps =
                               ({-# LINE 378 "ExecutionPlan2Hs.ag" #-}
                                (maybe (error $ "Visit " ++ show visit_ ++ " not found") id $ Map.lookup visit_ _lhsIallchildvisit) $ child_
                                {-# LINE 3951 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- "ExecutionPlan2Hs.ag"(line 541, column 16)
                           _lhsOdefs =
                               ({-# LINE 541 "ExecutionPlan2Hs.ag" #-}
                                maybe (error "Visit not found") (Set.map $ attrname True child_) $ Map.lookup visit_ _lhsIavisitdefs
                                {-# LINE 3957 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- "ExecutionPlan2Hs.ag"(line 542, column 16)
                           _lhsOuses =
                               ({-# LINE 542 "ExecutionPlan2Hs.ag" #-}
                                Set.insert (locname child_) $
                                   maybe (error "Visit not found") (Set.map $ attrname False child_) $ Map.lookup visit_ _lhsIavisituses
                                {-# LINE 3964 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- use rule "ExecutionPlan2Hs.ag"(line 396, column 56)
                           _lhsOusedrules =
                               ({-# LINE 396 "ExecutionPlan2Hs.ag" #-}
                                Set.empty
                                {-# LINE 3970 "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 _lhsOsem_steps :: PP_Doc
                           _lhsOusedrules :: (Set.Set Identifier)
                           _lhsOdefs :: (Set.Set String)
                           _lhsOuses :: (Set.Set String)
                           -- "ExecutionPlan2Hs.ag"(line 376, column 16)
                           _lhsOsem_steps =
                               ({-# LINE 376 "ExecutionPlan2Hs.ag" #-}
                                maybe  (error $ "Rule "  ++ show name_  ++ " not found") id $ Map.lookup name_  _lhsImrules
                                {-# LINE 3991 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- "ExecutionPlan2Hs.ag"(line 400, column 9)
                           _lhsOusedrules =
                               ({-# LINE 400 "ExecutionPlan2Hs.ag" #-}
                                Set.singleton name_
                                {-# LINE 3997 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- "ExecutionPlan2Hs.ag"(line 538, column 16)
                           _lhsOdefs =
                               ({-# LINE 538 "ExecutionPlan2Hs.ag" #-}
                                maybe (error "Rule not found") id $ Map.lookup name_ _lhsIruledefs
                                {-# LINE 4003 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- "ExecutionPlan2Hs.ag"(line 539, column 16)
                           _lhsOuses =
                               ({-# LINE 539 "ExecutionPlan2Hs.ag" #-}
                                maybe (error "Rule not found") id $ Map.lookup name_ _lhsIruleuses
                                {-# LINE 4009 "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 535, column 38)
                           _lhsOdefs =
                               ({-# LINE 535 "ExecutionPlan2Hs.ag" #-}
                                _stepsIdefs
                                {-# LINE 4041 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- use rule "ExecutionPlan2Hs.ag"(line 374, column 43)
                           _lhsOsem_steps =
                               ({-# LINE 374 "ExecutionPlan2Hs.ag" #-}
                                _stepsIsem_steps
                                {-# LINE 4047 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- use rule "ExecutionPlan2Hs.ag"(line 396, column 56)
                           _lhsOusedrules =
                               ({-# LINE 396 "ExecutionPlan2Hs.ag" #-}
                                _stepsIusedrules
                                {-# LINE 4053 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- use rule "ExecutionPlan2Hs.ag"(line 536, column 38)
                           _lhsOuses =
                               ({-# LINE 536 "ExecutionPlan2Hs.ag" #-}
                                _stepsIuses
                                {-# LINE 4059 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOallchildvisit =
                               ({-# LINE 460 "ExecutionPlan2Hs.ag" #-}
                                _lhsIallchildvisit
                                {-# LINE 4065 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOavisitdefs =
                               ({-# LINE 528 "ExecutionPlan2Hs.ag" #-}
                                _lhsIavisitdefs
                                {-# LINE 4071 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOavisituses =
                               ({-# LINE 529 "ExecutionPlan2Hs.ag" #-}
                                _lhsIavisituses
                                {-# LINE 4077 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOchildintros =
                               ({-# LINE 384 "ExecutionPlan2Hs.ag" #-}
                                _lhsIchildintros
                                {-# LINE 4083 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOmrules =
                               ({-# LINE 373 "ExecutionPlan2Hs.ag" #-}
                                _lhsImrules
                                {-# LINE 4089 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOruledefs =
                               ({-# LINE 503 "ExecutionPlan2Hs.ag" #-}
                                _lhsIruledefs
                                {-# LINE 4095 "ExecutionPlan2Hs.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOruleuses =
                               ({-# LINE 504 "ExecutionPlan2Hs.ag" #-}
                                _lhsIruleuses
                                {-# LINE 4101 "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 535, column 38)
                            _lhsOdefs =
                                ({-# LINE 535 "ExecutionPlan2Hs.ag" #-}
                                 _hdIdefs `Set.union` _tlIdefs
                                 {-# LINE 4191 "ExecutionPlan2Hs.hs" #-}
                                 )
                            -- use rule "ExecutionPlan2Hs.ag"(line 374, column 43)
                            _lhsOsem_steps =
                                ({-# LINE 374 "ExecutionPlan2Hs.ag" #-}
                                 _hdIsem_steps >-< _tlIsem_steps
                                 {-# LINE 4197 "ExecutionPlan2Hs.hs" #-}
                                 )
                            -- use rule "ExecutionPlan2Hs.ag"(line 396, column 56)
                            _lhsOusedrules =
                                ({-# LINE 396 "ExecutionPlan2Hs.ag" #-}
                                 _hdIusedrules `Set.union` _tlIusedrules
                                 {-# LINE 4203 "ExecutionPlan2Hs.hs" #-}
                                 )
                            -- use rule "ExecutionPlan2Hs.ag"(line 536, column 38)
                            _lhsOuses =
                                ({-# LINE 536 "ExecutionPlan2Hs.ag" #-}
                                 _hdIuses `Set.union` _tlIuses
                                 {-# LINE 4209 "ExecutionPlan2Hs.hs" #-}
                                 )
                            -- copy rule (down)
                            _hdOallchildvisit =
                                ({-# LINE 460 "ExecutionPlan2Hs.ag" #-}
                                 _lhsIallchildvisit
                                 {-# LINE 4215 "ExecutionPlan2Hs.hs" #-}
                                 )
                            -- copy rule (down)
                            _hdOavisitdefs =
                                ({-# LINE 528 "ExecutionPlan2Hs.ag" #-}
                                 _lhsIavisitdefs
                                 {-# LINE 4221 "ExecutionPlan2Hs.hs" #-}
                                 )
                            -- copy rule (down)
                            _hdOavisituses =
                                ({-# LINE 529 "ExecutionPlan2Hs.ag" #-}
                                 _lhsIavisituses
                                 {-# LINE 4227 "ExecutionPlan2Hs.hs" #-}
                                 )
                            -- copy rule (down)
                            _hdOchildintros =
                                ({-# LINE 384 "ExecutionPlan2Hs.ag" #-}
                                 _lhsIchildintros
                                 {-# LINE 4233 "ExecutionPlan2Hs.hs" #-}
                                 )
                            -- copy rule (down)
                            _hdOmrules =
                                ({-# LINE 373 "ExecutionPlan2Hs.ag" #-}
                                 _lhsImrules
                                 {-# LINE 4239 "ExecutionPlan2Hs.hs" #-}
                                 )
                            -- copy rule (down)
                            _hdOruledefs =
                                ({-# LINE 503 "ExecutionPlan2Hs.ag" #-}
                                 _lhsIruledefs
                                 {-# LINE 4245 "ExecutionPlan2Hs.hs" #-}
                                 )
                            -- copy rule (down)
                            _hdOruleuses =
                                ({-# LINE 504 "ExecutionPlan2Hs.ag" #-}
                                 _lhsIruleuses
                                 {-# LINE 4251 "ExecutionPlan2Hs.hs" #-}
                                 )
                            -- copy rule (down)
                            _tlOallchildvisit =
                                ({-# LINE 460 "ExecutionPlan2Hs.ag" #-}
                                 _lhsIallchildvisit
                                 {-# LINE 4257 "ExecutionPlan2Hs.hs" #-}
                                 )
                            -- copy rule (down)
                            _tlOavisitdefs =
                                ({-# LINE 528 "ExecutionPlan2Hs.ag" #-}
                                 _lhsIavisitdefs
                                 {-# LINE 4263 "ExecutionPlan2Hs.hs" #-}
                                 )
                            -- copy rule (down)
                            _tlOavisituses =
                                ({-# LINE 529 "ExecutionPlan2Hs.ag" #-}
                                 _lhsIavisituses
                                 {-# LINE 4269 "ExecutionPlan2Hs.hs" #-}
                                 )
                            -- copy rule (down)
                            _tlOchildintros =
                                ({-# LINE 384 "ExecutionPlan2Hs.ag" #-}
                                 _lhsIchildintros
                                 {-# LINE 4275 "ExecutionPlan2Hs.hs" #-}
                                 )
                            -- copy rule (down)
                            _tlOmrules =
                                ({-# LINE 373 "ExecutionPlan2Hs.ag" #-}
                                 _lhsImrules
                                 {-# LINE 4281 "ExecutionPlan2Hs.hs" #-}
                                 )
                            -- copy rule (down)
                            _tlOruledefs =
                                ({-# LINE 503 "ExecutionPlan2Hs.ag" #-}
                                 _lhsIruledefs
                                 {-# LINE 4287 "ExecutionPlan2Hs.hs" #-}
                                 )
                            -- copy rule (down)
                            _tlOruleuses =
                                ({-# LINE 504 "ExecutionPlan2Hs.ag" #-}
                                 _lhsIruleuses
                                 {-# LINE 4293 "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 535, column 38)
                            _lhsOdefs =
                                ({-# LINE 535 "ExecutionPlan2Hs.ag" #-}
                                 Set.empty
                                 {-# LINE 4317 "ExecutionPlan2Hs.hs" #-}
                                 )
                            -- use rule "ExecutionPlan2Hs.ag"(line 374, column 43)
                            _lhsOsem_steps =
                                ({-# LINE 374 "ExecutionPlan2Hs.ag" #-}
                                 empty
                                 {-# LINE 4323 "ExecutionPlan2Hs.hs" #-}
                                 )
                            -- use rule "ExecutionPlan2Hs.ag"(line 396, column 56)
                            _lhsOusedrules =
                                ({-# LINE 396 "ExecutionPlan2Hs.ag" #-}
                                 Set.empty
                                 {-# LINE 4329 "ExecutionPlan2Hs.hs" #-}
                                 )
                            -- use rule "ExecutionPlan2Hs.ag"(line 536, column 38)
                            _lhsOuses =
                                ({-# LINE 536 "ExecutionPlan2Hs.ag" #-}
                                 Set.empty
                                 {-# LINE 4335 "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
         options              : Options
         ruledefs             : Map.Map Identifier (Set.Set String)
         ruleuses             : Map.Map Identifier (Set.Set String)
         synmap               : Attributes
         terminaldefs         : Set.Set String
      synthesized attributes:
         allvisits            : [VisitStateState]
         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 ->
                              Options ->
                              (Map.Map Identifier (Set.Set String)) ->
                              (Map.Map Identifier (Set.Set String)) ->
                              Attributes ->
                              (Set.Set String) ->
                              ( ([VisitStateState]),(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,options_Inh_Visits :: Options,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 :: ([VisitStateState]),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 _lhsIoptions _lhsIruledefs _lhsIruleuses _lhsIsynmap _lhsIterminaldefs )  =
    (let ( _lhsOallvisits,_lhsOchildvisit,_lhsOintramap,_lhsOsem_visit,_lhsOt_visits,_lhsOusedrules,_lhsOvisitdefs,_lhsOvisituses) = sem _lhsIallchildvisit _lhsIallintramap _lhsIavisitdefs _lhsIavisituses _lhsIchildintros _lhsIinhmap _lhsImrules _lhsInt _lhsIoptions _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
                 _lhsIoptions
                 _lhsIruledefs
                 _lhsIruleuses
                 _lhsIsynmap
                 _lhsIterminaldefs ->
                   (let _lhsOallvisits :: ([VisitStateState])
                        _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
                        _hdOoptions :: Options
                        _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
                        _tlOoptions :: Options
                        _tlOruledefs :: (Map.Map Identifier (Set.Set String))
                        _tlOruleuses :: (Map.Map Identifier (Set.Set String))
                        _tlOsynmap :: Attributes
                        _tlOterminaldefs :: (Set.Set String)
                        _hdIallvisits :: ( VisitStateState )
                        _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 :: ([VisitStateState])
                        _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 207, column 29)
                        _lhsOallvisits =
                            ({-# LINE 207 "ExecutionPlan2Hs.ag" #-}
                             _hdIallvisits : _tlIallvisits
                             {-# LINE 4469 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- use rule "ExecutionPlan2Hs.ag"(line 458, column 37)
                        _lhsOchildvisit =
                            ({-# LINE 458 "ExecutionPlan2Hs.ag" #-}
                             _hdIchildvisit `Map.union` _tlIchildvisit
                             {-# LINE 4475 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- use rule "ExecutionPlan2Hs.ag"(line 480, column 34)
                        _lhsOintramap =
                            ({-# LINE 480 "ExecutionPlan2Hs.ag" #-}
                             _hdIintramap `uwSetUnion` _tlIintramap
                             {-# LINE 4481 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- use rule "ExecutionPlan2Hs.ag"(line 361, column 29)
                        _lhsOsem_visit =
                            ({-# LINE 361 "ExecutionPlan2Hs.ag" #-}
                             _hdIsem_visit : _tlIsem_visit
                             {-# LINE 4487 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- use rule "ExecutionPlan2Hs.ag"(line 253, column 54)
                        _lhsOt_visits =
                            ({-# LINE 253 "ExecutionPlan2Hs.ag" #-}
                             _hdIt_visits >-< _tlIt_visits
                             {-# LINE 4493 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- use rule "ExecutionPlan2Hs.ag"(line 396, column 56)
                        _lhsOusedrules =
                            ({-# LINE 396 "ExecutionPlan2Hs.ag" #-}
                             _hdIusedrules `Set.union` _tlIusedrules
                             {-# LINE 4499 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- use rule "ExecutionPlan2Hs.ag"(line 518, column 36)
                        _lhsOvisitdefs =
                            ({-# LINE 518 "ExecutionPlan2Hs.ag" #-}
                             _hdIvisitdefs `uwSetUnion` _tlIvisitdefs
                             {-# LINE 4505 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- use rule "ExecutionPlan2Hs.ag"(line 519, column 36)
                        _lhsOvisituses =
                            ({-# LINE 519 "ExecutionPlan2Hs.ag" #-}
                             _hdIvisituses `uwSetUnion` _tlIvisituses
                             {-# LINE 4511 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOallchildvisit =
                            ({-# LINE 457 "ExecutionPlan2Hs.ag" #-}
                             _lhsIallchildvisit
                             {-# LINE 4517 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOallintramap =
                            ({-# LINE 479 "ExecutionPlan2Hs.ag" #-}
                             _lhsIallintramap
                             {-# LINE 4523 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOavisitdefs =
                            ({-# LINE 528 "ExecutionPlan2Hs.ag" #-}
                             _lhsIavisitdefs
                             {-# LINE 4529 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOavisituses =
                            ({-# LINE 529 "ExecutionPlan2Hs.ag" #-}
                             _lhsIavisituses
                             {-# LINE 4535 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOchildintros =
                            ({-# LINE 384 "ExecutionPlan2Hs.ag" #-}
                             _lhsIchildintros
                             {-# LINE 4541 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOinhmap =
                            ({-# LINE 194 "ExecutionPlan2Hs.ag" #-}
                             _lhsIinhmap
                             {-# LINE 4547 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOmrules =
                            ({-# LINE 373 "ExecutionPlan2Hs.ag" #-}
                             _lhsImrules
                             {-# LINE 4553 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOnt =
                            ({-# LINE 253 "ExecutionPlan2Hs.ag" #-}
                             _lhsInt
                             {-# LINE 4559 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOoptions =
                            ({-# LINE 41 "ExecutionPlan2Hs.ag" #-}
                             _lhsIoptions
                             {-# LINE 4565 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOruledefs =
                            ({-# LINE 503 "ExecutionPlan2Hs.ag" #-}
                             _lhsIruledefs
                             {-# LINE 4571 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOruleuses =
                            ({-# LINE 504 "ExecutionPlan2Hs.ag" #-}
                             _lhsIruleuses
                             {-# LINE 4577 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOsynmap =
                            ({-# LINE 195 "ExecutionPlan2Hs.ag" #-}
                             _lhsIsynmap
                             {-# LINE 4583 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOterminaldefs =
                            ({-# LINE 482 "ExecutionPlan2Hs.ag" #-}
                             _lhsIterminaldefs
                             {-# LINE 4589 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOallchildvisit =
                            ({-# LINE 457 "ExecutionPlan2Hs.ag" #-}
                             _lhsIallchildvisit
                             {-# LINE 4595 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOallintramap =
                            ({-# LINE 479 "ExecutionPlan2Hs.ag" #-}
                             _lhsIallintramap
                             {-# LINE 4601 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOavisitdefs =
                            ({-# LINE 528 "ExecutionPlan2Hs.ag" #-}
                             _lhsIavisitdefs
                             {-# LINE 4607 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOavisituses =
                            ({-# LINE 529 "ExecutionPlan2Hs.ag" #-}
                             _lhsIavisituses
                             {-# LINE 4613 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOchildintros =
                            ({-# LINE 384 "ExecutionPlan2Hs.ag" #-}
                             _lhsIchildintros
                             {-# LINE 4619 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOinhmap =
                            ({-# LINE 194 "ExecutionPlan2Hs.ag" #-}
                             _lhsIinhmap
                             {-# LINE 4625 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOmrules =
                            ({-# LINE 373 "ExecutionPlan2Hs.ag" #-}
                             _lhsImrules
                             {-# LINE 4631 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOnt =
                            ({-# LINE 253 "ExecutionPlan2Hs.ag" #-}
                             _lhsInt
                             {-# LINE 4637 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOoptions =
                            ({-# LINE 41 "ExecutionPlan2Hs.ag" #-}
                             _lhsIoptions
                             {-# LINE 4643 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOruledefs =
                            ({-# LINE 503 "ExecutionPlan2Hs.ag" #-}
                             _lhsIruledefs
                             {-# LINE 4649 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOruleuses =
                            ({-# LINE 504 "ExecutionPlan2Hs.ag" #-}
                             _lhsIruleuses
                             {-# LINE 4655 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOsynmap =
                            ({-# LINE 195 "ExecutionPlan2Hs.ag" #-}
                             _lhsIsynmap
                             {-# LINE 4661 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOterminaldefs =
                            ({-# LINE 482 "ExecutionPlan2Hs.ag" #-}
                             _lhsIterminaldefs
                             {-# LINE 4667 "ExecutionPlan2Hs.hs" #-}
                             )
                        ( _hdIallvisits,_hdIchildvisit,_hdIintramap,_hdIsem_visit,_hdIt_visits,_hdIusedrules,_hdIvisitdefs,_hdIvisituses) =
                            hd_ _hdOallchildvisit _hdOallintramap _hdOavisitdefs _hdOavisituses _hdOchildintros _hdOinhmap _hdOmrules _hdOnt _hdOoptions _hdOruledefs _hdOruleuses _hdOsynmap _hdOterminaldefs 
                        ( _tlIallvisits,_tlIchildvisit,_tlIintramap,_tlIsem_visit,_tlIt_visits,_tlIusedrules,_tlIvisitdefs,_tlIvisituses) =
                            tl_ _tlOallchildvisit _tlOallintramap _tlOavisitdefs _tlOavisituses _tlOchildintros _tlOinhmap _tlOmrules _tlOnt _tlOoptions _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
                 _lhsIoptions
                 _lhsIruledefs
                 _lhsIruleuses
                 _lhsIsynmap
                 _lhsIterminaldefs ->
                   (let _lhsOallvisits :: ([VisitStateState])
                        _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 207, column 29)
                        _lhsOallvisits =
                            ({-# LINE 207 "ExecutionPlan2Hs.ag" #-}
                             []
                             {-# LINE 4701 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- use rule "ExecutionPlan2Hs.ag"(line 458, column 37)
                        _lhsOchildvisit =
                            ({-# LINE 458 "ExecutionPlan2Hs.ag" #-}
                             Map.empty
                             {-# LINE 4707 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- use rule "ExecutionPlan2Hs.ag"(line 480, column 34)
                        _lhsOintramap =
                            ({-# LINE 480 "ExecutionPlan2Hs.ag" #-}
                             Map.empty
                             {-# LINE 4713 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- use rule "ExecutionPlan2Hs.ag"(line 361, column 29)
                        _lhsOsem_visit =
                            ({-# LINE 361 "ExecutionPlan2Hs.ag" #-}
                             []
                             {-# LINE 4719 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- use rule "ExecutionPlan2Hs.ag"(line 253, column 54)
                        _lhsOt_visits =
                            ({-# LINE 253 "ExecutionPlan2Hs.ag" #-}
                             empty
                             {-# LINE 4725 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- use rule "ExecutionPlan2Hs.ag"(line 396, column 56)
                        _lhsOusedrules =
                            ({-# LINE 396 "ExecutionPlan2Hs.ag" #-}
                             Set.empty
                             {-# LINE 4731 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- use rule "ExecutionPlan2Hs.ag"(line 518, column 36)
                        _lhsOvisitdefs =
                            ({-# LINE 518 "ExecutionPlan2Hs.ag" #-}
                             Map.empty
                             {-# LINE 4737 "ExecutionPlan2Hs.hs" #-}
                             )
                        -- use rule "ExecutionPlan2Hs.ag"(line 519, column 36)
                        _lhsOvisituses =
                            ({-# LINE 519 "ExecutionPlan2Hs.ag" #-}
                             Map.empty
                             {-# LINE 4743 "ExecutionPlan2Hs.hs" #-}
                             )
                    in  ( _lhsOallvisits,_lhsOchildvisit,_lhsOintramap,_lhsOsem_visit,_lhsOt_visits,_lhsOusedrules,_lhsOvisitdefs,_lhsOvisituses))) )