diff --git a/dist/build/ewe/ewe-tmp/Language/EWE/Parser.hs b/dist/build/ewe/ewe-tmp/Language/EWE/Parser.hs
--- a/dist/build/ewe/ewe-tmp/Language/EWE/Parser.hs
+++ b/dist/build/ewe/ewe-tmp/Language/EWE/Parser.hs
@@ -584,35 +584,7 @@
 pEWE s = runAlex s parse
 {-# LINE 1 "templates/GenericTemplate.hs" #-}
 {-# LINE 1 "templates/GenericTemplate.hs" #-}
-{-# LINE 1 "<línea-de-orden>" #-}
-{-# LINE 8 "<línea-de-orden>" #-}
-# 1 "/usr/include/stdc-predef.h" 1 3 4
-
-# 17 "/usr/include/stdc-predef.h" 3 4
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 8 "<línea-de-orden>" 2
+{-# LINE 1 "<command-line>" #-}
 {-# LINE 1 "templates/GenericTemplate.hs" #-}
 -- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp 
 
diff --git a/dist/build/ewe/ewe-tmp/Language/EWE/Scanner.hs b/dist/build/ewe/ewe-tmp/Language/EWE/Scanner.hs
--- a/dist/build/ewe/ewe-tmp/Language/EWE/Scanner.hs
+++ b/dist/build/ewe/ewe-tmp/Language/EWE/Scanner.hs
@@ -32,40 +32,7 @@
 #endif
 {-# LINE 1 "templates/wrappers.hs" #-}
 {-# LINE 1 "templates/wrappers.hs" #-}
-{-# LINE 1 "<línea-de-orden>" #-}
-
-
-
-
-
-
-# 1 "/usr/include/stdc-predef.h" 1 3 4
-
-# 17 "/usr/include/stdc-predef.h" 3 4
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 6 "<línea-de-orden>" 2
+{-# LINE 1 "<command-line>" #-}
 {-# LINE 1 "templates/wrappers.hs" #-}
 -- -----------------------------------------------------------------------------
 -- Alex wrapper code.
@@ -402,41 +369,7 @@
 alex_action_26 =  returnId 
 {-# LINE 1 "templates/GenericTemplate.hs" #-}
 {-# LINE 1 "templates/GenericTemplate.hs" #-}
-{-# LINE 1 "<línea-de-orden>" #-}
-
-
-
-
-
-
-
-# 1 "/usr/include/stdc-predef.h" 1 3 4
-
-# 17 "/usr/include/stdc-predef.h" 3 4
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 7 "<línea-de-orden>" 2
+{-# LINE 1 "<command-line>" #-}
 {-# LINE 1 "templates/GenericTemplate.hs" #-}
 -- -----------------------------------------------------------------------------
 -- ALEX TEMPLATE
diff --git a/ewe.cabal b/ewe.cabal
--- a/ewe.cabal
+++ b/ewe.cabal
@@ -2,7 +2,7 @@
 -- see http://haskell.org/cabal/users-guide/
 
 name:                ewe
-version:             0.1.0.30
+version:             0.1.0.31
 synopsis:            An language using in Programming Languages teaching
 description:         Another implemention of the EWE programming language originally created and developed by Kent D. Lee. EWE is an extension of the RAM programming language. RAM was created by Sethi.
 homepage:            http://github.com/jfcmacro/ewe
@@ -16,23 +16,23 @@
 cabal-version:       >=1.8
 
 executable ewe
-  main-is:             Main.hs
-  Build-depends:       base >=4.5 && < 5,
-                       transformers >=0.3,
-                       mtl >= 2.1,
-                       containers >= 0.4.2,
-                       array >= 0.4.0.0
-  hs-source-dirs:      src
-  build-tools:         alex, happy
-  other-modules:       Language.EWE.AbsSyn,
-                       Language.EWE.Utils,
-                       Language.EWE.VM,
-                       Language.EWE.Token,
-                       Language.EWE.Scanner,
-                       Language.EWE.CheckGrammar,
-                       Language.EWE.Parser
-  x-agmodule:          file: "src/Language/EWE/AbsSyn.ag" options : data, pretty, haskellsyntax, module "Language.EWE.AbsSyn"
-  x-agmodule:          file: "src/Language/EWE/CheckGrammar.ag" options : semfuns, pretty, haskellsyntax, catas, wrappers, signatures, module "Language.EWE.CheckGrammar"
+  main-is:          Main.hs
+  Build-depends:    base >=4.5 && < 5,
+                    transformers >=0.3,
+                    mtl >= 2.1,
+                    containers >= 0.4.2,
+                    array >= 0.4.0.0
+  hs-source-dirs:   src, src-ag
+  build-tools:      alex, happy
+  other-modules:    Language.EWE.AbsSyn,
+                    Language.EWE.Utils,
+                    Language.EWE.VM,
+                    Language.EWE.Token,
+                    Language.EWE.Scanner,
+                    Language.EWE.CheckGrammar,
+                    Language.EWE.Parser
+  x-agmodule:        file: "src-ag/Language/EWE/AbsSyn.ag" options : data, pretty, haskellsyntax, module "Language.EWE.AbsSyn", output "src/Language/EWE/AbsSyn.hs"
+  x-agmodule:       file: "src-ag/Language/EWE/CheckGrammar.ag" options : semfuns, pretty, haskellsyntax, catas, wrappers, signatures, module "Language.EWE.CheckGrammar", output "src/Language/EWE/CheckGrammar.hs"
 
 source-repository head
   type:	    git
diff --git a/src/Language/EWE/AbsSyn.ag b/src/Language/EWE/AbsSyn.ag
deleted file mode 100644
--- a/src/Language/EWE/AbsSyn.ag
+++ /dev/null
@@ -1,57 +0,0 @@
-
-data MRef | MRefI  Int
-          | MRefId String
-
-deriving MRef : Eq, Show
-
-data Cond | CLET
-          | CLT
-          | CGET
-          | CGT
-          | CE
-          | CNE
-
-deriving Cond: Eq, Show
-
-type Equ = (String,Int)
-
-type Equates = [Equ]
-
-type Labels = [String]
-
-data Stmt | Stmt labels :: Labels instr :: Instr
-
-deriving Stmt: Eq, Show
-
-type Stmts = [Stmt]
-
-data Prog | Prg stms    :: Stmts
-                equates :: Equates
-
-deriving Prog : Eq, Show
-
-data Instr | IMMI  dest :: MRef Int         -- Move a int into memory
-           | IMMS  dest :: MRef String      -- Move a string into memory
-           | IMRPC dest :: MRef Int         -- Move a relative PC into memory
-           | SPC   oper :: MRef             -- Set PC from memory
-           | IMMM  dest,oper :: MRef        -- Move Memory to Memory
-           | IAdd  dest,left,right :: MRef  -- Add two Memory References
-           | ISub  dest,left,right :: MRef  -- Sub two Memory References
-           | IMul  dest,left,right :: MRef  -- Mul two Memory References
-           | IDiv  dest,left,right :: MRef  -- Div two Memory References
-           | IMod  dest,left,right ::  MRef -- Mod two Memory References
-           | IMRI  dest,oper :: MRef Int    -- Move to Memory Ref
-           | IMMR  dest :: MRef Int oper :: MRef -- Move to Memory Ref
-           | IRI   oper :: MRef             -- Read an Int into a Mem Ref
-           | IWI   oper :: MRef             -- Write an Int from a Mem Ref
-           | IRS   left, right :: MRef      -- Read a Str
-           | IWS   oper :: MRef             -- Write a Str
-           | IGI  Int                       -- Goto to line
-           | IGS  String                    -- Goto sym
-           | IFI  bcond :: MRef Cond then :: MRef Int        -- If Cond then Int
-           | IFS  bcond :: MRef Cond then :: MRef String     --
-           | IH                             -- Halt
-           | IB                             -- Break
-           | INI
-
-deriving Instr : Eq, Show
diff --git a/src/Language/EWE/AbsSyn.hs b/src/Language/EWE/AbsSyn.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/EWE/AbsSyn.hs
@@ -0,0 +1,181 @@
+
+
+-- UUAGC 0.9.50 (src-ag/Language/EWE/AbsSyn.ag)
+module Language.EWE.AbsSyn where
+-- Cond --------------------------------------------------------
+{-
+   alternatives:
+      alternative CLET:
+      alternative CLT:
+      alternative CGET:
+      alternative CGT:
+      alternative CE:
+      alternative CNE:
+-}
+data Cond = CLET
+          | CLT
+          | CGET
+          | CGT
+          | CE
+          | CNE
+          deriving ( Eq,Show)
+-- Equ ---------------------------------------------------------
+{-
+   alternatives:
+      alternative Tuple:
+         child x1             : {String}
+         child x2             : {Int}
+-}
+type Equ = ( (String),(Int))
+-- Equates -----------------------------------------------------
+{-
+   alternatives:
+      alternative Cons:
+         child hd             : Equ 
+         child tl             : Equates 
+      alternative Nil:
+-}
+type Equates = [Equ]
+-- Instr -------------------------------------------------------
+{-
+   alternatives:
+      alternative IMMI:
+         child dest           : MRef 
+         child int            : {Int}
+      alternative IMMS:
+         child dest           : MRef 
+         child string         : {String}
+      alternative IMRPC:
+         child dest           : MRef 
+         child int            : {Int}
+      alternative SPC:
+         child oper           : MRef 
+      alternative IMMM:
+         child dest           : MRef 
+         child oper           : MRef 
+      alternative IAdd:
+         child dest           : MRef 
+         child left           : MRef 
+         child right          : MRef 
+      alternative ISub:
+         child dest           : MRef 
+         child left           : MRef 
+         child right          : MRef 
+      alternative IMul:
+         child dest           : MRef 
+         child left           : MRef 
+         child right          : MRef 
+      alternative IDiv:
+         child dest           : MRef 
+         child left           : MRef 
+         child right          : MRef 
+      alternative IMod:
+         child dest           : MRef 
+         child left           : MRef 
+         child right          : MRef 
+      alternative IMRI:
+         child dest           : MRef 
+         child oper           : MRef 
+         child int            : {Int}
+      alternative IMMR:
+         child dest           : MRef 
+         child int            : {Int}
+         child oper           : MRef 
+      alternative IRI:
+         child oper           : MRef 
+      alternative IWI:
+         child oper           : MRef 
+      alternative IRS:
+         child left           : MRef 
+         child right          : MRef 
+      alternative IWS:
+         child oper           : MRef 
+      alternative IGI:
+         child int            : {Int}
+      alternative IGS:
+         child string         : {String}
+      alternative IFI:
+         child bcond          : MRef 
+         child cond           : Cond 
+         child then           : MRef 
+         child int            : {Int}
+      alternative IFS:
+         child bcond          : MRef 
+         child cond           : Cond 
+         child then           : MRef 
+         child string         : {String}
+      alternative IH:
+      alternative IB:
+      alternative INI:
+-}
+data Instr = IMMI (MRef) (Int)
+           | IMMS (MRef) (String)
+           | IMRPC (MRef) (Int)
+           | SPC (MRef)
+           | IMMM (MRef) (MRef)
+           | IAdd (MRef) (MRef) (MRef)
+           | ISub (MRef) (MRef) (MRef)
+           | IMul (MRef) (MRef) (MRef)
+           | IDiv (MRef) (MRef) (MRef)
+           | IMod (MRef) (MRef) (MRef)
+           | IMRI (MRef) (MRef) (Int)
+           | IMMR (MRef) (Int) (MRef)
+           | IRI (MRef)
+           | IWI (MRef)
+           | IRS (MRef) (MRef)
+           | IWS (MRef)
+           | IGI (Int)
+           | IGS (String)
+           | IFI (MRef) (Cond) (MRef) (Int)
+           | IFS (MRef) (Cond) (MRef) (String)
+           | IH
+           | IB
+           | INI
+           deriving ( Eq,Show)
+-- Labels ------------------------------------------------------
+{-
+   alternatives:
+      alternative Cons:
+         child hd             : {String}
+         child tl             : Labels 
+      alternative Nil:
+-}
+type Labels = [(String)]
+-- MRef --------------------------------------------------------
+{-
+   alternatives:
+      alternative MRefI:
+         child int            : {Int}
+      alternative MRefId:
+         child string         : {String}
+-}
+data MRef = MRefI (Int)
+          | MRefId (String)
+          deriving ( Eq,Show)
+-- Prog --------------------------------------------------------
+{-
+   alternatives:
+      alternative Prg:
+         child stms           : Stmts 
+         child equates        : Equates 
+-}
+data Prog = Prg (Stmts) (Equates)
+          deriving ( Eq,Show)
+-- Stmt --------------------------------------------------------
+{-
+   alternatives:
+      alternative Stmt:
+         child labels         : Labels 
+         child instr          : Instr 
+-}
+data Stmt = Stmt (Labels) (Instr)
+          deriving ( Eq,Show)
+-- Stmts -------------------------------------------------------
+{-
+   alternatives:
+      alternative Cons:
+         child hd             : Stmt 
+         child tl             : Stmts 
+      alternative Nil:
+-}
+type Stmts = [Stmt]
diff --git a/src/Language/EWE/CheckGrammar.ag b/src/Language/EWE/CheckGrammar.ag
deleted file mode 100644
--- a/src/Language/EWE/CheckGrammar.ag
+++ /dev/null
@@ -1,124 +0,0 @@
-imports
-{
-import qualified Data.Set as Set
-import qualified Data.Map as Map
-import Language.EWE.AbsSyn
-import Language.EWE.Utils
-}
-
-attr Prog
-   syn res      :: {Either String ()}
-
-attr Equates
-   chn idMemRef :: {Map.Map String Int}
-
-attr Equ
-   chn idMemRef :: {Map.Map String Int}
-   syn res      :: {Either String ()}
-
-attr Stmts
-   chn labelDef                     :: {Set.Set String}
-   inh labelFound                   :: {Set.Set String}
-   inh idMemRefDef                  :: {Map.Map String Int}
-   syn res use {(<-->)} {Right ()} :: {Either String ()}
-
-attr Stmt
-   chn labelDef    :: {Set.Set String}
-   inh labelFound  :: {Set.Set String}
-   inh idMemRefDef :: {Map.Map String Int}
-   syn res         :: {Either String ()}
-
-attr Instr
-   inh labelFound  :: {Set.Set String}
-   inh idMemRefDef :: {Map.Map String Int}
-   syn res         :: {Either String ()}
-
-attr Labels
-   syn res      :: { Either String () }
-   chn labelDef :: { Set.Set String }
-   syn copy     :: self
-
-attr MRef
-   inh idMemRefDef :: { Map.Map String Int }
-   syn res         :: { Either String () }
-
-sem Equ
-  | Tuple lhs.res      = { if @x1 `Map.member` @lhs.idMemRef
-                           then Left $ @x1 ++ " was already defined "
-                           else Right ()
-                         }
-             .idMemRef = { Map.insert @x1 @x2 @lhs.idMemRef }
-
-sem Labels
-  | Cons  lhs.res      = { isLabelNotDef @hd @tl.labelDef }
-             .labelDef = { Set.insert @hd @tl.labelDef }
-  | Nil   lhs.res      = { Right ()  }
-             .labelDef = { @lhs.labelDef }
-
-sem Prog
-  | Prg stms.labelDef    = { Set.empty }
-            .labelFound  = { @stms.labelDef }
-            .idMemRefDef = { @equates.idMemRef }
-        equates.idMemRef = { Map.empty }
-
-sem Stmt
-  | Stmt loc.res1 = {
-   let f (e,er,s) lbl = if Set.member lbl s
-                        then (True,
-                              lbl ++ " is already defined\n" ++ er,
-                              s)
-                        else (e, er, Set.insert lbl s)
-       (e', errs', set') = foldl f (False,"",@lhs.labelDef) @labels.copy
-   in if e'
-      then Left errs'
-      else Right ()
-                   }
-          lhs.res = { @res1 <--> @instr.res }
-
-sem MRef
-  | MRefI  lhs.res = Right ()
-  | MRefId lhs.res = isMemRefDef @string @lhs.idMemRefDef
-
-sem Instr
-  | IMMI  lhs.res = { @dest.res }
-  | IMMS  lhs.res = { @dest.res }
-  | IMRPC lhs.res = { @dest.res }
-  | SPC   lhs.res = { @oper.res }
-  | IMMM  lhs.res = { @dest.res <--> @oper.res }
-  | IAdd  lhs.res = { @dest.res <--> @left.res <--> @right.res }
-  | ISub  lhs.res = { @dest.res <--> @left.res <--> @right.res }
-  | IMul  lhs.res = { @dest.res <--> @left.res <--> @right.res }
-  | IDiv  lhs.res = { @dest.res <--> @left.res <--> @right.res }
-  | IMod  lhs.res = { @dest.res <--> @left.res <--> @right.res }
-  | IMRI  lhs.res = { @dest.res <--> @oper.res }
-  | IMMR  lhs.res = { @dest.res <--> @oper.res }
-  | IRI   lhs.res = { @oper.res }
-  | IWI   lhs.res = { @oper.res }
-  | IRS   lhs.res = { @left.res <--> @right.res }
-  | IWS   lhs.res = { @oper.res }
-  | IGI   lhs.res = { Right () }
-  | IGS   lhs.res = { isLabelDef @string @lhs.labelFound }
-  | IFI   lhs.res = { @bcond.res <--> @then.res }
-  | IFS   lhs.res = { isLabelDef @string @lhs.labelFound <--> @bcond.res <--> @then.res}
-  | IH    lhs.res = { Right () }
-  | IB    lhs.res = { Right () }
-  | INI   lhs.res = { Right () }
-
-include "AbsSyn.ag"
-
-{
-isLabelDef :: String -> Set.Set String ->  Either String ()
-isLabelDef str sets
-    | str `Set.member` sets = Right ()
-    | otherwise             = Left $ "Label: " ++ str ++ " is not defined "
-
-isLabelNotDef :: String -> Set.Set String ->  Either String ()
-isLabelNotDef str sets
-    | str `Set.member` sets =  Left $ "Label: " ++ str ++ " is already defined "
-    | otherwise             = Right ()
-
-isMemRefDef :: String -> Map.Map String Int -> Either String ()
-isMemRefDef str map
-    | str `Map.member` map = Right ()
-    | otherwise            = Left $ "Mem Ref: " ++ str ++ " is not defined"
-}
diff --git a/src/Language/EWE/CheckGrammar.hs b/src/Language/EWE/CheckGrammar.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/EWE/CheckGrammar.hs
@@ -0,0 +1,1472 @@
+
+
+-- UUAGC 0.9.50 (src-ag/Language/EWE/CheckGrammar.ag)
+module Language.EWE.CheckGrammar where
+{-# LINE 2 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+
+import qualified Data.Set as Set
+import qualified Data.Map as Map
+import Language.EWE.AbsSyn
+import Language.EWE.Utils
+{-# LINE 12 "src/Language/EWE/CheckGrammar.hs" #-}
+{-# LINE 109 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+
+isLabelDef :: String -> Set.Set String ->  Either String ()
+isLabelDef str sets
+    | str `Set.member` sets = Right ()
+    | otherwise             = Left $ "Label: " ++ str ++ " is not defined "
+
+isLabelNotDef :: String -> Set.Set String ->  Either String ()
+isLabelNotDef str sets
+    | str `Set.member` sets =  Left $ "Label: " ++ str ++ " is already defined "
+    | otherwise             = Right ()
+
+isMemRefDef :: String -> Map.Map String Int -> Either String ()
+isMemRefDef str map
+    | str `Map.member` map = Right ()
+    | otherwise            = Left $ "Mem Ref: " ++ str ++ " is not defined"
+{-# LINE 29 "src/Language/EWE/CheckGrammar.hs" #-}
+-- Cond --------------------------------------------------------
+{-
+   alternatives:
+      alternative CLET:
+      alternative CLT:
+      alternative CGET:
+      alternative CGT:
+      alternative CE:
+      alternative CNE:
+-}
+-- cata
+sem_Cond :: Cond ->
+            T_Cond
+sem_Cond (CLET) =
+    (sem_Cond_CLET)
+sem_Cond (CLT) =
+    (sem_Cond_CLT)
+sem_Cond (CGET) =
+    (sem_Cond_CGET)
+sem_Cond (CGT) =
+    (sem_Cond_CGT)
+sem_Cond (CE) =
+    (sem_Cond_CE)
+sem_Cond (CNE) =
+    (sem_Cond_CNE)
+-- semantic domain
+type T_Cond = ( )
+data Inh_Cond = Inh_Cond {}
+data Syn_Cond = Syn_Cond {}
+wrap_Cond :: T_Cond ->
+             Inh_Cond ->
+             Syn_Cond
+wrap_Cond sem (Inh_Cond) =
+    (let ( ) = sem
+     in  (Syn_Cond))
+sem_Cond_CLET :: T_Cond
+sem_Cond_CLET =
+    (let
+     in  ( ))
+sem_Cond_CLT :: T_Cond
+sem_Cond_CLT =
+    (let
+     in  ( ))
+sem_Cond_CGET :: T_Cond
+sem_Cond_CGET =
+    (let
+     in  ( ))
+sem_Cond_CGT :: T_Cond
+sem_Cond_CGT =
+    (let
+     in  ( ))
+sem_Cond_CE :: T_Cond
+sem_Cond_CE =
+    (let
+     in  ( ))
+sem_Cond_CNE :: T_Cond
+sem_Cond_CNE =
+    (let
+     in  ( ))
+-- Equ ---------------------------------------------------------
+{-
+   visit 0:
+      chained attribute:
+         idMemRef             : Map.Map String Int
+      synthesized attribute:
+         res                  : Either String ()
+   alternatives:
+      alternative Tuple:
+         child x1             : {String}
+         child x2             : {Int}
+-}
+-- cata
+sem_Equ :: Equ ->
+           T_Equ
+sem_Equ ( x1,x2) =
+    (sem_Equ_Tuple x1 x2)
+-- semantic domain
+type T_Equ = (Map.Map String Int) ->
+             ( (Map.Map String Int),(Either String ()))
+data Inh_Equ = Inh_Equ {idMemRef_Inh_Equ :: (Map.Map String Int)}
+data Syn_Equ = Syn_Equ {idMemRef_Syn_Equ :: (Map.Map String Int),res_Syn_Equ :: (Either String ())}
+wrap_Equ :: T_Equ ->
+            Inh_Equ ->
+            Syn_Equ
+wrap_Equ sem (Inh_Equ _lhsIidMemRef) =
+    (let ( _lhsOidMemRef,_lhsOres) = sem _lhsIidMemRef
+     in  (Syn_Equ _lhsOidMemRef _lhsOres))
+sem_Equ_Tuple :: String ->
+                 Int ->
+                 T_Equ
+sem_Equ_Tuple x1_ x2_ =
+    (\ _lhsIidMemRef ->
+         (let _lhsOres :: (Either String ())
+              _lhsOidMemRef :: (Map.Map String Int)
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 46, column 11)
+              _lhsOres =
+                  ({-# LINE 46 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   if x1_ `Map.member` _lhsIidMemRef
+                   then Left $ x1_ ++ " was already defined "
+                   else Right ()
+                   {-# LINE 130 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 46, column 11)
+              _lhsOidMemRef =
+                  ({-# LINE 50 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   Map.insert x1_ x2_ _lhsIidMemRef
+                   {-# LINE 136 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+          in  ( _lhsOidMemRef,_lhsOres)))
+-- Equates -----------------------------------------------------
+{-
+   visit 0:
+      chained attribute:
+         idMemRef             : Map.Map String Int
+   alternatives:
+      alternative Cons:
+         child hd             : Equ 
+         child tl             : Equates 
+      alternative Nil:
+-}
+-- cata
+sem_Equates :: Equates ->
+               T_Equates
+sem_Equates list =
+    (Prelude.foldr sem_Equates_Cons sem_Equates_Nil (Prelude.map sem_Equ list))
+-- semantic domain
+type T_Equates = (Map.Map String Int) ->
+                 ( (Map.Map String Int))
+data Inh_Equates = Inh_Equates {idMemRef_Inh_Equates :: (Map.Map String Int)}
+data Syn_Equates = Syn_Equates {idMemRef_Syn_Equates :: (Map.Map String Int)}
+wrap_Equates :: T_Equates ->
+                Inh_Equates ->
+                Syn_Equates
+wrap_Equates sem (Inh_Equates _lhsIidMemRef) =
+    (let ( _lhsOidMemRef) = sem _lhsIidMemRef
+     in  (Syn_Equates _lhsOidMemRef))
+sem_Equates_Cons :: T_Equ ->
+                    T_Equates ->
+                    T_Equates
+sem_Equates_Cons hd_ tl_ =
+    (\ _lhsIidMemRef ->
+         (let _lhsOidMemRef :: (Map.Map String Int)
+              _hdOidMemRef :: (Map.Map String Int)
+              _tlOidMemRef :: (Map.Map String Int)
+              _hdIidMemRef :: (Map.Map String Int)
+              _hdIres :: (Either String ())
+              _tlIidMemRef :: (Map.Map String Int)
+              -- copy rule (up)
+              _lhsOidMemRef =
+                  ({-# LINE 13 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _tlIidMemRef
+                   {-# LINE 181 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _hdOidMemRef =
+                  ({-# LINE 16 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRef
+                   {-# LINE 187 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (chain)
+              _tlOidMemRef =
+                  ({-# LINE 13 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _hdIidMemRef
+                   {-# LINE 193 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              ( _hdIidMemRef,_hdIres) =
+                  hd_ _hdOidMemRef
+              ( _tlIidMemRef) =
+                  tl_ _tlOidMemRef
+          in  ( _lhsOidMemRef)))
+sem_Equates_Nil :: T_Equates
+sem_Equates_Nil =
+    (\ _lhsIidMemRef ->
+         (let _lhsOidMemRef :: (Map.Map String Int)
+              -- copy rule (chain)
+              _lhsOidMemRef =
+                  ({-# LINE 13 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRef
+                   {-# LINE 208 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+          in  ( _lhsOidMemRef)))
+-- Instr -------------------------------------------------------
+{-
+   visit 0:
+      inherited attributes:
+         idMemRefDef          : Map.Map String Int
+         labelFound           : Set.Set String
+      synthesized attribute:
+         res                  : Either String ()
+   alternatives:
+      alternative IMMI:
+         child dest           : MRef 
+         child int            : {Int}
+      alternative IMMS:
+         child dest           : MRef 
+         child string         : {String}
+      alternative IMRPC:
+         child dest           : MRef 
+         child int            : {Int}
+      alternative SPC:
+         child oper           : MRef 
+      alternative IMMM:
+         child dest           : MRef 
+         child oper           : MRef 
+      alternative IAdd:
+         child dest           : MRef 
+         child left           : MRef 
+         child right          : MRef 
+      alternative ISub:
+         child dest           : MRef 
+         child left           : MRef 
+         child right          : MRef 
+      alternative IMul:
+         child dest           : MRef 
+         child left           : MRef 
+         child right          : MRef 
+      alternative IDiv:
+         child dest           : MRef 
+         child left           : MRef 
+         child right          : MRef 
+      alternative IMod:
+         child dest           : MRef 
+         child left           : MRef 
+         child right          : MRef 
+      alternative IMRI:
+         child dest           : MRef 
+         child oper           : MRef 
+         child int            : {Int}
+      alternative IMMR:
+         child dest           : MRef 
+         child int            : {Int}
+         child oper           : MRef 
+      alternative IRI:
+         child oper           : MRef 
+      alternative IWI:
+         child oper           : MRef 
+      alternative IRS:
+         child left           : MRef 
+         child right          : MRef 
+      alternative IWS:
+         child oper           : MRef 
+      alternative IGI:
+         child int            : {Int}
+      alternative IGS:
+         child string         : {String}
+      alternative IFI:
+         child bcond          : MRef 
+         child cond           : Cond 
+         child then           : MRef 
+         child int            : {Int}
+      alternative IFS:
+         child bcond          : MRef 
+         child cond           : Cond 
+         child then           : MRef 
+         child string         : {String}
+      alternative IH:
+      alternative IB:
+      alternative INI:
+-}
+-- cata
+sem_Instr :: Instr ->
+             T_Instr
+sem_Instr (IMMI _dest _int) =
+    (sem_Instr_IMMI (sem_MRef _dest) _int)
+sem_Instr (IMMS _dest _string) =
+    (sem_Instr_IMMS (sem_MRef _dest) _string)
+sem_Instr (IMRPC _dest _int) =
+    (sem_Instr_IMRPC (sem_MRef _dest) _int)
+sem_Instr (SPC _oper) =
+    (sem_Instr_SPC (sem_MRef _oper))
+sem_Instr (IMMM _dest _oper) =
+    (sem_Instr_IMMM (sem_MRef _dest) (sem_MRef _oper))
+sem_Instr (IAdd _dest _left _right) =
+    (sem_Instr_IAdd (sem_MRef _dest) (sem_MRef _left) (sem_MRef _right))
+sem_Instr (ISub _dest _left _right) =
+    (sem_Instr_ISub (sem_MRef _dest) (sem_MRef _left) (sem_MRef _right))
+sem_Instr (IMul _dest _left _right) =
+    (sem_Instr_IMul (sem_MRef _dest) (sem_MRef _left) (sem_MRef _right))
+sem_Instr (IDiv _dest _left _right) =
+    (sem_Instr_IDiv (sem_MRef _dest) (sem_MRef _left) (sem_MRef _right))
+sem_Instr (IMod _dest _left _right) =
+    (sem_Instr_IMod (sem_MRef _dest) (sem_MRef _left) (sem_MRef _right))
+sem_Instr (IMRI _dest _oper _int) =
+    (sem_Instr_IMRI (sem_MRef _dest) (sem_MRef _oper) _int)
+sem_Instr (IMMR _dest _int _oper) =
+    (sem_Instr_IMMR (sem_MRef _dest) _int (sem_MRef _oper))
+sem_Instr (IRI _oper) =
+    (sem_Instr_IRI (sem_MRef _oper))
+sem_Instr (IWI _oper) =
+    (sem_Instr_IWI (sem_MRef _oper))
+sem_Instr (IRS _left _right) =
+    (sem_Instr_IRS (sem_MRef _left) (sem_MRef _right))
+sem_Instr (IWS _oper) =
+    (sem_Instr_IWS (sem_MRef _oper))
+sem_Instr (IGI _int) =
+    (sem_Instr_IGI _int)
+sem_Instr (IGS _string) =
+    (sem_Instr_IGS _string)
+sem_Instr (IFI _bcond _cond _then _int) =
+    (sem_Instr_IFI (sem_MRef _bcond) (sem_Cond _cond) (sem_MRef _then) _int)
+sem_Instr (IFS _bcond _cond _then _string) =
+    (sem_Instr_IFS (sem_MRef _bcond) (sem_Cond _cond) (sem_MRef _then) _string)
+sem_Instr (IH) =
+    (sem_Instr_IH)
+sem_Instr (IB) =
+    (sem_Instr_IB)
+sem_Instr (INI) =
+    (sem_Instr_INI)
+-- semantic domain
+type T_Instr = (Map.Map String Int) ->
+               (Set.Set String) ->
+               ( (Either String ()))
+data Inh_Instr = Inh_Instr {idMemRefDef_Inh_Instr :: (Map.Map String Int),labelFound_Inh_Instr :: (Set.Set String)}
+data Syn_Instr = Syn_Instr {res_Syn_Instr :: (Either String ())}
+wrap_Instr :: T_Instr ->
+              Inh_Instr ->
+              Syn_Instr
+wrap_Instr sem (Inh_Instr _lhsIidMemRefDef _lhsIlabelFound) =
+    (let ( _lhsOres) = sem _lhsIidMemRefDef _lhsIlabelFound
+     in  (Syn_Instr _lhsOres))
+sem_Instr_IMMI :: T_MRef ->
+                  Int ->
+                  T_Instr
+sem_Instr_IMMI dest_ int_ =
+    (\ _lhsIidMemRefDef
+       _lhsIlabelFound ->
+         (let _lhsOres :: (Either String ())
+              _destOidMemRefDef :: ( Map.Map String Int )
+              _destIres :: ( Either String () )
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 83, column 11)
+              _lhsOres =
+                  ({-# LINE 83 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _destIres
+                   {-# LINE 363 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _destOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 369 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              ( _destIres) =
+                  dest_ _destOidMemRefDef
+          in  ( _lhsOres)))
+sem_Instr_IMMS :: T_MRef ->
+                  String ->
+                  T_Instr
+sem_Instr_IMMS dest_ string_ =
+    (\ _lhsIidMemRefDef
+       _lhsIlabelFound ->
+         (let _lhsOres :: (Either String ())
+              _destOidMemRefDef :: ( Map.Map String Int )
+              _destIres :: ( Either String () )
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 84, column 11)
+              _lhsOres =
+                  ({-# LINE 84 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _destIres
+                   {-# LINE 387 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _destOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 393 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              ( _destIres) =
+                  dest_ _destOidMemRefDef
+          in  ( _lhsOres)))
+sem_Instr_IMRPC :: T_MRef ->
+                   Int ->
+                   T_Instr
+sem_Instr_IMRPC dest_ int_ =
+    (\ _lhsIidMemRefDef
+       _lhsIlabelFound ->
+         (let _lhsOres :: (Either String ())
+              _destOidMemRefDef :: ( Map.Map String Int )
+              _destIres :: ( Either String () )
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 85, column 11)
+              _lhsOres =
+                  ({-# LINE 85 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _destIres
+                   {-# LINE 411 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _destOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 417 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              ( _destIres) =
+                  dest_ _destOidMemRefDef
+          in  ( _lhsOres)))
+sem_Instr_SPC :: T_MRef ->
+                 T_Instr
+sem_Instr_SPC oper_ =
+    (\ _lhsIidMemRefDef
+       _lhsIlabelFound ->
+         (let _lhsOres :: (Either String ())
+              _operOidMemRefDef :: ( Map.Map String Int )
+              _operIres :: ( Either String () )
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 86, column 11)
+              _lhsOres =
+                  ({-# LINE 86 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _operIres
+                   {-# LINE 434 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _operOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 440 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              ( _operIres) =
+                  oper_ _operOidMemRefDef
+          in  ( _lhsOres)))
+sem_Instr_IMMM :: T_MRef ->
+                  T_MRef ->
+                  T_Instr
+sem_Instr_IMMM dest_ oper_ =
+    (\ _lhsIidMemRefDef
+       _lhsIlabelFound ->
+         (let _lhsOres :: (Either String ())
+              _destOidMemRefDef :: ( Map.Map String Int )
+              _operOidMemRefDef :: ( Map.Map String Int )
+              _destIres :: ( Either String () )
+              _operIres :: ( Either String () )
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 87, column 11)
+              _lhsOres =
+                  ({-# LINE 87 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _destIres <--> _operIres
+                   {-# LINE 460 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _destOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 466 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _operOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 472 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              ( _destIres) =
+                  dest_ _destOidMemRefDef
+              ( _operIres) =
+                  oper_ _operOidMemRefDef
+          in  ( _lhsOres)))
+sem_Instr_IAdd :: T_MRef ->
+                  T_MRef ->
+                  T_MRef ->
+                  T_Instr
+sem_Instr_IAdd dest_ left_ right_ =
+    (\ _lhsIidMemRefDef
+       _lhsIlabelFound ->
+         (let _lhsOres :: (Either String ())
+              _destOidMemRefDef :: ( Map.Map String Int )
+              _leftOidMemRefDef :: ( Map.Map String Int )
+              _rightOidMemRefDef :: ( Map.Map String Int )
+              _destIres :: ( Either String () )
+              _leftIres :: ( Either String () )
+              _rightIres :: ( Either String () )
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 88, column 11)
+              _lhsOres =
+                  ({-# LINE 88 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _destIres <--> _leftIres <--> _rightIres
+                   {-# LINE 497 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _destOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 503 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _leftOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 509 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _rightOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 515 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              ( _destIres) =
+                  dest_ _destOidMemRefDef
+              ( _leftIres) =
+                  left_ _leftOidMemRefDef
+              ( _rightIres) =
+                  right_ _rightOidMemRefDef
+          in  ( _lhsOres)))
+sem_Instr_ISub :: T_MRef ->
+                  T_MRef ->
+                  T_MRef ->
+                  T_Instr
+sem_Instr_ISub dest_ left_ right_ =
+    (\ _lhsIidMemRefDef
+       _lhsIlabelFound ->
+         (let _lhsOres :: (Either String ())
+              _destOidMemRefDef :: ( Map.Map String Int )
+              _leftOidMemRefDef :: ( Map.Map String Int )
+              _rightOidMemRefDef :: ( Map.Map String Int )
+              _destIres :: ( Either String () )
+              _leftIres :: ( Either String () )
+              _rightIres :: ( Either String () )
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 89, column 11)
+              _lhsOres =
+                  ({-# LINE 89 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _destIres <--> _leftIres <--> _rightIres
+                   {-# LINE 542 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _destOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 548 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _leftOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 554 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _rightOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 560 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              ( _destIres) =
+                  dest_ _destOidMemRefDef
+              ( _leftIres) =
+                  left_ _leftOidMemRefDef
+              ( _rightIres) =
+                  right_ _rightOidMemRefDef
+          in  ( _lhsOres)))
+sem_Instr_IMul :: T_MRef ->
+                  T_MRef ->
+                  T_MRef ->
+                  T_Instr
+sem_Instr_IMul dest_ left_ right_ =
+    (\ _lhsIidMemRefDef
+       _lhsIlabelFound ->
+         (let _lhsOres :: (Either String ())
+              _destOidMemRefDef :: ( Map.Map String Int )
+              _leftOidMemRefDef :: ( Map.Map String Int )
+              _rightOidMemRefDef :: ( Map.Map String Int )
+              _destIres :: ( Either String () )
+              _leftIres :: ( Either String () )
+              _rightIres :: ( Either String () )
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 90, column 11)
+              _lhsOres =
+                  ({-# LINE 90 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _destIres <--> _leftIres <--> _rightIres
+                   {-# LINE 587 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _destOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 593 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _leftOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 599 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _rightOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 605 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              ( _destIres) =
+                  dest_ _destOidMemRefDef
+              ( _leftIres) =
+                  left_ _leftOidMemRefDef
+              ( _rightIres) =
+                  right_ _rightOidMemRefDef
+          in  ( _lhsOres)))
+sem_Instr_IDiv :: T_MRef ->
+                  T_MRef ->
+                  T_MRef ->
+                  T_Instr
+sem_Instr_IDiv dest_ left_ right_ =
+    (\ _lhsIidMemRefDef
+       _lhsIlabelFound ->
+         (let _lhsOres :: (Either String ())
+              _destOidMemRefDef :: ( Map.Map String Int )
+              _leftOidMemRefDef :: ( Map.Map String Int )
+              _rightOidMemRefDef :: ( Map.Map String Int )
+              _destIres :: ( Either String () )
+              _leftIres :: ( Either String () )
+              _rightIres :: ( Either String () )
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 91, column 11)
+              _lhsOres =
+                  ({-# LINE 91 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _destIres <--> _leftIres <--> _rightIres
+                   {-# LINE 632 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _destOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 638 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _leftOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 644 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _rightOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 650 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              ( _destIres) =
+                  dest_ _destOidMemRefDef
+              ( _leftIres) =
+                  left_ _leftOidMemRefDef
+              ( _rightIres) =
+                  right_ _rightOidMemRefDef
+          in  ( _lhsOres)))
+sem_Instr_IMod :: T_MRef ->
+                  T_MRef ->
+                  T_MRef ->
+                  T_Instr
+sem_Instr_IMod dest_ left_ right_ =
+    (\ _lhsIidMemRefDef
+       _lhsIlabelFound ->
+         (let _lhsOres :: (Either String ())
+              _destOidMemRefDef :: ( Map.Map String Int )
+              _leftOidMemRefDef :: ( Map.Map String Int )
+              _rightOidMemRefDef :: ( Map.Map String Int )
+              _destIres :: ( Either String () )
+              _leftIres :: ( Either String () )
+              _rightIres :: ( Either String () )
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 92, column 11)
+              _lhsOres =
+                  ({-# LINE 92 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _destIres <--> _leftIres <--> _rightIres
+                   {-# LINE 677 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _destOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 683 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _leftOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 689 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _rightOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 695 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              ( _destIres) =
+                  dest_ _destOidMemRefDef
+              ( _leftIres) =
+                  left_ _leftOidMemRefDef
+              ( _rightIres) =
+                  right_ _rightOidMemRefDef
+          in  ( _lhsOres)))
+sem_Instr_IMRI :: T_MRef ->
+                  T_MRef ->
+                  Int ->
+                  T_Instr
+sem_Instr_IMRI dest_ oper_ int_ =
+    (\ _lhsIidMemRefDef
+       _lhsIlabelFound ->
+         (let _lhsOres :: (Either String ())
+              _destOidMemRefDef :: ( Map.Map String Int )
+              _operOidMemRefDef :: ( Map.Map String Int )
+              _destIres :: ( Either String () )
+              _operIres :: ( Either String () )
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 93, column 11)
+              _lhsOres =
+                  ({-# LINE 93 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _destIres <--> _operIres
+                   {-# LINE 720 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _destOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 726 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _operOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 732 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              ( _destIres) =
+                  dest_ _destOidMemRefDef
+              ( _operIres) =
+                  oper_ _operOidMemRefDef
+          in  ( _lhsOres)))
+sem_Instr_IMMR :: T_MRef ->
+                  Int ->
+                  T_MRef ->
+                  T_Instr
+sem_Instr_IMMR dest_ int_ oper_ =
+    (\ _lhsIidMemRefDef
+       _lhsIlabelFound ->
+         (let _lhsOres :: (Either String ())
+              _destOidMemRefDef :: ( Map.Map String Int )
+              _operOidMemRefDef :: ( Map.Map String Int )
+              _destIres :: ( Either String () )
+              _operIres :: ( Either String () )
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 94, column 11)
+              _lhsOres =
+                  ({-# LINE 94 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _destIres <--> _operIres
+                   {-# LINE 755 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _destOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 761 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _operOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 767 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              ( _destIres) =
+                  dest_ _destOidMemRefDef
+              ( _operIres) =
+                  oper_ _operOidMemRefDef
+          in  ( _lhsOres)))
+sem_Instr_IRI :: T_MRef ->
+                 T_Instr
+sem_Instr_IRI oper_ =
+    (\ _lhsIidMemRefDef
+       _lhsIlabelFound ->
+         (let _lhsOres :: (Either String ())
+              _operOidMemRefDef :: ( Map.Map String Int )
+              _operIres :: ( Either String () )
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 95, column 11)
+              _lhsOres =
+                  ({-# LINE 95 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _operIres
+                   {-# LINE 786 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _operOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 792 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              ( _operIres) =
+                  oper_ _operOidMemRefDef
+          in  ( _lhsOres)))
+sem_Instr_IWI :: T_MRef ->
+                 T_Instr
+sem_Instr_IWI oper_ =
+    (\ _lhsIidMemRefDef
+       _lhsIlabelFound ->
+         (let _lhsOres :: (Either String ())
+              _operOidMemRefDef :: ( Map.Map String Int )
+              _operIres :: ( Either String () )
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 96, column 11)
+              _lhsOres =
+                  ({-# LINE 96 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _operIres
+                   {-# LINE 809 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _operOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 815 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              ( _operIres) =
+                  oper_ _operOidMemRefDef
+          in  ( _lhsOres)))
+sem_Instr_IRS :: T_MRef ->
+                 T_MRef ->
+                 T_Instr
+sem_Instr_IRS left_ right_ =
+    (\ _lhsIidMemRefDef
+       _lhsIlabelFound ->
+         (let _lhsOres :: (Either String ())
+              _leftOidMemRefDef :: ( Map.Map String Int )
+              _rightOidMemRefDef :: ( Map.Map String Int )
+              _leftIres :: ( Either String () )
+              _rightIres :: ( Either String () )
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 97, column 11)
+              _lhsOres =
+                  ({-# LINE 97 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _leftIres <--> _rightIres
+                   {-# LINE 835 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _leftOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 841 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _rightOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 847 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              ( _leftIres) =
+                  left_ _leftOidMemRefDef
+              ( _rightIres) =
+                  right_ _rightOidMemRefDef
+          in  ( _lhsOres)))
+sem_Instr_IWS :: T_MRef ->
+                 T_Instr
+sem_Instr_IWS oper_ =
+    (\ _lhsIidMemRefDef
+       _lhsIlabelFound ->
+         (let _lhsOres :: (Either String ())
+              _operOidMemRefDef :: ( Map.Map String Int )
+              _operIres :: ( Either String () )
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 98, column 11)
+              _lhsOres =
+                  ({-# LINE 98 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _operIres
+                   {-# LINE 866 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _operOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 872 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              ( _operIres) =
+                  oper_ _operOidMemRefDef
+          in  ( _lhsOres)))
+sem_Instr_IGI :: Int ->
+                 T_Instr
+sem_Instr_IGI int_ =
+    (\ _lhsIidMemRefDef
+       _lhsIlabelFound ->
+         (let _lhsOres :: (Either String ())
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 99, column 11)
+              _lhsOres =
+                  ({-# LINE 99 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   Right ()
+                   {-# LINE 887 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+          in  ( _lhsOres)))
+sem_Instr_IGS :: String ->
+                 T_Instr
+sem_Instr_IGS string_ =
+    (\ _lhsIidMemRefDef
+       _lhsIlabelFound ->
+         (let _lhsOres :: (Either String ())
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 100, column 11)
+              _lhsOres =
+                  ({-# LINE 100 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   isLabelDef string_ _lhsIlabelFound
+                   {-# LINE 900 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+          in  ( _lhsOres)))
+sem_Instr_IFI :: T_MRef ->
+                 T_Cond ->
+                 T_MRef ->
+                 Int ->
+                 T_Instr
+sem_Instr_IFI bcond_ cond_ then_ int_ =
+    (\ _lhsIidMemRefDef
+       _lhsIlabelFound ->
+         (let _lhsOres :: (Either String ())
+              _bcondOidMemRefDef :: ( Map.Map String Int )
+              _thenOidMemRefDef :: ( Map.Map String Int )
+              _bcondIres :: ( Either String () )
+              _thenIres :: ( Either String () )
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 101, column 11)
+              _lhsOres =
+                  ({-# LINE 101 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _bcondIres <--> _thenIres
+                   {-# LINE 920 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _bcondOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 926 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _thenOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 932 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              ( _bcondIres) =
+                  bcond_ _bcondOidMemRefDef
+              ( _thenIres) =
+                  then_ _thenOidMemRefDef
+          in  ( _lhsOres)))
+sem_Instr_IFS :: T_MRef ->
+                 T_Cond ->
+                 T_MRef ->
+                 String ->
+                 T_Instr
+sem_Instr_IFS bcond_ cond_ then_ string_ =
+    (\ _lhsIidMemRefDef
+       _lhsIlabelFound ->
+         (let _lhsOres :: (Either String ())
+              _bcondOidMemRefDef :: ( Map.Map String Int )
+              _thenOidMemRefDef :: ( Map.Map String Int )
+              _bcondIres :: ( Either String () )
+              _thenIres :: ( Either String () )
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 102, column 11)
+              _lhsOres =
+                  ({-# LINE 102 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   isLabelDef string_ _lhsIlabelFound <--> _bcondIres <--> _thenIres
+                   {-# LINE 956 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _bcondOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 962 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _thenOidMemRefDef =
+                  ({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 968 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              ( _bcondIres) =
+                  bcond_ _bcondOidMemRefDef
+              ( _thenIres) =
+                  then_ _thenOidMemRefDef
+          in  ( _lhsOres)))
+sem_Instr_IH :: T_Instr
+sem_Instr_IH =
+    (\ _lhsIidMemRefDef
+       _lhsIlabelFound ->
+         (let _lhsOres :: (Either String ())
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 103, column 11)
+              _lhsOres =
+                  ({-# LINE 103 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   Right ()
+                   {-# LINE 984 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+          in  ( _lhsOres)))
+sem_Instr_IB :: T_Instr
+sem_Instr_IB =
+    (\ _lhsIidMemRefDef
+       _lhsIlabelFound ->
+         (let _lhsOres :: (Either String ())
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 104, column 11)
+              _lhsOres =
+                  ({-# LINE 104 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   Right ()
+                   {-# LINE 996 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+          in  ( _lhsOres)))
+sem_Instr_INI :: T_Instr
+sem_Instr_INI =
+    (\ _lhsIidMemRefDef
+       _lhsIlabelFound ->
+         (let _lhsOres :: (Either String ())
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 105, column 11)
+              _lhsOres =
+                  ({-# LINE 105 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   Right ()
+                   {-# LINE 1008 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+          in  ( _lhsOres)))
+-- Labels ------------------------------------------------------
+{-
+   visit 0:
+      chained attribute:
+         labelDef             :  Set.Set String 
+      synthesized attributes:
+         copy                 : Labels 
+         res                  :  Either String () 
+   alternatives:
+      alternative Cons:
+         child hd             : {String}
+         child tl             : Labels 
+         visit 0:
+            local copy        : _
+      alternative Nil:
+         visit 0:
+            local copy        : _
+-}
+-- cata
+sem_Labels :: Labels ->
+              T_Labels
+sem_Labels list =
+    (Prelude.foldr sem_Labels_Cons sem_Labels_Nil list)
+-- semantic domain
+type T_Labels = ( Set.Set String ) ->
+                ( Labels,( Set.Set String ),( Either String () ))
+data Inh_Labels = Inh_Labels {labelDef_Inh_Labels :: ( Set.Set String )}
+data Syn_Labels = Syn_Labels {copy_Syn_Labels :: Labels,labelDef_Syn_Labels :: ( Set.Set String ),res_Syn_Labels :: ( Either String () )}
+wrap_Labels :: T_Labels ->
+               Inh_Labels ->
+               Syn_Labels
+wrap_Labels sem (Inh_Labels _lhsIlabelDef) =
+    (let ( _lhsOcopy,_lhsOlabelDef,_lhsOres) = sem _lhsIlabelDef
+     in  (Syn_Labels _lhsOcopy _lhsOlabelDef _lhsOres))
+sem_Labels_Cons :: String ->
+                   T_Labels ->
+                   T_Labels
+sem_Labels_Cons hd_ tl_ =
+    (\ _lhsIlabelDef ->
+         (let _lhsOres :: ( Either String () )
+              _lhsOlabelDef :: ( Set.Set String )
+              _lhsOcopy :: Labels
+              _tlOlabelDef :: ( Set.Set String )
+              _tlIcopy :: Labels
+              _tlIlabelDef :: ( Set.Set String )
+              _tlIres :: ( Either String () )
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 53, column 11)
+              _lhsOres =
+                  ({-# LINE 53 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   isLabelNotDef hd_ _tlIlabelDef
+                   {-# LINE 1061 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 53, column 11)
+              _lhsOlabelDef =
+                  ({-# LINE 54 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   Set.insert hd_ _tlIlabelDef
+                   {-# LINE 1067 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- self rule
+              _copy =
+                  ({-# LINE 39 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   (:) hd_ _tlIcopy
+                   {-# LINE 1073 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- self rule
+              _lhsOcopy =
+                  ({-# LINE 39 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _copy
+                   {-# LINE 1079 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _tlOlabelDef =
+                  ({-# LINE 38 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIlabelDef
+                   {-# LINE 1085 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              ( _tlIcopy,_tlIlabelDef,_tlIres) =
+                  tl_ _tlOlabelDef
+          in  ( _lhsOcopy,_lhsOlabelDef,_lhsOres)))
+sem_Labels_Nil :: T_Labels
+sem_Labels_Nil =
+    (\ _lhsIlabelDef ->
+         (let _lhsOres :: ( Either String () )
+              _lhsOlabelDef :: ( Set.Set String )
+              _lhsOcopy :: Labels
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 55, column 11)
+              _lhsOres =
+                  ({-# LINE 55 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   Right ()
+                   {-# LINE 1100 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 55, column 11)
+              _lhsOlabelDef =
+                  ({-# LINE 56 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIlabelDef
+                   {-# LINE 1106 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- self rule
+              _copy =
+                  ({-# LINE 39 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   []
+                   {-# LINE 1112 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- self rule
+              _lhsOcopy =
+                  ({-# LINE 39 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _copy
+                   {-# LINE 1118 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+          in  ( _lhsOcopy,_lhsOlabelDef,_lhsOres)))
+-- MRef --------------------------------------------------------
+{-
+   visit 0:
+      inherited attribute:
+         idMemRefDef          :  Map.Map String Int 
+      synthesized attribute:
+         res                  :  Either String () 
+   alternatives:
+      alternative MRefI:
+         child int            : {Int}
+      alternative MRefId:
+         child string         : {String}
+-}
+-- cata
+sem_MRef :: MRef ->
+            T_MRef
+sem_MRef (MRefI _int) =
+    (sem_MRef_MRefI _int)
+sem_MRef (MRefId _string) =
+    (sem_MRef_MRefId _string)
+-- semantic domain
+type T_MRef = ( Map.Map String Int ) ->
+              ( ( Either String () ))
+data Inh_MRef = Inh_MRef {idMemRefDef_Inh_MRef :: ( Map.Map String Int )}
+data Syn_MRef = Syn_MRef {res_Syn_MRef :: ( Either String () )}
+wrap_MRef :: T_MRef ->
+             Inh_MRef ->
+             Syn_MRef
+wrap_MRef sem (Inh_MRef _lhsIidMemRefDef) =
+    (let ( _lhsOres) = sem _lhsIidMemRefDef
+     in  (Syn_MRef _lhsOres))
+sem_MRef_MRefI :: Int ->
+                  T_MRef
+sem_MRef_MRefI int_ =
+    (\ _lhsIidMemRefDef ->
+         (let _lhsOres :: ( Either String () )
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 79, column 12)
+              _lhsOres =
+                  ({-# LINE 79 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   Right ()
+                   {-# LINE 1161 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+          in  ( _lhsOres)))
+sem_MRef_MRefId :: String ->
+                   T_MRef
+sem_MRef_MRefId string_ =
+    (\ _lhsIidMemRefDef ->
+         (let _lhsOres :: ( Either String () )
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 80, column 12)
+              _lhsOres =
+                  ({-# LINE 80 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   isMemRefDef string_ _lhsIidMemRefDef
+                   {-# LINE 1173 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+          in  ( _lhsOres)))
+-- Prog --------------------------------------------------------
+{-
+   visit 0:
+      synthesized attribute:
+         res                  : Either String ()
+   alternatives:
+      alternative Prg:
+         child stms           : Stmts 
+         child equates        : Equates 
+-}
+-- cata
+sem_Prog :: Prog ->
+            T_Prog
+sem_Prog (Prg _stms _equates) =
+    (sem_Prog_Prg (sem_Stmts _stms) (sem_Equates _equates))
+-- semantic domain
+type T_Prog = ( (Either String ()))
+data Inh_Prog = Inh_Prog {}
+data Syn_Prog = Syn_Prog {res_Syn_Prog :: (Either String ())}
+wrap_Prog :: T_Prog ->
+             Inh_Prog ->
+             Syn_Prog
+wrap_Prog sem (Inh_Prog) =
+    (let ( _lhsOres) = sem
+     in  (Syn_Prog _lhsOres))
+sem_Prog_Prg :: T_Stmts ->
+                T_Equates ->
+                T_Prog
+sem_Prog_Prg stms_ equates_ =
+    (let _stmsOlabelDef :: (Set.Set String)
+         _stmsOlabelFound :: (Set.Set String)
+         _stmsOidMemRefDef :: (Map.Map String Int)
+         _equatesOidMemRef :: (Map.Map String Int)
+         _lhsOres :: (Either String ())
+         _stmsIlabelDef :: (Set.Set String)
+         _stmsIres :: (Either String ())
+         _equatesIidMemRef :: (Map.Map String Int)
+         -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 59, column 9)
+         _stmsOlabelDef =
+             ({-# LINE 59 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+              Set.empty
+              {-# LINE 1217 "src/Language/EWE/CheckGrammar.hs" #-}
+              )
+         -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 59, column 9)
+         _stmsOlabelFound =
+             ({-# LINE 60 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+              _stmsIlabelDef
+              {-# LINE 1223 "src/Language/EWE/CheckGrammar.hs" #-}
+              )
+         -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 59, column 9)
+         _stmsOidMemRefDef =
+             ({-# LINE 61 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+              _equatesIidMemRef
+              {-# LINE 1229 "src/Language/EWE/CheckGrammar.hs" #-}
+              )
+         -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 62, column 9)
+         _equatesOidMemRef =
+             ({-# LINE 62 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+              Map.empty
+              {-# LINE 1235 "src/Language/EWE/CheckGrammar.hs" #-}
+              )
+         -- copy rule (up)
+         _lhsOres =
+             ({-# LINE 10 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+              _stmsIres
+              {-# LINE 1241 "src/Language/EWE/CheckGrammar.hs" #-}
+              )
+         ( _stmsIlabelDef,_stmsIres) =
+             stms_ _stmsOidMemRefDef _stmsOlabelDef _stmsOlabelFound
+         ( _equatesIidMemRef) =
+             equates_ _equatesOidMemRef
+     in  ( _lhsOres))
+-- Stmt --------------------------------------------------------
+{-
+   visit 0:
+      inherited attributes:
+         idMemRefDef          : Map.Map String Int
+         labelFound           : Set.Set String
+      chained attribute:
+         labelDef             : Set.Set String
+      synthesized attribute:
+         res                  : Either String ()
+   alternatives:
+      alternative Stmt:
+         child labels         : Labels 
+         child instr          : Instr 
+         visit 0:
+            local res1        : _
+-}
+-- cata
+sem_Stmt :: Stmt ->
+            T_Stmt
+sem_Stmt (Stmt _labels _instr) =
+    (sem_Stmt_Stmt (sem_Labels _labels) (sem_Instr _instr))
+-- semantic domain
+type T_Stmt = (Map.Map String Int) ->
+              (Set.Set String) ->
+              (Set.Set String) ->
+              ( (Set.Set String),(Either String ()))
+data Inh_Stmt = Inh_Stmt {idMemRefDef_Inh_Stmt :: (Map.Map String Int),labelDef_Inh_Stmt :: (Set.Set String),labelFound_Inh_Stmt :: (Set.Set String)}
+data Syn_Stmt = Syn_Stmt {labelDef_Syn_Stmt :: (Set.Set String),res_Syn_Stmt :: (Either String ())}
+wrap_Stmt :: T_Stmt ->
+             Inh_Stmt ->
+             Syn_Stmt
+wrap_Stmt sem (Inh_Stmt _lhsIidMemRefDef _lhsIlabelDef _lhsIlabelFound) =
+    (let ( _lhsOlabelDef,_lhsOres) = sem _lhsIidMemRefDef _lhsIlabelDef _lhsIlabelFound
+     in  (Syn_Stmt _lhsOlabelDef _lhsOres))
+sem_Stmt_Stmt :: T_Labels ->
+                 T_Instr ->
+                 T_Stmt
+sem_Stmt_Stmt labels_ instr_ =
+    (\ _lhsIidMemRefDef
+       _lhsIlabelDef
+       _lhsIlabelFound ->
+         (let _lhsOres :: (Either String ())
+              _lhsOlabelDef :: (Set.Set String)
+              _labelsOlabelDef :: ( Set.Set String )
+              _instrOidMemRefDef :: (Map.Map String Int)
+              _instrOlabelFound :: (Set.Set String)
+              _labelsIcopy :: Labels
+              _labelsIlabelDef :: ( Set.Set String )
+              _labelsIres :: ( Either String () )
+              _instrIres :: (Either String ())
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 65, column 10)
+              _res1 =
+                  ({-# LINE 65 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   let f (e,er,s) lbl = if Set.member lbl s
+                                        then (True,
+                                              lbl ++ " is already defined\n" ++ er,
+                                              s)
+                                        else (e, er, Set.insert lbl s)
+                       (e', errs', set') = foldl f (False,"",_lhsIlabelDef) _labelsIcopy
+                   in if e'
+                      then Left errs'
+                      else Right ()
+                   {-# LINE 1311 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 76, column 11)
+              _lhsOres =
+                  ({-# LINE 76 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _res1 <--> _instrIres
+                   {-# LINE 1317 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (up)
+              _lhsOlabelDef =
+                  ({-# LINE 26 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _labelsIlabelDef
+                   {-# LINE 1323 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _labelsOlabelDef =
+                  ({-# LINE 38 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIlabelDef
+                   {-# LINE 1329 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _instrOidMemRefDef =
+                  ({-# LINE 33 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 1335 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _instrOlabelFound =
+                  ({-# LINE 32 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIlabelFound
+                   {-# LINE 1341 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              ( _labelsIcopy,_labelsIlabelDef,_labelsIres) =
+                  labels_ _labelsOlabelDef
+              ( _instrIres) =
+                  instr_ _instrOidMemRefDef _instrOlabelFound
+          in  ( _lhsOlabelDef,_lhsOres)))
+-- Stmts -------------------------------------------------------
+{-
+   visit 0:
+      inherited attributes:
+         idMemRefDef          : Map.Map String Int
+         labelFound           : Set.Set String
+      chained attribute:
+         labelDef             : Set.Set String
+      synthesized attribute:
+         res                  : Either String ()
+   alternatives:
+      alternative Cons:
+         child hd             : Stmt 
+         child tl             : Stmts 
+      alternative Nil:
+-}
+-- cata
+sem_Stmts :: Stmts ->
+             T_Stmts
+sem_Stmts list =
+    (Prelude.foldr sem_Stmts_Cons sem_Stmts_Nil (Prelude.map sem_Stmt list))
+-- semantic domain
+type T_Stmts = (Map.Map String Int) ->
+               (Set.Set String) ->
+               (Set.Set String) ->
+               ( (Set.Set String),(Either String ()))
+data Inh_Stmts = Inh_Stmts {idMemRefDef_Inh_Stmts :: (Map.Map String Int),labelDef_Inh_Stmts :: (Set.Set String),labelFound_Inh_Stmts :: (Set.Set String)}
+data Syn_Stmts = Syn_Stmts {labelDef_Syn_Stmts :: (Set.Set String),res_Syn_Stmts :: (Either String ())}
+wrap_Stmts :: T_Stmts ->
+              Inh_Stmts ->
+              Syn_Stmts
+wrap_Stmts sem (Inh_Stmts _lhsIidMemRefDef _lhsIlabelDef _lhsIlabelFound) =
+    (let ( _lhsOlabelDef,_lhsOres) = sem _lhsIidMemRefDef _lhsIlabelDef _lhsIlabelFound
+     in  (Syn_Stmts _lhsOlabelDef _lhsOres))
+sem_Stmts_Cons :: T_Stmt ->
+                  T_Stmts ->
+                  T_Stmts
+sem_Stmts_Cons hd_ tl_ =
+    (\ _lhsIidMemRefDef
+       _lhsIlabelDef
+       _lhsIlabelFound ->
+         (let _lhsOres :: (Either String ())
+              _lhsOlabelDef :: (Set.Set String)
+              _hdOidMemRefDef :: (Map.Map String Int)
+              _hdOlabelDef :: (Set.Set String)
+              _hdOlabelFound :: (Set.Set String)
+              _tlOidMemRefDef :: (Map.Map String Int)
+              _tlOlabelDef :: (Set.Set String)
+              _tlOlabelFound :: (Set.Set String)
+              _hdIlabelDef :: (Set.Set String)
+              _hdIres :: (Either String ())
+              _tlIlabelDef :: (Set.Set String)
+              _tlIres :: (Either String ())
+              -- use rule "./src-ag/Language/EWE/CheckGrammar.ag"(line 23, column 12)
+              _lhsOres =
+                  ({-# LINE 23 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   ((<-->) _hdIres _tlIres)
+                   {-# LINE 1405 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (up)
+              _lhsOlabelDef =
+                  ({-# LINE 20 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _tlIlabelDef
+                   {-# LINE 1411 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _hdOidMemRefDef =
+                  ({-# LINE 28 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 1417 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _hdOlabelDef =
+                  ({-# LINE 26 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIlabelDef
+                   {-# LINE 1423 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _hdOlabelFound =
+                  ({-# LINE 27 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIlabelFound
+                   {-# LINE 1429 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _tlOidMemRefDef =
+                  ({-# LINE 22 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIidMemRefDef
+                   {-# LINE 1435 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (chain)
+              _tlOlabelDef =
+                  ({-# LINE 20 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _hdIlabelDef
+                   {-# LINE 1441 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (down)
+              _tlOlabelFound =
+                  ({-# LINE 21 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIlabelFound
+                   {-# LINE 1447 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              ( _hdIlabelDef,_hdIres) =
+                  hd_ _hdOidMemRefDef _hdOlabelDef _hdOlabelFound
+              ( _tlIlabelDef,_tlIres) =
+                  tl_ _tlOidMemRefDef _tlOlabelDef _tlOlabelFound
+          in  ( _lhsOlabelDef,_lhsOres)))
+sem_Stmts_Nil :: T_Stmts
+sem_Stmts_Nil =
+    (\ _lhsIidMemRefDef
+       _lhsIlabelDef
+       _lhsIlabelFound ->
+         (let _lhsOres :: (Either String ())
+              _lhsOlabelDef :: (Set.Set String)
+              -- use rule "./src-ag/Language/EWE/CheckGrammar.ag"(line 23, column 12)
+              _lhsOres =
+                  ({-# LINE 23 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   Right ()
+                   {-# LINE 1465 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+              -- copy rule (chain)
+              _lhsOlabelDef =
+                  ({-# LINE 20 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
+                   _lhsIlabelDef
+                   {-# LINE 1471 "src/Language/EWE/CheckGrammar.hs" #-}
+                   )
+          in  ( _lhsOlabelDef,_lhsOres)))
