packages feed

ewe 0.1.0.32 → 0.1.0.38

raw patch · 9 files changed

+413/−334 lines, 9 files

Files

dist/build/ewe/ewe-tmp/Language/EWE/Parser.hs view
@@ -9,7 +9,7 @@ import qualified Data.Array as Happy_Data_Array import qualified GHC.Exts as Happy_GHC_Exts --- parser produced by Happy Version 1.19.0+-- parser produced by Happy Version 1.18.10  newtype HappyAbsSyn t4 t5 t6 t7 t8 t9 t10 = HappyAbsSyn HappyAny #if __GLASGOW_HASKELL__ >= 607@@ -584,54 +584,11 @@ 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  -{-# LINE 13 "templates/GenericTemplate.hs" #-}------#if __GLASGOW_HASKELL__ > 706-#define LT(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.<# m)) :: Bool)-#define GTE(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.>=# m)) :: Bool)-#define EQ(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.==# m)) :: Bool)-#else-#define LT(n,m) (n Happy_GHC_Exts.<# m)-#define GTE(n,m) (n Happy_GHC_Exts.>=# m)-#define EQ(n,m) (n Happy_GHC_Exts.==# m)-#endif-{-# LINE 45 "templates/GenericTemplate.hs" #-}+{-# LINE 30 "templates/GenericTemplate.hs" #-}   data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList@@ -640,11 +597,11 @@   -{-# LINE 66 "templates/GenericTemplate.hs" #-}+{-# LINE 51 "templates/GenericTemplate.hs" #-} -{-# LINE 76 "templates/GenericTemplate.hs" #-}+{-# LINE 61 "templates/GenericTemplate.hs" #-} -{-# LINE 85 "templates/GenericTemplate.hs" #-}+{-# LINE 70 "templates/GenericTemplate.hs" #-}  infixr 9 `HappyStk` data HappyStk a = HappyStk a (HappyStk a)@@ -679,7 +636,7 @@ 				     happyFail i tk st 		-1# 	  -> {- nothing -} 				     happyAccept i tk st-		n | LT(n,(0# :: Happy_GHC_Exts.Int#)) -> {- nothing -}+		n | (n Happy_GHC_Exts.<# (0# :: Happy_GHC_Exts.Int#)) -> {- nothing -}  				     (happyReduceArr Happy_Data_Array.! rule) i tk st 				     where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#))))))@@ -687,17 +644,19 @@   				     happyShift new_state i tk st-                                     where new_state = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#))-   where off    = indexShortOffAddr happyActOffsets st-         off_i  = (off Happy_GHC_Exts.+# i)-	 check  = if GTE(off_i,(0# :: Happy_GHC_Exts.Int#))-                  then EQ(indexShortOffAddr happyCheck off_i, i)-		  else False-         action+				     where (new_state) = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#))+   where (off)    = indexShortOffAddr happyActOffsets st+         (off_i)  = (off Happy_GHC_Exts.+# i)+	 check  = if (off_i Happy_GHC_Exts.>=# (0# :: Happy_GHC_Exts.Int#))+			then (indexShortOffAddr happyCheck off_i Happy_GHC_Exts.==#  i)+			else False+         (action)           | check     = indexShortOffAddr happyTable off_i           | otherwise = indexShortOffAddr happyDefActions st +{-# LINE 130 "templates/GenericTemplate.hs" #-} + indexShortOffAddr (HappyA# arr) off = 	Happy_GHC_Exts.narrow16Int# i   where@@ -718,13 +677,13 @@ ----------------------------------------------------------------------------- -- HappyState data type (not arrays) -{-# LINE 169 "templates/GenericTemplate.hs" #-}+{-# LINE 163 "templates/GenericTemplate.hs" #-}  ----------------------------------------------------------------------------- -- Shifting a token  happyShift new_state 0# tk st sts stk@(x `HappyStk` _) =-     let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in+     let (i) = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in --     trace "shifting the error token" $      happyDoAction i tk new_state (HappyCons (st) (sts)) (stk) @@ -767,26 +726,23 @@ happyMonadReduce k nt fn 0# tk st sts stk      = happyFail 0# tk st sts stk happyMonadReduce k nt fn j tk st sts stk =-      case happyDrop k (HappyCons (st) (sts)) of-        sts1@((HappyCons (st1@(action)) (_))) ->-          let drop_stk = happyDropStk k stk in-          happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk))+        happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk))+       where (sts1@((HappyCons (st1@(action)) (_)))) = happyDrop k (HappyCons (st) (sts))+             drop_stk = happyDropStk k stk  happyMonad2Reduce k nt fn 0# tk st sts stk      = happyFail 0# tk st sts stk happyMonad2Reduce k nt fn j tk st sts stk =-      case happyDrop k (HappyCons (st) (sts)) of-        sts1@((HappyCons (st1@(action)) (_))) ->-         let drop_stk = happyDropStk k stk+       happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))+       where (sts1@((HappyCons (st1@(action)) (_)))) = happyDrop k (HappyCons (st) (sts))+             drop_stk = happyDropStk k stk -             off = indexShortOffAddr happyGotoOffsets st1-             off_i = (off Happy_GHC_Exts.+# nt)-             new_state = indexShortOffAddr happyTable off_i+             (off) = indexShortOffAddr happyGotoOffsets st1+             (off_i) = (off Happy_GHC_Exts.+# nt)+             (new_state) = indexShortOffAddr happyTable off_i   -          in-          happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))  happyDrop 0# l = l happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t@@ -801,9 +757,9 @@ happyGoto nt j tk st =     {- nothing -}    happyDoAction j tk new_state-   where off = indexShortOffAddr happyGotoOffsets st-         off_i = (off Happy_GHC_Exts.+# nt)-         new_state = indexShortOffAddr happyTable off_i+   where (off) = indexShortOffAddr happyGotoOffsets st+         (off_i) = (off Happy_GHC_Exts.+# nt)+         (new_state) = indexShortOffAddr happyTable off_i   @@ -813,7 +769,7 @@  -- parse error if we are in recovery and we fail again happyFail 0# tk old_st _ stk@(x `HappyStk` _) =-     let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in+     let (i) = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in --	trace "failing" $          happyError_ i tk 
dist/build/ewe/ewe-tmp/Language/EWE/Scanner.hs view
@@ -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.@@ -211,20 +178,12 @@ alexSetStartCode :: Int -> Alex () alexSetStartCode sc = Alex $ \s -> Right (s{alex_scd=sc}, ()) -------- alexMonadScan = do   inp <- alexGetInput   sc <- alexGetStartCode   case alexScan inp sc of     AlexEOF -> alexEOF-    AlexError ((AlexPn _ line column),_,_,_) -> alexError $ "lexical error at line " ++ (show line) ++ ", column " ++ (show column)+    AlexError inp' -> alexError "lexical error"     AlexSkip  inp' len -> do         alexSetInput inp'         alexMonadScan@@ -257,21 +216,21 @@ -- ----------------------------------------------------------------------------- -- Monad (with ByteString input) -{-# LINE 328 "templates/wrappers.hs" #-}+{-# LINE 320 "templates/wrappers.hs" #-}   -- ----------------------------------------------------------------------------- -- Basic wrapper -{-# LINE 355 "templates/wrappers.hs" #-}+{-# LINE 347 "templates/wrappers.hs" #-}   -- ----------------------------------------------------------------------------- -- Basic wrapper, ByteString version -{-# LINE 373 "templates/wrappers.hs" #-}+{-# LINE 365 "templates/wrappers.hs" #-} -{-# LINE 386 "templates/wrappers.hs" #-}+{-# LINE 378 "templates/wrappers.hs" #-}   -- -----------------------------------------------------------------------------@@ -279,13 +238,13 @@  -- Adds text positions to the basic model. -{-# LINE 403 "templates/wrappers.hs" #-}+{-# LINE 395 "templates/wrappers.hs" #-}   -- ----------------------------------------------------------------------------- -- Posn wrapper, ByteString version -{-# LINE 418 "templates/wrappers.hs" #-}+{-# LINE 410 "templates/wrappers.hs" #-}   -- -----------------------------------------------------------------------------@@ -402,41 +361,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@@ -447,20 +372,9 @@ -- ----------------------------------------------------------------------------- -- INTERNALS and main scanner engine -{-# LINE 21 "templates/GenericTemplate.hs" #-}----+{-# LINE 35 "templates/GenericTemplate.hs" #-} -#if __GLASGOW_HASKELL__ > 706-#define GTE(n,m) (tagToEnum# (n >=# m))-#define EQ(n,m) (tagToEnum# (n ==# m))-#else-#define GTE(n,m) (n >=# m)-#define EQ(n,m) (n ==# m)-#endif-{-# LINE 50 "templates/GenericTemplate.hs" #-}+{-# LINE 45 "templates/GenericTemplate.hs" #-}   data AlexAddr = AlexA# Addr#@@ -579,7 +493,7 @@                 offset = (base +# ord_c)                 check  = alexIndexInt16OffAddr alex_check offset 		-                new_s = if GTE(offset,0#) && EQ(check,ord_c)+                new_s = if (offset >=# 0#) && (check ==# ord_c) 			  then alexIndexInt16OffAddr alex_table offset 			  else alexIndexInt16OffAddr alex_deflt s 	in@@ -595,7 +509,7 @@ 	check_accs (AlexAccNone) = last_acc 	check_accs (AlexAcc a  ) = AlexLastAcc a input (I# (len)) 	check_accs (AlexAccSkip) = AlexLastSkip  input (I# (len))-{-# LINE 196 "templates/GenericTemplate.hs" #-}+{-# LINE 191 "templates/GenericTemplate.hs" #-}  data AlexLastAcc a   = AlexNone@@ -611,7 +525,7 @@   = AlexAccNone   | AlexAcc a   | AlexAccSkip-{-# LINE 240 "templates/GenericTemplate.hs" #-}+{-# LINE 235 "templates/GenericTemplate.hs" #-}  -- used by wrappers iUnbox (I# (i)) = i
ewe.cabal view
@@ -2,7 +2,7 @@ -- see http://haskell.org/cabal/users-guide/  name:                ewe-version:             0.1.0.32+version:             0.1.0.38 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@@ -14,6 +14,7 @@ category:            Language build-type:          Simple cabal-version:       >=1.8+extra-source-files:  src-ag/Language/EWE/CheckGrammar.ag src-ag/Language/EWE/AbsSyn.ag  executable ewe   main-is:          Main.hs@@ -31,7 +32,7 @@                     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/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
+ src-ag/Language/EWE/AbsSyn.ag view
@@ -0,0 +1,57 @@++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
+ src-ag/Language/EWE/CheckGrammar.ag view
@@ -0,0 +1,124 @@+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"+}
src/Language/EWE/AbsSyn.hs view
@@ -1,6 +1,6 @@  --- UUAGC 0.9.50 (src-ag/Language/EWE/AbsSyn.ag)+-- UUAGC 0.9.50.2 (src-ag/Language/EWE/AbsSyn.ag) module Language.EWE.AbsSyn where -- Cond -------------------------------------------------------- {-
src/Language/EWE/CheckGrammar.hs view
@@ -1,15 +1,15 @@  --- UUAGC 0.9.50 (src-ag/Language/EWE/CheckGrammar.ag)+-- UUAGC 0.9.50.2 (src-ag/Language/EWE/CheckGrammar.ag) module Language.EWE.CheckGrammar where-{-# LINE 2 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+{-# 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" #-}+{-# LINE 109 "src-ag/Language/EWE/CheckGrammar.ag" #-}  isLabelDef :: String -> Set.Set String ->  Either String () isLabelDef str sets@@ -120,17 +120,17 @@     (\ _lhsIidMemRef ->          (let _lhsOres :: (Either String ())               _lhsOidMemRef :: (Map.Map String Int)-              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 46, column 11)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 46, column 11)               _lhsOres =-                  ({-# LINE 46 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# 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)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 46, column 11)               _lhsOidMemRef =-                  ({-# LINE 50 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# LINE 50 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    Map.insert x1_ x2_ _lhsIidMemRef                    {-# LINE 136 "src/Language/EWE/CheckGrammar.hs" #-}                    )@@ -175,19 +175,19 @@               _tlIidMemRef :: (Map.Map String Int)               -- copy rule (up)               _lhsOidMemRef =-                  ({-# LINE 13 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# 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" #-}+                  ({-# 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" #-}+                  ({-# LINE 13 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    _hdIidMemRef                    {-# LINE 193 "src/Language/EWE/CheckGrammar.hs" #-}                    )@@ -202,7 +202,7 @@          (let _lhsOidMemRef :: (Map.Map String Int)               -- copy rule (chain)               _lhsOidMemRef =-                  ({-# LINE 13 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# LINE 13 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    _lhsIidMemRef                    {-# LINE 208 "src/Language/EWE/CheckGrammar.hs" #-}                    )@@ -355,15 +355,15 @@          (let _lhsOres :: (Either String ())               _destOidMemRefDef :: ( Map.Map String Int )               _destIres :: ( Either String () )-              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 83, column 11)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 83, column 11)               _lhsOres =-                  ({-# LINE 83 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# 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" #-}+                  ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    _lhsIidMemRefDef                    {-# LINE 369 "src/Language/EWE/CheckGrammar.hs" #-}                    )@@ -379,15 +379,15 @@          (let _lhsOres :: (Either String ())               _destOidMemRefDef :: ( Map.Map String Int )               _destIres :: ( Either String () )-              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 84, column 11)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 84, column 11)               _lhsOres =-                  ({-# LINE 84 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# 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" #-}+                  ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    _lhsIidMemRefDef                    {-# LINE 393 "src/Language/EWE/CheckGrammar.hs" #-}                    )@@ -403,15 +403,15 @@          (let _lhsOres :: (Either String ())               _destOidMemRefDef :: ( Map.Map String Int )               _destIres :: ( Either String () )-              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 85, column 11)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 85, column 11)               _lhsOres =-                  ({-# LINE 85 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# 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" #-}+                  ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    _lhsIidMemRefDef                    {-# LINE 417 "src/Language/EWE/CheckGrammar.hs" #-}                    )@@ -426,15 +426,15 @@          (let _lhsOres :: (Either String ())               _operOidMemRefDef :: ( Map.Map String Int )               _operIres :: ( Either String () )-              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 86, column 11)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 86, column 11)               _lhsOres =-                  ({-# LINE 86 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# 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" #-}+                  ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    _lhsIidMemRefDef                    {-# LINE 440 "src/Language/EWE/CheckGrammar.hs" #-}                    )@@ -452,21 +452,21 @@               _operOidMemRefDef :: ( Map.Map String Int )               _destIres :: ( Either String () )               _operIres :: ( Either String () )-              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 87, column 11)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 87, column 11)               _lhsOres =-                  ({-# LINE 87 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# 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" #-}+                  ({-# 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" #-}+                  ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    _lhsIidMemRefDef                    {-# LINE 472 "src/Language/EWE/CheckGrammar.hs" #-}                    )@@ -489,27 +489,27 @@               _destIres :: ( Either String () )               _leftIres :: ( Either String () )               _rightIres :: ( Either String () )-              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 88, column 11)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 88, column 11)               _lhsOres =-                  ({-# LINE 88 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# 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" #-}+                  ({-# 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" #-}+                  ({-# 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" #-}+                  ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    _lhsIidMemRefDef                    {-# LINE 515 "src/Language/EWE/CheckGrammar.hs" #-}                    )@@ -534,27 +534,27 @@               _destIres :: ( Either String () )               _leftIres :: ( Either String () )               _rightIres :: ( Either String () )-              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 89, column 11)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 89, column 11)               _lhsOres =-                  ({-# LINE 89 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# 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" #-}+                  ({-# 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" #-}+                  ({-# 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" #-}+                  ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    _lhsIidMemRefDef                    {-# LINE 560 "src/Language/EWE/CheckGrammar.hs" #-}                    )@@ -579,27 +579,27 @@               _destIres :: ( Either String () )               _leftIres :: ( Either String () )               _rightIres :: ( Either String () )-              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 90, column 11)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 90, column 11)               _lhsOres =-                  ({-# LINE 90 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# 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" #-}+                  ({-# 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" #-}+                  ({-# 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" #-}+                  ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    _lhsIidMemRefDef                    {-# LINE 605 "src/Language/EWE/CheckGrammar.hs" #-}                    )@@ -624,27 +624,27 @@               _destIres :: ( Either String () )               _leftIres :: ( Either String () )               _rightIres :: ( Either String () )-              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 91, column 11)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 91, column 11)               _lhsOres =-                  ({-# LINE 91 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# 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" #-}+                  ({-# 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" #-}+                  ({-# 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" #-}+                  ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    _lhsIidMemRefDef                    {-# LINE 650 "src/Language/EWE/CheckGrammar.hs" #-}                    )@@ -669,27 +669,27 @@               _destIres :: ( Either String () )               _leftIres :: ( Either String () )               _rightIres :: ( Either String () )-              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 92, column 11)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 92, column 11)               _lhsOres =-                  ({-# LINE 92 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# 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" #-}+                  ({-# 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" #-}+                  ({-# 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" #-}+                  ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    _lhsIidMemRefDef                    {-# LINE 695 "src/Language/EWE/CheckGrammar.hs" #-}                    )@@ -712,21 +712,21 @@               _operOidMemRefDef :: ( Map.Map String Int )               _destIres :: ( Either String () )               _operIres :: ( Either String () )-              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 93, column 11)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 93, column 11)               _lhsOres =-                  ({-# LINE 93 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# 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" #-}+                  ({-# 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" #-}+                  ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    _lhsIidMemRefDef                    {-# LINE 732 "src/Language/EWE/CheckGrammar.hs" #-}                    )@@ -747,21 +747,21 @@               _operOidMemRefDef :: ( Map.Map String Int )               _destIres :: ( Either String () )               _operIres :: ( Either String () )-              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 94, column 11)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 94, column 11)               _lhsOres =-                  ({-# LINE 94 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# 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" #-}+                  ({-# 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" #-}+                  ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    _lhsIidMemRefDef                    {-# LINE 767 "src/Language/EWE/CheckGrammar.hs" #-}                    )@@ -778,15 +778,15 @@          (let _lhsOres :: (Either String ())               _operOidMemRefDef :: ( Map.Map String Int )               _operIres :: ( Either String () )-              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 95, column 11)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 95, column 11)               _lhsOres =-                  ({-# LINE 95 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# 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" #-}+                  ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    _lhsIidMemRefDef                    {-# LINE 792 "src/Language/EWE/CheckGrammar.hs" #-}                    )@@ -801,15 +801,15 @@          (let _lhsOres :: (Either String ())               _operOidMemRefDef :: ( Map.Map String Int )               _operIres :: ( Either String () )-              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 96, column 11)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 96, column 11)               _lhsOres =-                  ({-# LINE 96 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# 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" #-}+                  ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    _lhsIidMemRefDef                    {-# LINE 815 "src/Language/EWE/CheckGrammar.hs" #-}                    )@@ -827,21 +827,21 @@               _rightOidMemRefDef :: ( Map.Map String Int )               _leftIres :: ( Either String () )               _rightIres :: ( Either String () )-              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 97, column 11)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 97, column 11)               _lhsOres =-                  ({-# LINE 97 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# 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" #-}+                  ({-# 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" #-}+                  ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    _lhsIidMemRefDef                    {-# LINE 847 "src/Language/EWE/CheckGrammar.hs" #-}                    )@@ -858,15 +858,15 @@          (let _lhsOres :: (Either String ())               _operOidMemRefDef :: ( Map.Map String Int )               _operIres :: ( Either String () )-              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 98, column 11)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 98, column 11)               _lhsOres =-                  ({-# LINE 98 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# 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" #-}+                  ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    _lhsIidMemRefDef                    {-# LINE 872 "src/Language/EWE/CheckGrammar.hs" #-}                    )@@ -879,9 +879,9 @@     (\ _lhsIidMemRefDef        _lhsIlabelFound ->          (let _lhsOres :: (Either String ())-              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 99, column 11)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 99, column 11)               _lhsOres =-                  ({-# LINE 99 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# LINE 99 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    Right ()                    {-# LINE 887 "src/Language/EWE/CheckGrammar.hs" #-}                    )@@ -892,9 +892,9 @@     (\ _lhsIidMemRefDef        _lhsIlabelFound ->          (let _lhsOres :: (Either String ())-              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 100, column 11)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 100, column 11)               _lhsOres =-                  ({-# LINE 100 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# LINE 100 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    isLabelDef string_ _lhsIlabelFound                    {-# LINE 900 "src/Language/EWE/CheckGrammar.hs" #-}                    )@@ -912,21 +912,21 @@               _thenOidMemRefDef :: ( Map.Map String Int )               _bcondIres :: ( Either String () )               _thenIres :: ( Either String () )-              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 101, column 11)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 101, column 11)               _lhsOres =-                  ({-# LINE 101 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# 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" #-}+                  ({-# 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" #-}+                  ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    _lhsIidMemRefDef                    {-# LINE 932 "src/Language/EWE/CheckGrammar.hs" #-}                    )@@ -948,21 +948,21 @@               _thenOidMemRefDef :: ( Map.Map String Int )               _bcondIres :: ( Either String () )               _thenIres :: ( Either String () )-              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 102, column 11)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 102, column 11)               _lhsOres =-                  ({-# LINE 102 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# 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" #-}+                  ({-# 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" #-}+                  ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    _lhsIidMemRefDef                    {-# LINE 968 "src/Language/EWE/CheckGrammar.hs" #-}                    )@@ -976,9 +976,9 @@     (\ _lhsIidMemRefDef        _lhsIlabelFound ->          (let _lhsOres :: (Either String ())-              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 103, column 11)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 103, column 11)               _lhsOres =-                  ({-# LINE 103 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# LINE 103 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    Right ()                    {-# LINE 984 "src/Language/EWE/CheckGrammar.hs" #-}                    )@@ -988,9 +988,9 @@     (\ _lhsIidMemRefDef        _lhsIlabelFound ->          (let _lhsOres :: (Either String ())-              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 104, column 11)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 104, column 11)               _lhsOres =-                  ({-# LINE 104 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# LINE 104 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    Right ()                    {-# LINE 996 "src/Language/EWE/CheckGrammar.hs" #-}                    )@@ -1000,9 +1000,9 @@     (\ _lhsIidMemRefDef        _lhsIlabelFound ->          (let _lhsOres :: (Either String ())-              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 105, column 11)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 105, column 11)               _lhsOres =-                  ({-# LINE 105 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# LINE 105 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    Right ()                    {-# LINE 1008 "src/Language/EWE/CheckGrammar.hs" #-}                    )@@ -1053,33 +1053,33 @@               _tlIcopy :: Labels               _tlIlabelDef :: ( Set.Set String )               _tlIres :: ( Either String () )-              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 53, column 11)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 53, column 11)               _lhsOres =-                  ({-# LINE 53 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# 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)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 53, column 11)               _lhsOlabelDef =-                  ({-# LINE 54 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# 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" #-}+                  ({-# 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" #-}+                  ({-# 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" #-}+                  ({-# LINE 38 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    _lhsIlabelDef                    {-# LINE 1085 "src/Language/EWE/CheckGrammar.hs" #-}                    )@@ -1092,27 +1092,27 @@          (let _lhsOres :: ( Either String () )               _lhsOlabelDef :: ( Set.Set String )               _lhsOcopy :: Labels-              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 55, column 11)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 55, column 11)               _lhsOres =-                  ({-# LINE 55 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# 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)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 55, column 11)               _lhsOlabelDef =-                  ({-# LINE 56 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# 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 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" #-}+                  ({-# LINE 39 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    _copy                    {-# LINE 1118 "src/Language/EWE/CheckGrammar.hs" #-}                    )@@ -1153,9 +1153,9 @@ sem_MRef_MRefI int_ =     (\ _lhsIidMemRefDef ->          (let _lhsOres :: ( Either String () )-              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 79, column 12)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 79, column 12)               _lhsOres =-                  ({-# LINE 79 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# LINE 79 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    Right ()                    {-# LINE 1161 "src/Language/EWE/CheckGrammar.hs" #-}                    )@@ -1165,9 +1165,9 @@ sem_MRef_MRefId string_ =     (\ _lhsIidMemRefDef ->          (let _lhsOres :: ( Either String () )-              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 80, column 12)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 80, column 12)               _lhsOres =-                  ({-# LINE 80 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# LINE 80 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    isMemRefDef string_ _lhsIidMemRefDef                    {-# LINE 1173 "src/Language/EWE/CheckGrammar.hs" #-}                    )@@ -1209,33 +1209,33 @@          _stmsIlabelDef :: (Set.Set String)          _stmsIres :: (Either String ())          _equatesIidMemRef :: (Map.Map String Int)-         -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 59, column 9)+         -- "src-ag/Language/EWE/CheckGrammar.ag"(line 59, column 9)          _stmsOlabelDef =-             ({-# LINE 59 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+             ({-# 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)+         -- "src-ag/Language/EWE/CheckGrammar.ag"(line 59, column 9)          _stmsOlabelFound =-             ({-# LINE 60 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+             ({-# 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)+         -- "src-ag/Language/EWE/CheckGrammar.ag"(line 59, column 9)          _stmsOidMemRefDef =-             ({-# LINE 61 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+             ({-# 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)+         -- "src-ag/Language/EWE/CheckGrammar.ag"(line 62, column 9)          _equatesOidMemRef =-             ({-# LINE 62 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+             ({-# 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" #-}+             ({-# LINE 10 "src-ag/Language/EWE/CheckGrammar.ag" #-}               _stmsIres               {-# LINE 1241 "src/Language/EWE/CheckGrammar.hs" #-}               )@@ -1295,9 +1295,9 @@               _labelsIlabelDef :: ( Set.Set String )               _labelsIres :: ( Either String () )               _instrIres :: (Either String ())-              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 65, column 10)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 65, column 10)               _res1 =-                  ({-# LINE 65 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# 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,@@ -1309,33 +1309,33 @@                       else Right ()                    {-# LINE 1311 "src/Language/EWE/CheckGrammar.hs" #-}                    )-              -- "./src-ag/Language/EWE/CheckGrammar.ag"(line 76, column 11)+              -- "src-ag/Language/EWE/CheckGrammar.ag"(line 76, column 11)               _lhsOres =-                  ({-# LINE 76 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# 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" #-}+                  ({-# 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" #-}+                  ({-# 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" #-}+                  ({-# 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" #-}+                  ({-# LINE 32 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    _lhsIlabelFound                    {-# LINE 1341 "src/Language/EWE/CheckGrammar.hs" #-}                    )@@ -1397,51 +1397,51 @@               _hdIres :: (Either String ())               _tlIlabelDef :: (Set.Set String)               _tlIres :: (Either String ())-              -- use rule "./src-ag/Language/EWE/CheckGrammar.ag"(line 23, column 12)+              -- use rule "src-ag/Language/EWE/CheckGrammar.ag"(line 23, column 12)               _lhsOres =-                  ({-# LINE 23 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# 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" #-}+                  ({-# 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" #-}+                  ({-# 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" #-}+                  ({-# 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" #-}+                  ({-# 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" #-}+                  ({-# 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" #-}+                  ({-# 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" #-}+                  ({-# LINE 21 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    _lhsIlabelFound                    {-# LINE 1447 "src/Language/EWE/CheckGrammar.hs" #-}                    )@@ -1457,15 +1457,15 @@        _lhsIlabelFound ->          (let _lhsOres :: (Either String ())               _lhsOlabelDef :: (Set.Set String)-              -- use rule "./src-ag/Language/EWE/CheckGrammar.ag"(line 23, column 12)+              -- use rule "src-ag/Language/EWE/CheckGrammar.ag"(line 23, column 12)               _lhsOres =-                  ({-# LINE 23 "./src-ag/Language/EWE/CheckGrammar.ag" #-}+                  ({-# 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" #-}+                  ({-# LINE 20 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    _lhsIlabelDef                    {-# LINE 1471 "src/Language/EWE/CheckGrammar.hs" #-}                    )
src/Language/EWE/VM.hs view
@@ -41,7 +41,7 @@  evalVM :: StateVMM () evalVM = do-  lift $ hPutStrLn stdout "Iniciando maquina"+  -- lift $ hPutStrLn stdout "Iniciando maquina"   evalInstr  initVM :: Prog -> StateVM@@ -83,13 +83,13 @@              put st''              evalInstr          (IRS _ _) -> do-           s <- lift $ getLine+           s <- lift $ readStr "Enter an string:"            let st'' = execIRS s ci st            put st''            evalInstr          (IWS _) -> do              let (st'',s) = execIWS ci st-             lift $ putStrLn s+             lift $ putStrLn (show s)              put st''              evalInstr          (IH)      -> return ()@@ -207,11 +207,11 @@ execIRS s (IRS mr1 mr2) state =   let ge'     = ge state       startP  = mRef mr1 ge'-      endP    = mRef mr1 ge'-      state'  = moveStrInMem s startP endP state-  in if (startP <= endP)+      lenStr  = mRef mr2 ge'+      state'  = moveStrInMem s startP (startP + lenStr) state+  in if lenStr >= 0      then state' { pc = incrPC state }-     else error "IRS start > end"+     else error "IRS len is negative"  moveStrInMem :: String -> Int -> Int -> StateVM -> StateVM moveStrInMem [] st en state@@ -280,3 +280,11 @@   putStr (msg ++ "> ")   hFlush stdout   readLn++readStr :: String -> IO String+readStr msg = do+  putStr (msg ++ "> ")+  hFlush stdout+  s <- getLine+  -- putStrLn s+  return $ s
src/Main.hs view
@@ -6,6 +6,7 @@                 ,stderr, hPutStr, hPutStrLn) import System.Exit(ExitCode(..),exitSuccess) import Data.Version(Version(..), showVersion)+import System.Exit(exitSuccess) import System.Console.GetOpt import Data.Maybe(fromMaybe) import Control.Monad(when)@@ -17,23 +18,30 @@ import Language.EWE.CheckGrammar  data Options =  Options { optShowVersion :: Bool+                        , optShowHelp    :: Bool                         , optNoExec      :: Bool                         , optScanOut     :: Bool                         , optParserOut   :: Bool+                        , optDebug       :: Bool                         } deriving Show  defaultOptions :: Options defaultOptions = Options { optShowVersion = False-                         , optNoExec = True-                         , optScanOut  = False-                         , optParserOut = False+                         , optShowHelp    = False+                         , optNoExec      = True+                         , optScanOut     = False+                         , optParserOut   = False+                         , optDebug       = False                          }  options :: [OptDescr (Options -> Options)] options =-  [ Option ['v','?'] ["version"]+  [ Option ['v'] ["version"]     (NoArg (\opts -> opts { optShowVersion  = True }))     "show version number"+  , Option ['h', '?'] ["help"]+    (NoArg (\opts -> opts { optShowHelp = True }))+    "show help menu"   , Option ['n'] ["noexec"]     (NoArg (\opts -> opts { optNoExec = False }))     "execute the current file with ewe-vm"@@ -43,6 +51,9 @@   , Option ['s'] ["scanner"]     (NoArg (\opts -> opts { optScanOut = True }))     "show scan info"+  , Option ['d'] ["debug"]+    (NoArg (\opts -> opts { optDebug = True }))+    "show debug info"   ]  compilerOpts :: [String] -> IO (Options, [String])@@ -64,26 +75,34 @@        Left  msg  ->  hPutStrLn stderr $ show msg        Right prog ->  hPutStrLn stdout $ show prog -execProg :: Bool -> Either String Prog -> IO ()-execProg True _ = return ()-execProg False (Right prog) = do+showHelp :: IO ()+showHelp = do+  hPutStrLn stderr $ show (usageInfo header options) +  exitSuccess+  where header = "Usage: ewe [OPTION...] files..."++execProg :: Options -> Bool -> Either String Prog -> IO ()+execProg _    True   _           = return ()+execProg opts False (Right prog) = do    r <- execVM prog-   hPutStrLn stdout $ show r-execProg False _ = return ()+   return ()+   when (optDebug opts) (hPutStrLn stdout $ show r)+execProg _    False _ = return ()  processFile :: Options -> FilePath -> IO () processFile opts fp = do-  hPutStrLn stdout $ "Processing file: " ++ fp+  when (optDebug opts) (hPutStrLn stdout $ "Processing file: " ++ fp)   fh   <- openFile fp ReadMode   s    <- hGetContents fh   let  scanout = runAlex s alexExec        pRes   = pEWE s        errorParser           = either (\_ -> True)  (\_ -> False) pRes        (passGrammar,errGram) = either (\_ -> (False,[])) checkGrammar  pRes+  when (optShowHelp opts)              (showHelp)   when (optScanOut opts)               (showScannerOutput scanout)   when (optParserOut opts)             (showParserOutput pRes)   when (not passGrammar)               (showErrorGrammar errGram)-  when (optNoExec opts && passGrammar) (execProg errorParser pRes)+  when (optNoExec opts && passGrammar) (execProg opts errorParser pRes)   hClose fh  showErrorGrammar :: String -> IO ()@@ -96,7 +115,7 @@                     in case (res_Syn_Prog syn) of                          Left msg -> (False, msg)                          Right () -> (True, [])- + processStaticOptions :: Options -> IO () processStaticOptions opts =   if optShowVersion opts