packages feed

ewe 0.1.0.40 → 0.1.0.43

raw patch · 13 files changed

+976/−575 lines, 13 filesdep +pretty

Dependencies added: pretty

Files

dist/build/ewe/ewe-tmp/Language/EWE/Parser.hs view
@@ -3,13 +3,14 @@ {-# OPTIONS -w #-} module Language.EWE.Parser(pEWE) where -import Language.EWE.Token(Tkns,Tkn(..))+import Language.EWE.Token(Tkns,Tkn(..), Tkn_(..)) import Language.EWE.Scanner import Language.EWE.AbsSyn import qualified Data.Array as Happy_Data_Array import qualified GHC.Exts as Happy_GHC_Exts+import Control.Applicative(Applicative(..)) --- parser produced by Happy Version 1.18.10+-- parser produced by Happy Version 1.19.4  newtype HappyAbsSyn t4 t5 t6 t7 t8 t9 t10 = HappyAbsSyn HappyAny #if __GLASGOW_HASKELL__ >= 607@@ -154,7 +155,7 @@ happyReduction_4 happy_x_3 	happy_x_2 	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TknId happy_var_1) -> +	 =  case happyOutTok happy_x_1 of { (Tkn _ (TknId happy_var_1)) ->  	case happyOut6 happy_x_3 of { happy_var_3 ->  	happyIn6 		 (addLabel happy_var_1 happy_var_3@@ -172,7 +173,7 @@ 	happy_x_2 	happy_x_1 	 =  case happyOut9 happy_x_1 of { happy_var_1 -> -	case happyOutTok happy_x_3 of { (TknInt happy_var_3) -> +	case happyOutTok happy_x_3 of { (Tkn _ (TknInt happy_var_3)) ->  	happyIn7 		 (IMMI happy_var_1 happy_var_3 	)}}@@ -182,7 +183,7 @@ 	happy_x_2 	happy_x_1 	 =  case happyOut9 happy_x_1 of { happy_var_1 -> -	case happyOutTok happy_x_3 of { (TknStr happy_var_3) -> +	case happyOutTok happy_x_3 of { (Tkn _ (TknStr happy_var_3)) ->  	happyIn7 		 (IMMS happy_var_1 happy_var_3 	)}}@@ -195,7 +196,7 @@ 	happy_x_1 `HappyStk` 	happyRest) 	 = case happyOut9 happy_x_1 of { happy_var_1 -> -	case happyOutTok happy_x_5 of { (TknInt happy_var_5) -> +	case happyOutTok happy_x_5 of { (Tkn _ (TknInt happy_var_5)) ->  	happyIn7 		 (IMRPC happy_var_1 happy_var_5 	) `HappyStk` happyRest}}@@ -301,7 +302,7 @@ 	happyRest) 	 = case happyOut9 happy_x_1 of { happy_var_1 ->  	case happyOut9 happy_x_5 of { happy_var_5 -> -	case happyOutTok happy_x_7 of { (TknInt happy_var_7) -> +	case happyOutTok happy_x_7 of { (Tkn _ (TknInt happy_var_7)) ->  	happyIn7 		 (IMRI happy_var_1 happy_var_5 happy_var_7 	) `HappyStk` happyRest}}}@@ -317,7 +318,7 @@ 	happy_x_1 `HappyStk` 	happyRest) 	 = case happyOut9 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_5 of { (TknInt happy_var_5) -> +	case happyOutTok happy_x_5 of { (Tkn _ (TknInt happy_var_5)) ->  	case happyOut9 happy_x_8 of { happy_var_8 ->  	happyIn7 		 (IMMR happy_var_3 happy_var_5 happy_var_8@@ -373,7 +374,7 @@ happyReduce_22 = happySpecReduce_2  3# happyReduction_22 happyReduction_22 happy_x_2 	happy_x_1-	 =  case happyOutTok happy_x_2 of { (TknInt happy_var_2) -> +	 =  case happyOutTok happy_x_2 of { (Tkn _ (TknInt happy_var_2)) ->  	happyIn7 		 (IGI happy_var_2 	)}@@ -381,7 +382,7 @@ happyReduce_23 = happySpecReduce_2  3# happyReduction_23 happyReduction_23 happy_x_2 	happy_x_1-	 =  case happyOutTok happy_x_2 of { (TknId happy_var_2) -> +	 =  case happyOutTok happy_x_2 of { (Tkn _ (TknId happy_var_2)) ->  	happyIn7 		 (IGS happy_var_2 	)}@@ -398,7 +399,7 @@ 	 = case happyOut9 happy_x_2 of { happy_var_2 ->  	case happyOut10 happy_x_3 of { happy_var_3 ->  	case happyOut9 happy_x_4 of { happy_var_4 -> -	case happyOutTok happy_x_7 of { (TknInt happy_var_7) -> +	case happyOutTok happy_x_7 of { (Tkn _ (TknInt happy_var_7)) ->  	happyIn7 		 (IFI happy_var_2 happy_var_3 happy_var_4 happy_var_7 	) `HappyStk` happyRest}}}}@@ -415,7 +416,7 @@ 	 = case happyOut9 happy_x_2 of { happy_var_2 ->  	case happyOut10 happy_x_3 of { happy_var_3 ->  	case happyOut9 happy_x_4 of { happy_var_4 -> -	case happyOutTok happy_x_7 of { (TknId happy_var_7) -> +	case happyOutTok happy_x_7 of { (Tkn _ (TknId happy_var_7)) ->  	happyIn7 		 (IFS happy_var_2 happy_var_3 happy_var_4 happy_var_7 	) `HappyStk` happyRest}}}}@@ -446,8 +447,8 @@ 	happy_x_2 `HappyStk` 	happy_x_1 `HappyStk` 	happyRest)-	 = case happyOutTok happy_x_2 of { (TknId happy_var_2) -> -	case happyOutTok happy_x_5 of { (TknInt happy_var_5) -> +	 = case happyOutTok happy_x_2 of { (Tkn _ (TknId happy_var_2)) -> +	case happyOutTok happy_x_5 of { (Tkn _ (TknInt happy_var_5)) ->  	case happyOut8 happy_x_7 of { happy_var_7 ->  	happyIn8 		 ((happy_var_2,happy_var_5):happy_var_7@@ -459,14 +460,14 @@ 	happy_x_2 `HappyStk` 	happy_x_1 `HappyStk` 	happyRest)-	 = case happyOutTok happy_x_3 of { (TknInt happy_var_3) -> +	 = case happyOutTok happy_x_3 of { (Tkn _ (TknInt happy_var_3)) ->  	happyIn9 		 (MRefI happy_var_3 	) `HappyStk` happyRest}  happyReduce_31 = happySpecReduce_1  5# happyReduction_31 happyReduction_31 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TknId happy_var_1) -> +	 =  case happyOutTok happy_x_1 of { (Tkn _ (TknId happy_var_1)) ->  	happyIn9 		 (MRefId happy_var_1 	)}@@ -511,40 +512,40 @@ 	= lexwrap(\tk ->  	let cont i = happyDoAction i tk action sts stk in 	case tk of {-	TknEOF -> happyDoAction 34# tk action sts stk;-	TknInt happy_dollar_dollar -> cont 1#;-	TknStr happy_dollar_dollar -> cont 2#;-	TknId happy_dollar_dollar -> cont 3#;-	TknAssgn -> cont 4#;-	TknColon -> cont 5#;-	TknLPar -> cont 6#;-	TknRPar -> cont 7#;-	TknLBrk -> cont 8#;-	TknRBrk -> cont 9#;-	TknComma -> cont 10#;-	TknOper '+' -> cont 11#;-	TknOper '-' -> cont 12#;-	TknOper '*' -> cont 13#;-	TknOper '/' -> cont 14#;-	TknOper '%' -> cont 15#;-	TknCond "<>" -> cont 16#;-	TknCond "=" -> cont 17#;-	TknCond "<" -> cont 18#;-	TknCond "<=" -> cont 19#;-	TknCond ">" -> cont 20#;-	TknCond ">=" -> cont 21#;-	TknResWrd "PC" -> cont 22#;-	TknResWrd "M" -> cont 23#;-	TknResWrd "readInt" -> cont 24#;-	TknResWrd "writeInt" -> cont 25#;-	TknResWrd "readStr" -> cont 26#;-	TknResWrd "writeStr" -> cont 27#;-	TknResWrd "goto" -> cont 28#;-	TknResWrd "if" -> cont 29#;-	TknResWrd "then" -> cont 30#;-	TknResWrd "halt" -> cont 31#;-	TknResWrd "break" -> cont 32#;-	TknResWrd "equ" -> cont 33#;+	Tkn _ TknEOF -> happyDoAction 34# tk action sts stk;+	Tkn _ (TknInt happy_dollar_dollar) -> cont 1#;+	Tkn _ (TknStr happy_dollar_dollar) -> cont 2#;+	Tkn _ (TknId happy_dollar_dollar) -> cont 3#;+	Tkn _ TknAssgn -> cont 4#;+	Tkn _ TknColon -> cont 5#;+	Tkn _ TknLPar -> cont 6#;+	Tkn _ TknRPar -> cont 7#;+	Tkn _ TknLBrk -> cont 8#;+	Tkn _ TknRBrk -> cont 9#;+	Tkn _ TknComma -> cont 10#;+	Tkn _ (TknOper '+') -> cont 11#;+	Tkn _ (TknOper '-') -> cont 12#;+	Tkn _ (TknOper '*') -> cont 13#;+	Tkn _ (TknOper '/') -> cont 14#;+	Tkn _ (TknOper '%') -> cont 15#;+	Tkn _ (TknCond "<>") -> cont 16#;+	Tkn _ (TknCond "=") -> cont 17#;+	Tkn _ (TknCond "<") -> cont 18#;+	Tkn _ (TknCond "<=") -> cont 19#;+	Tkn _ (TknCond ">") -> cont 20#;+	Tkn _ (TknCond ">=") -> cont 21#;+	Tkn _ (TknResWrd "PC") -> cont 22#;+	Tkn _ (TknResWrd "M") -> cont 23#;+	Tkn _ (TknResWrd "readInt") -> cont 24#;+	Tkn _ (TknResWrd "writeInt") -> cont 25#;+	Tkn _ (TknResWrd "readStr") -> cont 26#;+	Tkn _ (TknResWrd "writeStr") -> cont 27#;+	Tkn _ (TknResWrd "goto") -> cont 28#;+	Tkn _ (TknResWrd "if") -> cont 29#;+	Tkn _ (TknResWrd "then") -> cont 30#;+	Tkn _ (TknResWrd "halt") -> cont 31#;+	Tkn _ (TknResWrd "break") -> cont 32#;+	Tkn _ (TknResWrd "equ") -> cont 33#; 	_ -> happyError' tk 	}) @@ -584,53 +585,52 @@ pEWE s = runAlex s parse {-# LINE 1 "templates/GenericTemplate.hs" #-} {-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "<command-line>" #-}-{-# LINE 8 "<command-line>" #-}-# 1 "/usr/include/stdc-predef.h" 1 3 4+{-# LINE 1 "<built-in>" #-}+{-# LINE 1 "templates/GenericTemplate.hs" #-}+-- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp  -# 17 "/usr/include/stdc-predef.h" 3 4 +{-# LINE 13 "templates/GenericTemplate.hs" #-}     +-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.+#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 46 "templates/GenericTemplate.hs" #-}  +data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList      +{-# LINE 67 "templates/GenericTemplate.hs" #-}  +{-# LINE 77 "templates/GenericTemplate.hs" #-}      -# 8 "<command-line>" 2-{-# LINE 1 "templates/GenericTemplate.hs" #-}--- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp  -{-# LINE 30 "templates/GenericTemplate.hs" #-}  -data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList -----{-# LINE 51 "templates/GenericTemplate.hs" #-}--{-# LINE 61 "templates/GenericTemplate.hs" #-}--{-# LINE 70 "templates/GenericTemplate.hs" #-}- infixr 9 `HappyStk` data HappyStk a = HappyStk a (HappyStk a) @@ -646,9 +646,9 @@ -- parse (a %partial parser).  We must ignore the saved token on the top of -- the stack in this case. happyAccept 0# tk st sts (_ `HappyStk` ans `HappyStk` _) =-	happyReturn1 ans+        happyReturn1 ans happyAccept j tk st sts (HappyStk ans _) = -	(happyTcHack j (happyTcHack st)) (happyReturn1 ans)+        (happyTcHack j (happyTcHack st)) (happyReturn1 ans)  ----------------------------------------------------------------------------- -- Arrays only: do the next action@@ -656,37 +656,35 @@   happyDoAction i tk st-	= {- nothing -}---	  case action of-		0#		  -> {- nothing -}-				     happyFail i tk st-		-1# 	  -> {- nothing -}-				     happyAccept i tk st-		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#))))))-		n		  -> {- nothing -}+        = {- nothing -}+           +          case action of+                0#           -> {- nothing -}+                                     happyFail i tk st+                -1#          -> {- nothing -}+                                     happyAccept i tk st+                n | LT(n,(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#))))))+                n                 -> {- nothing -}+                                      -				     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 (off_i Happy_GHC_Exts.>=# (0# :: Happy_GHC_Exts.Int#))-			then (indexShortOffAddr happyCheck off_i Happy_GHC_Exts.==#  i)-			else False-         (action)+                                     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           | check     = indexShortOffAddr happyTable off_i           | otherwise = indexShortOffAddr happyDefActions st -{-# LINE 130 "templates/GenericTemplate.hs" #-} - indexShortOffAddr (HappyA# arr) off =-	Happy_GHC_Exts.narrow16Int# i+        Happy_GHC_Exts.narrow16Int# i   where         i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low)         high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#)))@@ -705,13 +703,14 @@ ----------------------------------------------------------------------------- -- HappyState data type (not arrays) -{-# LINE 163 "templates/GenericTemplate.hs" #-} +{-# LINE 170 "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) @@ -747,30 +746,33 @@      = happyFail 0# tk st sts stk happyReduce k nt fn j tk st sts stk      = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of-	 sts1@((HappyCons (st1@(action)) (_))) ->-        	let r = fn stk in  -- it doesn't hurt to always seq here...-       		happyDoSeq r (happyGoto nt j tk st1 sts1 r)+         sts1@((HappyCons (st1@(action)) (_))) ->+                let r = fn stk in  -- it doesn't hurt to always seq here...+                happyDoSeq r (happyGoto nt j tk st1 sts1 r)  happyMonadReduce k nt fn 0# tk st sts stk      = happyFail 0# tk st sts stk happyMonadReduce k nt fn j tk st sts 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+      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))  happyMonad2Reduce k nt fn 0# tk st sts stk      = happyFail 0# tk st sts stk happyMonad2Reduce k nt fn j tk st sts 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+      case happyDrop k (HappyCons (st) (sts)) of+        sts1@((HappyCons (st1@(action)) (_))) ->+         let 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@@ -785,9 +787,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   @@ -797,8 +799,8 @@  -- 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---	trace "failing" $ +     let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in+--      trace "failing" $          happyError_ i tk  {-  We don't need state discarding for our restricted implementation of@@ -807,16 +809,16 @@  -- discard a state happyFail  0# tk old_st (HappyCons ((action)) (sts)) -						(saved_tok `HappyStk` _ `HappyStk` stk) =---	trace ("discarding state, depth " ++ show (length stk))  $-	happyDoAction 0# tk action sts ((saved_tok`HappyStk`stk))+                                                (saved_tok `HappyStk` _ `HappyStk` stk) =+--      trace ("discarding state, depth " ++ show (length stk))  $+        happyDoAction 0# tk action sts ((saved_tok`HappyStk`stk)) -}  -- Enter error recovery: generate an error token, --                       save the old token and carry on. happyFail  i tk (action) sts stk = --      trace "entering error recovery" $-	happyDoAction 0# tk action sts ( (Happy_GHC_Exts.unsafeCoerce# (Happy_GHC_Exts.I# (i))) `HappyStk` stk)+        happyDoAction 0# tk action sts ( (Happy_GHC_Exts.unsafeCoerce# (Happy_GHC_Exts.I# (i))) `HappyStk` stk)  -- Internal happy errors: @@ -834,9 +836,9 @@  ----------------------------------------------------------------------------- -- Seq-ing.  If the --strict flag is given, then Happy emits ---	happySeq = happyDoSeq+--      happySeq = happyDoSeq -- otherwise it emits--- 	happySeq = happyDontSeq+--      happySeq = happyDontSeq  happyDoSeq, happyDontSeq :: a -> b -> b happyDoSeq   a b = a `seq` b@@ -866,3 +868,4 @@ {-# NOINLINE happyFail #-}  -- end of Happy Template.+
dist/build/ewe/ewe-tmp/Language/EWE/Scanner.hs view
@@ -10,7 +10,7 @@                             getPosn                            ) where -import Language.EWE.Token(Tkns,Tkn(..))+import Language.EWE.Token(Tkns,Tkn(..),Tkn_(..))  #if __GLASGOW_HASKELL__ >= 603 #include "ghcconfig.h"@@ -32,40 +32,7 @@ #endif {-# LINE 1 "templates/wrappers.hs" #-} {-# LINE 1 "templates/wrappers.hs" #-}-{-# LINE 1 "<command-line>" #-}-------# 1 "/usr/include/stdc-predef.h" 1 3 4--# 17 "/usr/include/stdc-predef.h" 3 4------------------------# 6 "<command-line>" 2+{-# LINE 1 "<built-in>" #-} {-# LINE 1 "templates/wrappers.hs" #-} -- ----------------------------------------------------------------------------- -- Alex wrapper code.@@ -74,6 +41,7 @@ -- it for any purpose whatsoever.  import Data.Word (Word8)+ {-# LINE 22 "templates/wrappers.hs" #-}  import qualified Data.Bits@@ -126,12 +94,15 @@                               in p' `seq`  Just (b, (p', c, bs, s))  -{-# LINE 89 "templates/wrappers.hs" #-} -{-# LINE 103 "templates/wrappers.hs" #-}+{-# LINE 92 "templates/wrappers.hs" #-} -{-# LINE 118 "templates/wrappers.hs" #-} +{-# LINE 106 "templates/wrappers.hs" #-}+++{-# LINE 121 "templates/wrappers.hs" #-}+ -- ----------------------------------------------------------------------------- -- Token positions @@ -211,12 +182,20 @@ 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 inp' -> alexError "lexical error"+    AlexError ((AlexPn _ line column),_,_,_) -> alexError $ "lexical error at line " ++ (show line) ++ ", column " ++ (show column)     AlexSkip  inp' len -> do         alexSetInput inp'         alexMonadScan@@ -249,42 +228,49 @@ -- ----------------------------------------------------------------------------- -- Monad (with ByteString input) -{-# LINE 320 "templates/wrappers.hs" #-} +{-# LINE 333 "templates/wrappers.hs" #-} + -- ----------------------------------------------------------------------------- -- Basic wrapper -{-# LINE 347 "templates/wrappers.hs" #-} +{-# LINE 360 "templates/wrappers.hs" #-} + -- ----------------------------------------------------------------------------- -- Basic wrapper, ByteString version -{-# LINE 365 "templates/wrappers.hs" #-}  {-# LINE 378 "templates/wrappers.hs" #-}  +{-# LINE 392 "templates/wrappers.hs" #-}++ -- ----------------------------------------------------------------------------- -- Posn wrapper  -- Adds text positions to the basic model. -{-# LINE 395 "templates/wrappers.hs" #-} +{-# LINE 409 "templates/wrappers.hs" #-} + -- ----------------------------------------------------------------------------- -- Posn wrapper, ByteString version -{-# LINE 410 "templates/wrappers.hs" #-} +{-# LINE 424 "templates/wrappers.hs" #-} + -- ----------------------------------------------------------------------------- -- GScan wrapper  -- For compatibility with previous versions of Alex, and because we can. + alex_base :: AlexAddr alex_base = AlexA# "\xf8\xff\xff\xff\xf3\xff\xff\xff\x73\x00\x00\x00\xb4\x00\x00\x00\x00\x00\x00\x00\x25\x01\x00\x00\x00\x00\x00\x00\xa5\x01\x00\x00\x25\x02\x00\x00\x00\x00\x00\x00\x96\x02\x00\x00\x96\x03\x00\x00\x56\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x97\x03\x00\x00\x8d\x04\x00\x00\x8d\x05\x00\x00\xf0\x03\x00\x00\x00\x00\x00\x00\xfe\xff\xff\xff\x03\x06\x00\x00\x00\x00\x00\x00\xc9\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\xff\xff\xff\xd0\xff\xff\xff\x00\x00\x00\x00\xde\x05\x00\x00\xd3\x06\x00\x00\x1e\x07\x00\x00\x69\x07\x00\x00\xb4\x07\x00\x00\xff\x07\x00\x00\x4a\x08\x00\x00\x95\x08\x00\x00\xe0\x08\x00\x00\x2b\x09\x00\x00\x76\x09\x00\x00\xc1\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x04\x00\x00\x0c\x0a\x00\x00\x57\x0a\x00\x00\xa2\x0a\x00\x00\xed\x0a\x00\x00\x38\x0b\x00\x00\x83\x0b\x00\x00\xce\x0b\x00\x00\x19\x0c\x00\x00\x64\x0c\x00\x00\xaf\x0c\x00\x00\xfa\x0c\x00\x00\x45\x0d\x00\x00\x90\x0d\x00\x00\xdb\x0d\x00\x00\x26\x0e\x00\x00\x71\x0e\x00\x00\xbc\x0e\x00\x00\x07\x0f\x00\x00\x52\x0f\x00\x00\x9d\x0f\x00\x00\xe8\x0f\x00\x00\x33\x10\x00\x00\x7e\x10\x00\x00\xc9\x10\x00\x00\x14\x11\x00\x00\x5f\x11\x00\x00\xaa\x11\x00\x00\xf5\x11\x00\x00\x40\x12\x00\x00\x8b\x12\x00\x00\xd6\x12\x00\x00\x21\x13\x00\x00\x6c\x13\x00\x00\xb7\x13\x00\x00\x02\x14\x00\x00"# @@ -298,8 +284,12 @@ alex_deflt = AlexA# "\xff\xff\xff\xff\xff\xff\x0d\x00\x0d\x00\x04\x00\x04\x00\xff\xff\xff\xff\x0e\x00\x0e\x00\x10\x00\x10\x00\x10\x00\x13\x00\x13\x00\x10\x00\x15\x00\x15\x00\x15\x00\xff\xff\x15\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#  alex_accept = listArray (0::Int,82) [AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccSkip,AlexAccSkip,AlexAcc (alex_action_3),AlexAcc (alex_action_4),AlexAcc (alex_action_5),AlexAcc (alex_action_6),AlexAcc (alex_action_7),AlexAcc (alex_action_8),AlexAcc (alex_action_9),AlexAcc (alex_action_10),AlexAcc (alex_action_11),AlexAcc (alex_action_11),AlexAcc (alex_action_11),AlexAcc (alex_action_12),AlexAcc (alex_action_13),AlexAcc (alex_action_14),AlexAcc (alex_action_15),AlexAcc (alex_action_16),AlexAcc (alex_action_17),AlexAcc (alex_action_18),AlexAcc (alex_action_19),AlexAcc (alex_action_20),AlexAcc (alex_action_21),AlexAcc (alex_action_22),AlexAcc (alex_action_23),AlexAcc (alex_action_24),AlexAcc (alex_action_25),AlexAcc (alex_action_25),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26)]-{-# LINE 55 "src/Language/EWE/Scanner.x" #-}+{-# LINE 54 "src/Language/EWE/Scanner.x" #-} +returnTkn :: Tkn_ -> AlexInput -> Int -> Alex Tkn+returnTkn tkn _ _ = do pos <- getPosn +                       return $ Tkn pos tkn+ returnEOL :: AlexInput -> Int -> Alex Tkn returnEOL = returnTkn $ TknEOL @@ -309,9 +299,6 @@ returnColon :: AlexInput -> Int -> Alex Tkn returnColon = returnTkn $ TknColon -returnTkn :: Tkn -> AlexInput -> Int -> Alex Tkn-returnTkn tkn _ _ = return $ tkn- returnLPar :: AlexInput -> Int -> Alex Tkn returnLPar = returnTkn $ TknLPar @@ -339,28 +326,27 @@ returnInt :: AlexInput -> Int -> Alex Tkn returnInt = returnFunction (TknInt . read) --- returnLabel :: AlexInput -> Int -> Alex Tkn--- returnLabel = returnFunction (TknLabel . init)- returnId :: AlexInput -> Int -> Alex Tkn returnId = returnFunction TknId  returnResWrd :: AlexInput -> Int -> Alex Tkn returnResWrd = returnFunction TknResWrd -returnFunction :: (String -> Tkn) -> AlexInput -> Int -> Alex Tkn-returnFunction f (_,_,_,s) i = return $ f (take i s)+returnFunction :: (String -> Tkn_) -> AlexInput -> Int -> Alex Tkn+returnFunction f (_,_,_,s) i = do pos <- getPosn+                                  return $ (Tkn pos (f (take i s)))  alexEOF :: Alex Tkn-alexEOF = return $ TknEOF+alexEOF = do pos <- getPosn+             return $ Tkn pos TknEOF  alexExec :: Alex Tkns alexExec = do    t <- alexMonadScan    case t of-     TknEOF -> return $ [t]-     _      -> do ts <- alexExec-                  return (t:ts)+     (Tkn pos TknEOF) -> return $ [t]+     _                -> do ts <- alexExec+                            return (t:ts)  getPosn :: Alex (Int,Int) getPosn = do@@ -394,41 +380,7 @@ alex_action_26 =  returnId  {-# LINE 1 "templates/GenericTemplate.hs" #-} {-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "<command-line>" #-}--------# 1 "/usr/include/stdc-predef.h" 1 3 4--# 17 "/usr/include/stdc-predef.h" 3 4------------------------# 7 "<command-line>" 2+{-# LINE 1 "<built-in>" #-} {-# LINE 1 "templates/GenericTemplate.hs" #-} -- ----------------------------------------------------------------------------- -- ALEX TEMPLATE@@ -439,13 +391,27 @@ -- ----------------------------------------------------------------------------- -- INTERNALS and main scanner engine -{-# LINE 35 "templates/GenericTemplate.hs" #-} -{-# LINE 45 "templates/GenericTemplate.hs" #-}+{-# LINE 21 "templates/GenericTemplate.hs" #-}  -data AlexAddr = AlexA# Addr# +++-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.+#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 51 "templates/GenericTemplate.hs" #-}+++data AlexAddr = AlexA# Addr#+-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex. #if __GLASGOW_HASKELL__ < 503 uncheckedShiftL# = shiftL# #endif@@ -488,6 +454,7 @@   + #if __GLASGOW_HASKELL__ < 503 quickIndex arr i = arr ! i #else@@ -560,7 +527,7 @@                 offset = (base +# ord_c)                 check  = alexIndexInt16OffAddr alex_check offset 		-                new_s = if (offset >=# 0#) && (check ==# ord_c)+                new_s = if GTE(offset,0#) && EQ(check,ord_c) 			  then alexIndexInt16OffAddr alex_table offset 			  else alexIndexInt16OffAddr alex_deflt s 	in@@ -576,8 +543,9 @@ 	check_accs (AlexAccNone) = last_acc 	check_accs (AlexAcc a  ) = AlexLastAcc a input (I# (len)) 	check_accs (AlexAccSkip) = AlexLastSkip  input (I# (len))-{-# LINE 191 "templates/GenericTemplate.hs" #-} +{-# LINE 198 "templates/GenericTemplate.hs" #-}+ data AlexLastAcc a   = AlexNone   | AlexLastAcc a !AlexInput !Int@@ -592,7 +560,9 @@   = AlexAccNone   | AlexAcc a   | AlexAccSkip-{-# LINE 235 "templates/GenericTemplate.hs" #-} +{-# LINE 242 "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.40+version:             0.1.0.43 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@@ -22,13 +22,15 @@                     transformers >=0.3,                     mtl >= 2.1,                     containers >= 0.4.2,-                    array >= 0.4.0.0+                    array >= 0.4.0.0,+                    pretty >= 1.1   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.TokenUtils,                     Language.EWE.Scanner,                     Language.EWE.CheckGrammar,                     Language.EWE.Parser@@ -37,4 +39,4 @@  source-repository head   type:	    git-  location: git://github.com/jfcmacro/ewe.git+  location: git://github.com:jfcmacro/ewe.git
src-ag/Language/EWE/AbsSyn.ag view
@@ -48,8 +48,8 @@            | 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     --+           | IFI  bcond :: MRef cond :: Cond then :: MRef Int        -- If Cond then Int+           | IFS  bcond :: MRef cond :: Cond then :: MRef String     --            | IH                             -- Halt            | IB                             -- Break            | INI
src-ag/Language/EWE/CheckGrammar.ag view
@@ -105,6 +105,7 @@   | INI   lhs.res = { Right () }  include "AbsSyn.ag"+include "PPProg.ag"  { isLabelDef :: String -> Set.Set String ->  Either String ()
src/Language/EWE/AbsSyn.hs view
@@ -1,6 +1,6 @@  --- UUAGC 0.9.50.2 (src-ag/Language/EWE/AbsSyn.ag)+-- UUAGC 0.9.52.1 (src-ag/Language/EWE/AbsSyn.ag) module Language.EWE.AbsSyn where -- Cond -------------------------------------------------------- {-
src/Language/EWE/CheckGrammar.hs view
@@ -1,16 +1,27 @@  --- UUAGC 0.9.50.2 (src-ag/Language/EWE/CheckGrammar.ag)+-- UUAGC 0.9.52.1 (src-ag/Language/EWE/CheckGrammar.ag) module Language.EWE.CheckGrammar where+{-# LINE 2 "src-ag/Language/EWE/PPProg.ag" #-}++import Text.PrettyPrint+{-# LINE 9 "src/Language/EWE/CheckGrammar.hs" #-}+ {-# 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 17 "src/Language/EWE/CheckGrammar.hs" #-}+{-# LINE 124 "src-ag/Language/EWE/PPProg.ag" #-} +(<==>) :: String -> Doc -> Doc+s <==> doc = text s $$ doc+{-# LINE 22 "src/Language/EWE/CheckGrammar.hs" #-}++{-# LINE 110 "src-ag/Language/EWE/CheckGrammar.ag" #-}+ isLabelDef :: String -> Set.Set String ->  Either String () isLabelDef str sets     | str `Set.member` sets = Right ()@@ -25,9 +36,12 @@ isMemRefDef str map     | str `Map.member` map = Right ()     | otherwise            = Left $ "Mem Ref: " ++ str ++ " is not defined"-{-# LINE 29 "src/Language/EWE/CheckGrammar.hs" #-}+{-# LINE 40 "src/Language/EWE/CheckGrammar.hs" #-} -- Cond -------------------------------------------------------- {-+   visit 0:+      synthesized attribute:+         pp                   : Doc    alternatives:       alternative CLET:       alternative CLT:@@ -52,45 +66,82 @@ sem_Cond (CNE) =     (sem_Cond_CNE) -- semantic domain-type T_Cond = ( )+type T_Cond = ( Doc) data Inh_Cond = Inh_Cond {}-data Syn_Cond = Syn_Cond {}+data Syn_Cond = Syn_Cond {pp_Syn_Cond :: Doc} wrap_Cond :: T_Cond ->              Inh_Cond ->              Syn_Cond wrap_Cond sem (Inh_Cond) =-    (let ( ) = sem-     in  (Syn_Cond))+    (let ( _lhsOpp) = sem+     in  (Syn_Cond _lhsOpp)) sem_Cond_CLET :: T_Cond sem_Cond_CLET =-    (let-     in  ( ))+    (let _lhsOpp :: Doc+         -- "src-ag/Language/EWE/PPProg.ag"(line 39, column 11)+         _lhsOpp =+             ({-# LINE 39 "src-ag/Language/EWE/PPProg.ag" #-}+              text "<="+              {-# LINE 86 "src/Language/EWE/CheckGrammar.hs" #-}+              )+     in  ( _lhsOpp)) sem_Cond_CLT :: T_Cond sem_Cond_CLT =-    (let-     in  ( ))+    (let _lhsOpp :: Doc+         -- "src-ag/Language/EWE/PPProg.ag"(line 40, column 11)+         _lhsOpp =+             ({-# LINE 40 "src-ag/Language/EWE/PPProg.ag" #-}+              char '<'+              {-# LINE 96 "src/Language/EWE/CheckGrammar.hs" #-}+              )+     in  ( _lhsOpp)) sem_Cond_CGET :: T_Cond sem_Cond_CGET =-    (let-     in  ( ))+    (let _lhsOpp :: Doc+         -- "src-ag/Language/EWE/PPProg.ag"(line 41, column 11)+         _lhsOpp =+             ({-# LINE 41 "src-ag/Language/EWE/PPProg.ag" #-}+              text ">="+              {-# LINE 106 "src/Language/EWE/CheckGrammar.hs" #-}+              )+     in  ( _lhsOpp)) sem_Cond_CGT :: T_Cond sem_Cond_CGT =-    (let-     in  ( ))+    (let _lhsOpp :: Doc+         -- "src-ag/Language/EWE/PPProg.ag"(line 42, column 11)+         _lhsOpp =+             ({-# LINE 42 "src-ag/Language/EWE/PPProg.ag" #-}+              char '>'+              {-# LINE 116 "src/Language/EWE/CheckGrammar.hs" #-}+              )+     in  ( _lhsOpp)) sem_Cond_CE :: T_Cond sem_Cond_CE =-    (let-     in  ( ))+    (let _lhsOpp :: Doc+         -- "src-ag/Language/EWE/PPProg.ag"(line 43, column 11)+         _lhsOpp =+             ({-# LINE 43 "src-ag/Language/EWE/PPProg.ag" #-}+              char '='+              {-# LINE 126 "src/Language/EWE/CheckGrammar.hs" #-}+              )+     in  ( _lhsOpp)) sem_Cond_CNE :: T_Cond sem_Cond_CNE =-    (let-     in  ( ))+    (let _lhsOpp :: Doc+         -- "src-ag/Language/EWE/PPProg.ag"(line 44, column 11)+         _lhsOpp =+             ({-# LINE 44 "src-ag/Language/EWE/PPProg.ag" #-}+              text "<>"+              {-# LINE 136 "src/Language/EWE/CheckGrammar.hs" #-}+              )+     in  ( _lhsOpp)) -- Equ --------------------------------------------------------- {-    visit 0:       chained attribute:          idMemRef             : Map.Map String Int-      synthesized attribute:+      synthesized attributes:+         pp                   : Doc          res                  : Either String ()    alternatives:       alternative Tuple:@@ -104,42 +155,52 @@     (sem_Equ_Tuple x1 x2) -- semantic domain type T_Equ = (Map.Map String Int) ->-             ( (Map.Map String Int),(Either String ()))+             ( (Map.Map String Int),Doc,(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 ())}+data Syn_Equ = Syn_Equ {idMemRef_Syn_Equ :: (Map.Map String Int),pp_Syn_Equ :: Doc,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))+    (let ( _lhsOidMemRef,_lhsOpp,_lhsOres) = sem _lhsIidMemRef+     in  (Syn_Equ _lhsOidMemRef _lhsOpp _lhsOres)) sem_Equ_Tuple :: String ->                  Int ->                  T_Equ sem_Equ_Tuple x1_ x2_ =     (\ _lhsIidMemRef ->-         (let _lhsOres :: (Either String ())+         (let _lhsOpp :: Doc+              _lhsOres :: (Either String ())               _lhsOidMemRef :: (Map.Map String Int)+              -- "src-ag/Language/EWE/PPProg.ag"(line 47, column 11)+              _lhsOpp =+                  ({-# LINE 47 "src-ag/Language/EWE/PPProg.ag" #-}+                   text "equ" <+> nest 5 (text x1_)+                              <+> nest 10 (text "M" <> brackets (int x2_))+                   {-# LINE 181 "src/Language/EWE/CheckGrammar.hs" #-}+                   )               -- "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" #-}+                   {-# LINE 189 "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" #-}+                   {-# LINE 195 "src/Language/EWE/CheckGrammar.hs" #-}                    )-          in  ( _lhsOidMemRef,_lhsOres)))+          in  ( _lhsOidMemRef,_lhsOpp,_lhsOres))) -- Equates ----------------------------------------------------- {-    visit 0:       chained attribute:          idMemRef             : Map.Map String Int+      synthesized attribute:+         pp                   : Doc    alternatives:       alternative Cons:          child hd             : Equ @@ -153,67 +214,84 @@     (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))+                 ( (Map.Map String Int),Doc) data Inh_Equates = Inh_Equates {idMemRef_Inh_Equates :: (Map.Map String Int)}-data Syn_Equates = Syn_Equates {idMemRef_Syn_Equates :: (Map.Map String Int)}+data Syn_Equates = Syn_Equates {idMemRef_Syn_Equates :: (Map.Map String Int),pp_Syn_Equates :: Doc} wrap_Equates :: T_Equates ->                 Inh_Equates ->                 Syn_Equates wrap_Equates sem (Inh_Equates _lhsIidMemRef) =-    (let ( _lhsOidMemRef) = sem _lhsIidMemRef-     in  (Syn_Equates _lhsOidMemRef))+    (let ( _lhsOidMemRef,_lhsOpp) = sem _lhsIidMemRef+     in  (Syn_Equates _lhsOidMemRef _lhsOpp)) sem_Equates_Cons :: T_Equ ->                     T_Equates ->                     T_Equates sem_Equates_Cons hd_ tl_ =     (\ _lhsIidMemRef ->-         (let _lhsOidMemRef :: (Map.Map String Int)+         (let _lhsOpp :: Doc+              _lhsOidMemRef :: (Map.Map String Int)               _hdOidMemRef :: (Map.Map String Int)               _tlOidMemRef :: (Map.Map String Int)               _hdIidMemRef :: (Map.Map String Int)+              _hdIpp :: Doc               _hdIres :: (Either String ())               _tlIidMemRef :: (Map.Map String Int)+              _tlIpp :: Doc+              -- use rule "src-ag/Language/EWE/PPProg.ag"(line 16, column 10)+              _lhsOpp =+                  ({-# LINE 16 "src-ag/Language/EWE/PPProg.ag" #-}+                   _hdIpp $$ _tlIpp+                   {-# LINE 245 "src/Language/EWE/CheckGrammar.hs" #-}+                   )               -- copy rule (up)               _lhsOidMemRef =                   ({-# LINE 13 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    _tlIidMemRef-                   {-# LINE 181 "src/Language/EWE/CheckGrammar.hs" #-}+                   {-# LINE 251 "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" #-}+                   {-# LINE 257 "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" #-}+                   {-# LINE 263 "src/Language/EWE/CheckGrammar.hs" #-}                    )-              ( _hdIidMemRef,_hdIres) =+              ( _hdIidMemRef,_hdIpp,_hdIres) =                   hd_ _hdOidMemRef-              ( _tlIidMemRef) =+              ( _tlIidMemRef,_tlIpp) =                   tl_ _tlOidMemRef-          in  ( _lhsOidMemRef)))+          in  ( _lhsOidMemRef,_lhsOpp))) sem_Equates_Nil :: T_Equates sem_Equates_Nil =     (\ _lhsIidMemRef ->-         (let _lhsOidMemRef :: (Map.Map String Int)+         (let _lhsOpp :: Doc+              _lhsOidMemRef :: (Map.Map String Int)+              -- use rule "src-ag/Language/EWE/PPProg.ag"(line 16, column 10)+              _lhsOpp =+                  ({-# LINE 16 "src-ag/Language/EWE/PPProg.ag" #-}+                   empty+                   {-# LINE 279 "src/Language/EWE/CheckGrammar.hs" #-}+                   )               -- copy rule (chain)               _lhsOidMemRef =                   ({-# LINE 13 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    _lhsIidMemRef-                   {-# LINE 208 "src/Language/EWE/CheckGrammar.hs" #-}+                   {-# LINE 285 "src/Language/EWE/CheckGrammar.hs" #-}                    )-          in  ( _lhsOidMemRef)))+          in  ( _lhsOidMemRef,_lhsOpp))) -- Instr ------------------------------------------------------- {-    visit 0:       inherited attributes:          idMemRefDef          : Map.Map String Int          labelFound           : Set.Set String-      synthesized attribute:+      synthesized attributes:+         pp                   : Doc          res                  : Either String ()    alternatives:       alternative IMMI:@@ -337,144 +415,191 @@ -- semantic domain type T_Instr = (Map.Map String Int) ->                (Set.Set String) ->-               ( (Either String ()))+               ( Doc,(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 ())}+data Syn_Instr = Syn_Instr {pp_Syn_Instr :: Doc,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))+    (let ( _lhsOpp,_lhsOres) = sem _lhsIidMemRefDef _lhsIlabelFound+     in  (Syn_Instr _lhsOpp _lhsOres)) sem_Instr_IMMI :: T_MRef ->                   Int ->                   T_Instr sem_Instr_IMMI dest_ int_ =     (\ _lhsIidMemRefDef        _lhsIlabelFound ->-         (let _lhsOres :: (Either String ())+         (let _lhsOpp :: Doc+              _lhsOres :: (Either String ())               _destOidMemRefDef :: ( Map.Map String Int )+              _destIpp :: Doc               _destIres :: ( Either String () )+              -- "src-ag/Language/EWE/PPProg.ag"(line 57, column 11)+              _lhsOpp =+                  ({-# LINE 57 "src-ag/Language/EWE/PPProg.ag" #-}+                   _destIpp <+> nest 5 (text ":=") <+> nest 5 (int int_)+                   {-# LINE 443 "src/Language/EWE/CheckGrammar.hs" #-}+                   )               -- "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" #-}+                   {-# LINE 449 "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" #-}+                   {-# LINE 455 "src/Language/EWE/CheckGrammar.hs" #-}                    )-              ( _destIres) =+              ( _destIpp,_destIres) =                   dest_ _destOidMemRefDef-          in  ( _lhsOres)))+          in  ( _lhsOpp,_lhsOres))) sem_Instr_IMMS :: T_MRef ->                   String ->                   T_Instr sem_Instr_IMMS dest_ string_ =     (\ _lhsIidMemRefDef        _lhsIlabelFound ->-         (let _lhsOres :: (Either String ())+         (let _lhsOpp :: Doc+              _lhsOres :: (Either String ())               _destOidMemRefDef :: ( Map.Map String Int )+              _destIpp :: Doc               _destIres :: ( Either String () )+              -- "src-ag/Language/EWE/PPProg.ag"(line 58, column 11)+              _lhsOpp =+                  ({-# LINE 58 "src-ag/Language/EWE/PPProg.ag" #-}+                   _destIpp <+> nest 5 (text ":=")+                            <+> nest 5 (doubleQuotes (text string_))+                   {-# LINE 476 "src/Language/EWE/CheckGrammar.hs" #-}+                   )               -- "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" #-}+                   {-# LINE 482 "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" #-}+                   {-# LINE 488 "src/Language/EWE/CheckGrammar.hs" #-}                    )-              ( _destIres) =+              ( _destIpp,_destIres) =                   dest_ _destOidMemRefDef-          in  ( _lhsOres)))+          in  ( _lhsOpp,_lhsOres))) sem_Instr_IMRPC :: T_MRef ->                    Int ->                    T_Instr sem_Instr_IMRPC dest_ int_ =     (\ _lhsIidMemRefDef        _lhsIlabelFound ->-         (let _lhsOres :: (Either String ())+         (let _lhsOpp :: Doc+              _lhsOres :: (Either String ())               _destOidMemRefDef :: ( Map.Map String Int )+              _destIpp :: Doc               _destIres :: ( Either String () )+              -- "src-ag/Language/EWE/PPProg.ag"(line 60, column 11)+              _lhsOpp =+                  ({-# LINE 60 "src-ag/Language/EWE/PPProg.ag" #-}+                   _destIpp <+> nest 5 (text ":=")+                            <+> nest 5 (text "PC")+                            <+> char '+'+                            <+> int int_+                   {-# LINE 511 "src/Language/EWE/CheckGrammar.hs" #-}+                   )               -- "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" #-}+                   {-# LINE 517 "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" #-}+                   {-# LINE 523 "src/Language/EWE/CheckGrammar.hs" #-}                    )-              ( _destIres) =+              ( _destIpp,_destIres) =                   dest_ _destOidMemRefDef-          in  ( _lhsOres)))+          in  ( _lhsOpp,_lhsOres))) sem_Instr_SPC :: T_MRef ->                  T_Instr sem_Instr_SPC oper_ =     (\ _lhsIidMemRefDef        _lhsIlabelFound ->-         (let _lhsOres :: (Either String ())+         (let _lhsOpp :: Doc+              _lhsOres :: (Either String ())               _operOidMemRefDef :: ( Map.Map String Int )+              _operIpp :: Doc               _operIres :: ( Either String () )+              -- "src-ag/Language/EWE/PPProg.ag"(line 65, column 11)+              _lhsOpp =+                  ({-# LINE 65 "src-ag/Language/EWE/PPProg.ag" #-}+                   text "PC" <+> nest 5 (text ":=")+                             <+> nest 5 _operIpp+                   {-# LINE 543 "src/Language/EWE/CheckGrammar.hs" #-}+                   )               -- "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" #-}+                   {-# LINE 549 "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" #-}+                   {-# LINE 555 "src/Language/EWE/CheckGrammar.hs" #-}                    )-              ( _operIres) =+              ( _operIpp,_operIres) =                   oper_ _operOidMemRefDef-          in  ( _lhsOres)))+          in  ( _lhsOpp,_lhsOres))) sem_Instr_IMMM :: T_MRef ->                   T_MRef ->                   T_Instr sem_Instr_IMMM dest_ oper_ =     (\ _lhsIidMemRefDef        _lhsIlabelFound ->-         (let _lhsOres :: (Either String ())+         (let _lhsOpp :: Doc+              _lhsOres :: (Either String ())               _destOidMemRefDef :: ( Map.Map String Int )               _operOidMemRefDef :: ( Map.Map String Int )+              _destIpp :: Doc               _destIres :: ( Either String () )+              _operIpp :: Doc               _operIres :: ( Either String () )+              -- "src-ag/Language/EWE/PPProg.ag"(line 68, column 11)+              _lhsOpp =+                  ({-# LINE 68 "src-ag/Language/EWE/PPProg.ag" #-}+                   _destIpp <+> nest 5 (text ":=")+                            <+> nest 5 _operIpp+                   {-# LINE 579 "src/Language/EWE/CheckGrammar.hs" #-}+                   )               -- "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" #-}+                   {-# LINE 585 "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" #-}+                   {-# LINE 591 "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" #-}+                   {-# LINE 597 "src/Language/EWE/CheckGrammar.hs" #-}                    )-              ( _destIres) =+              ( _destIpp,_destIres) =                   dest_ _destOidMemRefDef-              ( _operIres) =+              ( _operIpp,_operIres) =                   oper_ _operOidMemRefDef-          in  ( _lhsOres)))+          in  ( _lhsOpp,_lhsOres))) sem_Instr_IAdd :: T_MRef ->                   T_MRef ->                   T_MRef ->@@ -482,44 +607,57 @@ sem_Instr_IAdd dest_ left_ right_ =     (\ _lhsIidMemRefDef        _lhsIlabelFound ->-         (let _lhsOres :: (Either String ())+         (let _lhsOpp :: Doc+              _lhsOres :: (Either String ())               _destOidMemRefDef :: ( Map.Map String Int )               _leftOidMemRefDef :: ( Map.Map String Int )               _rightOidMemRefDef :: ( Map.Map String Int )+              _destIpp :: Doc               _destIres :: ( Either String () )+              _leftIpp :: Doc               _leftIres :: ( Either String () )+              _rightIpp :: Doc               _rightIres :: ( Either String () )+              -- "src-ag/Language/EWE/PPProg.ag"(line 71, column 11)+              _lhsOpp =+                  ({-# LINE 71 "src-ag/Language/EWE/PPProg.ag" #-}+                   _destIpp <+> nest 5 (text ":=")+                            <+> nest 5 _leftIpp+                            <+> char '+'+                            <+> _rightIpp+                   {-# LINE 629 "src/Language/EWE/CheckGrammar.hs" #-}+                   )               -- "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" #-}+                   {-# LINE 635 "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" #-}+                   {-# LINE 641 "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" #-}+                   {-# LINE 647 "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" #-}+                   {-# LINE 653 "src/Language/EWE/CheckGrammar.hs" #-}                    )-              ( _destIres) =+              ( _destIpp,_destIres) =                   dest_ _destOidMemRefDef-              ( _leftIres) =+              ( _leftIpp,_leftIres) =                   left_ _leftOidMemRefDef-              ( _rightIres) =+              ( _rightIpp,_rightIres) =                   right_ _rightOidMemRefDef-          in  ( _lhsOres)))+          in  ( _lhsOpp,_lhsOres))) sem_Instr_ISub :: T_MRef ->                   T_MRef ->                   T_MRef ->@@ -527,44 +665,57 @@ sem_Instr_ISub dest_ left_ right_ =     (\ _lhsIidMemRefDef        _lhsIlabelFound ->-         (let _lhsOres :: (Either String ())+         (let _lhsOpp :: Doc+              _lhsOres :: (Either String ())               _destOidMemRefDef :: ( Map.Map String Int )               _leftOidMemRefDef :: ( Map.Map String Int )               _rightOidMemRefDef :: ( Map.Map String Int )+              _destIpp :: Doc               _destIres :: ( Either String () )+              _leftIpp :: Doc               _leftIres :: ( Either String () )+              _rightIpp :: Doc               _rightIres :: ( Either String () )+              -- "src-ag/Language/EWE/PPProg.ag"(line 76, column 11)+              _lhsOpp =+                  ({-# LINE 76 "src-ag/Language/EWE/PPProg.ag" #-}+                   _destIpp <+> nest 5 (text ":=")+                            <+> nest 5 _leftIpp+                            <+> char '-'+                            <+> _rightIpp+                   {-# LINE 687 "src/Language/EWE/CheckGrammar.hs" #-}+                   )               -- "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" #-}+                   {-# LINE 693 "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" #-}+                   {-# LINE 699 "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" #-}+                   {-# LINE 705 "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" #-}+                   {-# LINE 711 "src/Language/EWE/CheckGrammar.hs" #-}                    )-              ( _destIres) =+              ( _destIpp,_destIres) =                   dest_ _destOidMemRefDef-              ( _leftIres) =+              ( _leftIpp,_leftIres) =                   left_ _leftOidMemRefDef-              ( _rightIres) =+              ( _rightIpp,_rightIres) =                   right_ _rightOidMemRefDef-          in  ( _lhsOres)))+          in  ( _lhsOpp,_lhsOres))) sem_Instr_IMul :: T_MRef ->                   T_MRef ->                   T_MRef ->@@ -572,44 +723,57 @@ sem_Instr_IMul dest_ left_ right_ =     (\ _lhsIidMemRefDef        _lhsIlabelFound ->-         (let _lhsOres :: (Either String ())+         (let _lhsOpp :: Doc+              _lhsOres :: (Either String ())               _destOidMemRefDef :: ( Map.Map String Int )               _leftOidMemRefDef :: ( Map.Map String Int )               _rightOidMemRefDef :: ( Map.Map String Int )+              _destIpp :: Doc               _destIres :: ( Either String () )+              _leftIpp :: Doc               _leftIres :: ( Either String () )+              _rightIpp :: Doc               _rightIres :: ( Either String () )+              -- "src-ag/Language/EWE/PPProg.ag"(line 81, column 11)+              _lhsOpp =+                  ({-# LINE 81 "src-ag/Language/EWE/PPProg.ag" #-}+                   _destIpp <+> nest 5 (text ":=")+                            <+> nest 5 _leftIpp+                            <+> char '*'+                            <+> _rightIpp+                   {-# LINE 745 "src/Language/EWE/CheckGrammar.hs" #-}+                   )               -- "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" #-}+                   {-# LINE 751 "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" #-}+                   {-# LINE 757 "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" #-}+                   {-# LINE 763 "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" #-}+                   {-# LINE 769 "src/Language/EWE/CheckGrammar.hs" #-}                    )-              ( _destIres) =+              ( _destIpp,_destIres) =                   dest_ _destOidMemRefDef-              ( _leftIres) =+              ( _leftIpp,_leftIres) =                   left_ _leftOidMemRefDef-              ( _rightIres) =+              ( _rightIpp,_rightIres) =                   right_ _rightOidMemRefDef-          in  ( _lhsOres)))+          in  ( _lhsOpp,_lhsOres))) sem_Instr_IDiv :: T_MRef ->                   T_MRef ->                   T_MRef ->@@ -617,44 +781,57 @@ sem_Instr_IDiv dest_ left_ right_ =     (\ _lhsIidMemRefDef        _lhsIlabelFound ->-         (let _lhsOres :: (Either String ())+         (let _lhsOpp :: Doc+              _lhsOres :: (Either String ())               _destOidMemRefDef :: ( Map.Map String Int )               _leftOidMemRefDef :: ( Map.Map String Int )               _rightOidMemRefDef :: ( Map.Map String Int )+              _destIpp :: Doc               _destIres :: ( Either String () )+              _leftIpp :: Doc               _leftIres :: ( Either String () )+              _rightIpp :: Doc               _rightIres :: ( Either String () )+              -- "src-ag/Language/EWE/PPProg.ag"(line 86, column 11)+              _lhsOpp =+                  ({-# LINE 86 "src-ag/Language/EWE/PPProg.ag" #-}+                   _destIpp <+> nest 5 (text ":=")+                            <+> nest 5 _leftIpp+                            <+> char '/'+                            <+> _rightIpp+                   {-# LINE 803 "src/Language/EWE/CheckGrammar.hs" #-}+                   )               -- "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" #-}+                   {-# LINE 809 "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" #-}+                   {-# LINE 815 "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" #-}+                   {-# LINE 821 "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" #-}+                   {-# LINE 827 "src/Language/EWE/CheckGrammar.hs" #-}                    )-              ( _destIres) =+              ( _destIpp,_destIres) =                   dest_ _destOidMemRefDef-              ( _leftIres) =+              ( _leftIpp,_leftIres) =                   left_ _leftOidMemRefDef-              ( _rightIres) =+              ( _rightIpp,_rightIres) =                   right_ _rightOidMemRefDef-          in  ( _lhsOres)))+          in  ( _lhsOpp,_lhsOres))) sem_Instr_IMod :: T_MRef ->                   T_MRef ->                   T_MRef ->@@ -662,44 +839,57 @@ sem_Instr_IMod dest_ left_ right_ =     (\ _lhsIidMemRefDef        _lhsIlabelFound ->-         (let _lhsOres :: (Either String ())+         (let _lhsOpp :: Doc+              _lhsOres :: (Either String ())               _destOidMemRefDef :: ( Map.Map String Int )               _leftOidMemRefDef :: ( Map.Map String Int )               _rightOidMemRefDef :: ( Map.Map String Int )+              _destIpp :: Doc               _destIres :: ( Either String () )+              _leftIpp :: Doc               _leftIres :: ( Either String () )+              _rightIpp :: Doc               _rightIres :: ( Either String () )+              -- "src-ag/Language/EWE/PPProg.ag"(line 91, column 11)+              _lhsOpp =+                  ({-# LINE 91 "src-ag/Language/EWE/PPProg.ag" #-}+                   _destIpp <+> nest 5 (text ":=")+                            <+> nest 5 _leftIpp+                            <+> char '%'+                            <+> _rightIpp+                   {-# LINE 861 "src/Language/EWE/CheckGrammar.hs" #-}+                   )               -- "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" #-}+                   {-# LINE 867 "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" #-}+                   {-# LINE 873 "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" #-}+                   {-# LINE 879 "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" #-}+                   {-# LINE 885 "src/Language/EWE/CheckGrammar.hs" #-}                    )-              ( _destIres) =+              ( _destIpp,_destIres) =                   dest_ _destOidMemRefDef-              ( _leftIres) =+              ( _leftIpp,_leftIres) =                   left_ _leftOidMemRefDef-              ( _rightIres) =+              ( _rightIpp,_rightIres) =                   right_ _rightOidMemRefDef-          in  ( _lhsOres)))+          in  ( _lhsOpp,_lhsOres))) sem_Instr_IMRI :: T_MRef ->                   T_MRef ->                   Int ->@@ -707,34 +897,47 @@ sem_Instr_IMRI dest_ oper_ int_ =     (\ _lhsIidMemRefDef        _lhsIlabelFound ->-         (let _lhsOres :: (Either String ())+         (let _lhsOpp :: Doc+              _lhsOres :: (Either String ())               _destOidMemRefDef :: ( Map.Map String Int )               _operOidMemRefDef :: ( Map.Map String Int )+              _destIpp :: Doc               _destIres :: ( Either String () )+              _operIpp :: Doc               _operIres :: ( Either String () )+              -- "src-ag/Language/EWE/PPProg.ag"(line 96, column 11)+              _lhsOpp =+                  ({-# LINE 96 "src-ag/Language/EWE/PPProg.ag" #-}+                   _destIpp <+> nest 5 (text ":=")+                            <+> nest 5 (char 'M')+                            <> brackets (_operIpp+                                <+> char '+'+                                <+> int int_)+                   {-# LINE 917 "src/Language/EWE/CheckGrammar.hs" #-}+                   )               -- "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" #-}+                   {-# LINE 923 "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" #-}+                   {-# LINE 929 "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" #-}+                   {-# LINE 935 "src/Language/EWE/CheckGrammar.hs" #-}                    )-              ( _destIres) =+              ( _destIpp,_destIres) =                   dest_ _destOidMemRefDef-              ( _operIres) =+              ( _operIpp,_operIres) =                   oper_ _operOidMemRefDef-          in  ( _lhsOres)))+          in  ( _lhsOpp,_lhsOres))) sem_Instr_IMMR :: T_MRef ->                   Int ->                   T_MRef ->@@ -742,163 +945,224 @@ sem_Instr_IMMR dest_ int_ oper_ =     (\ _lhsIidMemRefDef        _lhsIlabelFound ->-         (let _lhsOres :: (Either String ())+         (let _lhsOpp :: Doc+              _lhsOres :: (Either String ())               _destOidMemRefDef :: ( Map.Map String Int )               _operOidMemRefDef :: ( Map.Map String Int )+              _destIpp :: Doc               _destIres :: ( Either String () )+              _operIpp :: Doc               _operIres :: ( Either String () )+              -- "src-ag/Language/EWE/PPProg.ag"(line 102, column 11)+              _lhsOpp =+                  ({-# LINE 102 "src-ag/Language/EWE/PPProg.ag" #-}+                   char 'M' <> brackets (_destIpp+                                          <+> char '+'+                                          <+> int int_)+                            <+> nest 5 (text ":=")+                            <+> nest 5 _operIpp+                   {-# LINE 965 "src/Language/EWE/CheckGrammar.hs" #-}+                   )               -- "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" #-}+                   {-# LINE 971 "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" #-}+                   {-# LINE 977 "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" #-}+                   {-# LINE 983 "src/Language/EWE/CheckGrammar.hs" #-}                    )-              ( _destIres) =+              ( _destIpp,_destIres) =                   dest_ _destOidMemRefDef-              ( _operIres) =+              ( _operIpp,_operIres) =                   oper_ _operOidMemRefDef-          in  ( _lhsOres)))+          in  ( _lhsOpp,_lhsOres))) sem_Instr_IRI :: T_MRef ->                  T_Instr sem_Instr_IRI oper_ =     (\ _lhsIidMemRefDef        _lhsIlabelFound ->-         (let _lhsOres :: (Either String ())+         (let _lhsOpp :: Doc+              _lhsOres :: (Either String ())               _operOidMemRefDef :: ( Map.Map String Int )+              _operIpp :: Doc               _operIres :: ( Either String () )+              -- "src-ag/Language/EWE/PPProg.ag"(line 108, column 11)+              _lhsOpp =+                  ({-# LINE 108 "src-ag/Language/EWE/PPProg.ag" #-}+                   text "readInt" <> parens _operIpp+                   {-# LINE 1004 "src/Language/EWE/CheckGrammar.hs" #-}+                   )               -- "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" #-}+                   {-# LINE 1010 "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" #-}+                   {-# LINE 1016 "src/Language/EWE/CheckGrammar.hs" #-}                    )-              ( _operIres) =+              ( _operIpp,_operIres) =                   oper_ _operOidMemRefDef-          in  ( _lhsOres)))+          in  ( _lhsOpp,_lhsOres))) sem_Instr_IWI :: T_MRef ->                  T_Instr sem_Instr_IWI oper_ =     (\ _lhsIidMemRefDef        _lhsIlabelFound ->-         (let _lhsOres :: (Either String ())+         (let _lhsOpp :: Doc+              _lhsOres :: (Either String ())               _operOidMemRefDef :: ( Map.Map String Int )+              _operIpp :: Doc               _operIres :: ( Either String () )+              -- "src-ag/Language/EWE/PPProg.ag"(line 109, column 11)+              _lhsOpp =+                  ({-# LINE 109 "src-ag/Language/EWE/PPProg.ag" #-}+                   text "writeInt" <> parens _operIpp+                   {-# LINE 1035 "src/Language/EWE/CheckGrammar.hs" #-}+                   )               -- "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" #-}+                   {-# LINE 1041 "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" #-}+                   {-# LINE 1047 "src/Language/EWE/CheckGrammar.hs" #-}                    )-              ( _operIres) =+              ( _operIpp,_operIres) =                   oper_ _operOidMemRefDef-          in  ( _lhsOres)))+          in  ( _lhsOpp,_lhsOres))) sem_Instr_IRS :: T_MRef ->                  T_MRef ->                  T_Instr sem_Instr_IRS left_ right_ =     (\ _lhsIidMemRefDef        _lhsIlabelFound ->-         (let _lhsOres :: (Either String ())+         (let _lhsOpp :: Doc+              _lhsOres :: (Either String ())               _leftOidMemRefDef :: ( Map.Map String Int )               _rightOidMemRefDef :: ( Map.Map String Int )+              _leftIpp :: Doc               _leftIres :: ( Either String () )+              _rightIpp :: Doc               _rightIres :: ( Either String () )+              -- "src-ag/Language/EWE/PPProg.ag"(line 110, column 11)+              _lhsOpp =+                  ({-# LINE 110 "src-ag/Language/EWE/PPProg.ag" #-}+                   text "readStr" <> parens (_leftIpp <> comma+                                                      <+> _rightIpp)+                   {-# LINE 1071 "src/Language/EWE/CheckGrammar.hs" #-}+                   )               -- "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" #-}+                   {-# LINE 1077 "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" #-}+                   {-# LINE 1083 "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" #-}+                   {-# LINE 1089 "src/Language/EWE/CheckGrammar.hs" #-}                    )-              ( _leftIres) =+              ( _leftIpp,_leftIres) =                   left_ _leftOidMemRefDef-              ( _rightIres) =+              ( _rightIpp,_rightIres) =                   right_ _rightOidMemRefDef-          in  ( _lhsOres)))+          in  ( _lhsOpp,_lhsOres))) sem_Instr_IWS :: T_MRef ->                  T_Instr sem_Instr_IWS oper_ =     (\ _lhsIidMemRefDef        _lhsIlabelFound ->-         (let _lhsOres :: (Either String ())+         (let _lhsOpp :: Doc+              _lhsOres :: (Either String ())               _operOidMemRefDef :: ( Map.Map String Int )+              _operIpp :: Doc               _operIres :: ( Either String () )+              -- "src-ag/Language/EWE/PPProg.ag"(line 112, column 11)+              _lhsOpp =+                  ({-# LINE 112 "src-ag/Language/EWE/PPProg.ag" #-}+                   text "writeStr" <> parens _operIpp+                   {-# LINE 1110 "src/Language/EWE/CheckGrammar.hs" #-}+                   )               -- "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" #-}+                   {-# LINE 1116 "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" #-}+                   {-# LINE 1122 "src/Language/EWE/CheckGrammar.hs" #-}                    )-              ( _operIres) =+              ( _operIpp,_operIres) =                   oper_ _operOidMemRefDef-          in  ( _lhsOres)))+          in  ( _lhsOpp,_lhsOres))) sem_Instr_IGI :: Int ->                  T_Instr sem_Instr_IGI int_ =     (\ _lhsIidMemRefDef        _lhsIlabelFound ->-         (let _lhsOres :: (Either String ())+         (let _lhsOpp :: Doc+              _lhsOres :: (Either String ())+              -- "src-ag/Language/EWE/PPProg.ag"(line 113, column 11)+              _lhsOpp =+                  ({-# LINE 113 "src-ag/Language/EWE/PPProg.ag" #-}+                   text "goto" <+> int int_+                   {-# LINE 1138 "src/Language/EWE/CheckGrammar.hs" #-}+                   )               -- "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" #-}+                   {-# LINE 1144 "src/Language/EWE/CheckGrammar.hs" #-}                    )-          in  ( _lhsOres)))+          in  ( _lhsOpp,_lhsOres))) sem_Instr_IGS :: String ->                  T_Instr sem_Instr_IGS string_ =     (\ _lhsIidMemRefDef        _lhsIlabelFound ->-         (let _lhsOres :: (Either String ())+         (let _lhsOpp :: Doc+              _lhsOres :: (Either String ())+              -- "src-ag/Language/EWE/PPProg.ag"(line 114, column 11)+              _lhsOpp =+                  ({-# LINE 114 "src-ag/Language/EWE/PPProg.ag" #-}+                   text "goto" <+> text string_+                   {-# LINE 1158 "src/Language/EWE/CheckGrammar.hs" #-}+                   )               -- "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" #-}+                   {-# LINE 1164 "src/Language/EWE/CheckGrammar.hs" #-}                    )-          in  ( _lhsOres)))+          in  ( _lhsOpp,_lhsOres))) sem_Instr_IFI :: T_MRef ->                  T_Cond ->                  T_MRef ->@@ -907,34 +1171,47 @@ sem_Instr_IFI bcond_ cond_ then_ int_ =     (\ _lhsIidMemRefDef        _lhsIlabelFound ->-         (let _lhsOres :: (Either String ())+         (let _lhsOpp :: Doc+              _lhsOres :: (Either String ())               _bcondOidMemRefDef :: ( Map.Map String Int )               _thenOidMemRefDef :: ( Map.Map String Int )+              _bcondIpp :: Doc               _bcondIres :: ( Either String () )+              _condIpp :: Doc+              _thenIpp :: Doc               _thenIres :: ( Either String () )+              -- "src-ag/Language/EWE/PPProg.ag"(line 115, column 11)+              _lhsOpp =+                  ({-# LINE 115 "src-ag/Language/EWE/PPProg.ag" #-}+                   text "if" <+> _bcondIpp <+> _condIpp <+> _thenIpp+                             <+> text "then" <+> text "goto" <+> int int_+                   {-# LINE 1189 "src/Language/EWE/CheckGrammar.hs" #-}+                   )               -- "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" #-}+                   {-# LINE 1195 "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" #-}+                   {-# LINE 1201 "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" #-}+                   {-# LINE 1207 "src/Language/EWE/CheckGrammar.hs" #-}                    )-              ( _bcondIres) =+              ( _bcondIpp,_bcondIres) =                   bcond_ _bcondOidMemRefDef-              ( _thenIres) =+              ( _condIpp) =+                  cond_+              ( _thenIpp,_thenIres) =                   then_ _thenOidMemRefDef-          in  ( _lhsOres)))+          in  ( _lhsOpp,_lhsOres))) sem_Instr_IFS :: T_MRef ->                  T_Cond ->                  T_MRef ->@@ -943,70 +1220,105 @@ sem_Instr_IFS bcond_ cond_ then_ string_ =     (\ _lhsIidMemRefDef        _lhsIlabelFound ->-         (let _lhsOres :: (Either String ())+         (let _lhsOpp :: Doc+              _lhsOres :: (Either String ())               _bcondOidMemRefDef :: ( Map.Map String Int )               _thenOidMemRefDef :: ( Map.Map String Int )+              _bcondIpp :: Doc               _bcondIres :: ( Either String () )+              _condIpp :: Doc+              _thenIpp :: Doc               _thenIres :: ( Either String () )+              -- "src-ag/Language/EWE/PPProg.ag"(line 117, column 11)+              _lhsOpp =+                  ({-# LINE 117 "src-ag/Language/EWE/PPProg.ag" #-}+                   text "if" <+> _bcondIpp <+> _condIpp <+> _thenIpp+                             <+> text "then" <+> text "goto"+                             <+> text string_+                   {-# LINE 1239 "src/Language/EWE/CheckGrammar.hs" #-}+                   )               -- "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" #-}+                   {-# LINE 1245 "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" #-}+                   {-# LINE 1251 "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" #-}+                   {-# LINE 1257 "src/Language/EWE/CheckGrammar.hs" #-}                    )-              ( _bcondIres) =+              ( _bcondIpp,_bcondIres) =                   bcond_ _bcondOidMemRefDef-              ( _thenIres) =+              ( _condIpp) =+                  cond_+              ( _thenIpp,_thenIres) =                   then_ _thenOidMemRefDef-          in  ( _lhsOres)))+          in  ( _lhsOpp,_lhsOres))) sem_Instr_IH :: T_Instr sem_Instr_IH =     (\ _lhsIidMemRefDef        _lhsIlabelFound ->-         (let _lhsOres :: (Either String ())+         (let _lhsOpp :: Doc+              _lhsOres :: (Either String ())+              -- "src-ag/Language/EWE/PPProg.ag"(line 120, column 11)+              _lhsOpp =+                  ({-# LINE 120 "src-ag/Language/EWE/PPProg.ag" #-}+                   text "halt"+                   {-# LINE 1276 "src/Language/EWE/CheckGrammar.hs" #-}+                   )               -- "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" #-}+                   {-# LINE 1282 "src/Language/EWE/CheckGrammar.hs" #-}                    )-          in  ( _lhsOres)))+          in  ( _lhsOpp,_lhsOres))) sem_Instr_IB :: T_Instr sem_Instr_IB =     (\ _lhsIidMemRefDef        _lhsIlabelFound ->-         (let _lhsOres :: (Either String ())+         (let _lhsOpp :: Doc+              _lhsOres :: (Either String ())+              -- "src-ag/Language/EWE/PPProg.ag"(line 121, column 11)+              _lhsOpp =+                  ({-# LINE 121 "src-ag/Language/EWE/PPProg.ag" #-}+                   text "break"+                   {-# LINE 1295 "src/Language/EWE/CheckGrammar.hs" #-}+                   )               -- "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" #-}+                   {-# LINE 1301 "src/Language/EWE/CheckGrammar.hs" #-}                    )-          in  ( _lhsOres)))+          in  ( _lhsOpp,_lhsOres))) sem_Instr_INI :: T_Instr sem_Instr_INI =     (\ _lhsIidMemRefDef        _lhsIlabelFound ->-         (let _lhsOres :: (Either String ())+         (let _lhsOpp :: Doc+              _lhsOres :: (Either String ())+              -- "src-ag/Language/EWE/PPProg.ag"(line 122, column 11)+              _lhsOpp =+                  ({-# LINE 122 "src-ag/Language/EWE/PPProg.ag" #-}+                   empty+                   {-# LINE 1314 "src/Language/EWE/CheckGrammar.hs" #-}+                   )               -- "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" #-}+                   {-# LINE 1320 "src/Language/EWE/CheckGrammar.hs" #-}                    )-          in  ( _lhsOres)))+          in  ( _lhsOpp,_lhsOres))) -- Labels ------------------------------------------------------ {-    visit 0:@@ -1014,6 +1326,7 @@          labelDef             :  Set.Set String        synthesized attributes:          copy                 : Labels +         pp                   : Doc          res                  :  Either String ()     alternatives:       alternative Cons:@@ -1032,15 +1345,15 @@     (Prelude.foldr sem_Labels_Cons sem_Labels_Nil list) -- semantic domain type T_Labels = ( Set.Set String ) ->-                ( Labels,( Set.Set String ),( Either String () ))+                ( Labels,( Set.Set String ),Doc,( 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 () )}+data Syn_Labels = Syn_Labels {copy_Syn_Labels :: Labels,labelDef_Syn_Labels :: ( Set.Set String ),pp_Syn_Labels :: Doc,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))+    (let ( _lhsOcopy,_lhsOlabelDef,_lhsOpp,_lhsOres) = sem _lhsIlabelDef+     in  (Syn_Labels _lhsOcopy _lhsOlabelDef _lhsOpp _lhsOres)) sem_Labels_Cons :: String ->                    T_Labels ->                    T_Labels@@ -1048,81 +1361,97 @@     (\ _lhsIlabelDef ->          (let _lhsOres :: ( Either String () )               _lhsOlabelDef :: ( Set.Set String )+              _lhsOpp :: Doc               _lhsOcopy :: Labels               _tlOlabelDef :: ( Set.Set String )               _tlIcopy :: Labels               _tlIlabelDef :: ( Set.Set String )+              _tlIpp :: Doc               _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" #-}+                   {-# LINE 1376 "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" #-}+                   {-# LINE 1382 "src/Language/EWE/CheckGrammar.hs" #-}                    )+              -- use rule "src-ag/Language/EWE/PPProg.ag"(line 19, column 10)+              _lhsOpp =+                  ({-# LINE 19 "src-ag/Language/EWE/PPProg.ag" #-}+                   _tlIpp+                   {-# LINE 1388 "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" #-}+                   {-# LINE 1394 "src/Language/EWE/CheckGrammar.hs" #-}                    )               -- self rule               _lhsOcopy =                   ({-# LINE 39 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    _copy-                   {-# LINE 1079 "src/Language/EWE/CheckGrammar.hs" #-}+                   {-# LINE 1400 "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" #-}+                   {-# LINE 1406 "src/Language/EWE/CheckGrammar.hs" #-}                    )-              ( _tlIcopy,_tlIlabelDef,_tlIres) =+              ( _tlIcopy,_tlIlabelDef,_tlIpp,_tlIres) =                   tl_ _tlOlabelDef-          in  ( _lhsOcopy,_lhsOlabelDef,_lhsOres)))+          in  ( _lhsOcopy,_lhsOlabelDef,_lhsOpp,_lhsOres))) sem_Labels_Nil :: T_Labels sem_Labels_Nil =     (\ _lhsIlabelDef ->          (let _lhsOres :: ( Either String () )               _lhsOlabelDef :: ( Set.Set String )+              _lhsOpp :: Doc               _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" #-}+                   {-# LINE 1422 "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" #-}+                   {-# LINE 1428 "src/Language/EWE/CheckGrammar.hs" #-}                    )+              -- use rule "src-ag/Language/EWE/PPProg.ag"(line 19, column 10)+              _lhsOpp =+                  ({-# LINE 19 "src-ag/Language/EWE/PPProg.ag" #-}+                   empty+                   {-# LINE 1434 "src/Language/EWE/CheckGrammar.hs" #-}+                   )               -- self rule               _copy =                   ({-# LINE 39 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    []-                   {-# LINE 1112 "src/Language/EWE/CheckGrammar.hs" #-}+                   {-# LINE 1440 "src/Language/EWE/CheckGrammar.hs" #-}                    )               -- self rule               _lhsOcopy =                   ({-# LINE 39 "src-ag/Language/EWE/CheckGrammar.ag" #-}                    _copy-                   {-# LINE 1118 "src/Language/EWE/CheckGrammar.hs" #-}+                   {-# LINE 1446 "src/Language/EWE/CheckGrammar.hs" #-}                    )-          in  ( _lhsOcopy,_lhsOlabelDef,_lhsOres)))+          in  ( _lhsOcopy,_lhsOlabelDef,_lhsOpp,_lhsOres))) -- MRef -------------------------------------------------------- {-    visit 0:       inherited attribute:          idMemRefDef          :  Map.Map String Int -      synthesized attribute:+      synthesized attributes:+         pp                   : Doc          res                  :  Either String ()     alternatives:       alternative MRefI:@@ -1139,43 +1468,59 @@     (sem_MRef_MRefId _string) -- semantic domain type T_MRef = ( Map.Map String Int ) ->-              ( ( Either String () ))+              ( Doc,( Either String () )) data Inh_MRef = Inh_MRef {idMemRefDef_Inh_MRef :: ( Map.Map String Int )}-data Syn_MRef = Syn_MRef {res_Syn_MRef :: ( Either String () )}+data Syn_MRef = Syn_MRef {pp_Syn_MRef :: Doc,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))+    (let ( _lhsOpp,_lhsOres) = sem _lhsIidMemRefDef+     in  (Syn_MRef _lhsOpp _lhsOres)) sem_MRef_MRefI :: Int ->                   T_MRef sem_MRef_MRefI int_ =     (\ _lhsIidMemRefDef ->-         (let _lhsOres :: ( Either String () )+         (let _lhsOpp :: Doc+              _lhsOres :: ( Either String () )+              -- "src-ag/Language/EWE/PPProg.ag"(line 34, column 12)+              _lhsOpp =+                  ({-# LINE 34 "src-ag/Language/EWE/PPProg.ag" #-}+                   text "M" <> brackets ( int int_ )+                   {-# LINE 1491 "src/Language/EWE/CheckGrammar.hs" #-}+                   )               -- "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" #-}+                   {-# LINE 1497 "src/Language/EWE/CheckGrammar.hs" #-}                    )-          in  ( _lhsOres)))+          in  ( _lhsOpp,_lhsOres))) sem_MRef_MRefId :: String ->                    T_MRef sem_MRef_MRefId string_ =     (\ _lhsIidMemRefDef ->-         (let _lhsOres :: ( Either String () )+         (let _lhsOpp :: Doc+              _lhsOres :: ( Either String () )+              -- "src-ag/Language/EWE/PPProg.ag"(line 35, column 12)+              _lhsOpp =+                  ({-# LINE 35 "src-ag/Language/EWE/PPProg.ag" #-}+                   text "M" <>+                   brackets (text string_)+                   {-# LINE 1511 "src/Language/EWE/CheckGrammar.hs" #-}+                   )               -- "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" #-}+                   {-# LINE 1517 "src/Language/EWE/CheckGrammar.hs" #-}                    )-          in  ( _lhsOres)))+          in  ( _lhsOpp,_lhsOres))) -- Prog -------------------------------------------------------- {-    visit 0:-      synthesized attribute:+      synthesized attributes:+         pp                   : Doc          res                  : Either String ()    alternatives:       alternative Prg:@@ -1188,62 +1533,71 @@ sem_Prog (Prg _stms _equates) =     (sem_Prog_Prg (sem_Stmts _stms) (sem_Equates _equates)) -- semantic domain-type T_Prog = ( (Either String ()))+type T_Prog = ( Doc,(Either String ())) data Inh_Prog = Inh_Prog {}-data Syn_Prog = Syn_Prog {res_Syn_Prog :: (Either String ())}+data Syn_Prog = Syn_Prog {pp_Syn_Prog :: Doc,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))+    (let ( _lhsOpp,_lhsOres) = sem+     in  (Syn_Prog _lhsOpp _lhsOres)) sem_Prog_Prg :: T_Stmts ->                 T_Equates ->                 T_Prog sem_Prog_Prg stms_ equates_ =-    (let _stmsOlabelDef :: (Set.Set String)+    (let _lhsOpp :: Doc+         _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)+         _stmsIpp :: Doc          _stmsIres :: (Either String ())          _equatesIidMemRef :: (Map.Map String Int)+         _equatesIpp :: Doc+         -- "src-ag/Language/EWE/PPProg.ag"(line 54, column 9)+         _lhsOpp =+             ({-# LINE 54 "src-ag/Language/EWE/PPProg.ag" #-}+              _stmsIpp $$ _equatesIpp+              {-# LINE 1565 "src/Language/EWE/CheckGrammar.hs" #-}+              )          -- "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" #-}+              {-# LINE 1571 "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" #-}+              {-# LINE 1577 "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" #-}+              {-# LINE 1583 "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" #-}+              {-# LINE 1589 "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" #-}+              {-# LINE 1595 "src/Language/EWE/CheckGrammar.hs" #-}               )-         ( _stmsIlabelDef,_stmsIres) =+         ( _stmsIlabelDef,_stmsIpp,_stmsIres) =              stms_ _stmsOidMemRefDef _stmsOlabelDef _stmsOlabelFound-         ( _equatesIidMemRef) =+         ( _equatesIidMemRef,_equatesIpp) =              equates_ _equatesOidMemRef-     in  ( _lhsOres))+     in  ( _lhsOpp,_lhsOres)) -- Stmt -------------------------------------------------------- {-    visit 0:@@ -1252,7 +1606,8 @@          labelFound           : Set.Set String       chained attribute:          labelDef             : Set.Set String-      synthesized attribute:+      synthesized attributes:+         pp                   : Doc          res                  : Either String ()    alternatives:       alternative Stmt:@@ -1270,15 +1625,15 @@ type T_Stmt = (Map.Map String Int) ->               (Set.Set String) ->               (Set.Set String) ->-              ( (Set.Set String),(Either String ()))+              ( (Set.Set String),Doc,(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 ())}+data Syn_Stmt = Syn_Stmt {labelDef_Syn_Stmt :: (Set.Set String),pp_Syn_Stmt :: Doc,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))+    (let ( _lhsOlabelDef,_lhsOpp,_lhsOres) = sem _lhsIidMemRefDef _lhsIlabelDef _lhsIlabelFound+     in  (Syn_Stmt _lhsOlabelDef _lhsOpp _lhsOres)) sem_Stmt_Stmt :: T_Labels ->                  T_Instr ->                  T_Stmt@@ -1286,15 +1641,24 @@     (\ _lhsIidMemRefDef        _lhsIlabelDef        _lhsIlabelFound ->-         (let _lhsOres :: (Either String ())+         (let _lhsOpp :: Doc+              _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 )+              _labelsIpp :: Doc               _labelsIres :: ( Either String () )+              _instrIpp :: Doc               _instrIres :: (Either String ())+              -- "src-ag/Language/EWE/PPProg.ag"(line 51, column 10)+              _lhsOpp =+                  ({-# LINE 51 "src-ag/Language/EWE/PPProg.ag" #-}+                   _labelsIpp $$ _instrIpp+                   {-# LINE 1661 "src/Language/EWE/CheckGrammar.hs" #-}+                   )               -- "src-ag/Language/EWE/CheckGrammar.ag"(line 65, column 10)               _res1 =                   ({-# LINE 65 "src-ag/Language/EWE/CheckGrammar.ag" #-}@@ -1307,43 +1671,43 @@                    in if e'                       then Left errs'                       else Right ()-                   {-# LINE 1311 "src/Language/EWE/CheckGrammar.hs" #-}+                   {-# LINE 1675 "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" #-}+                   {-# LINE 1681 "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" #-}+                   {-# LINE 1687 "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" #-}+                   {-# LINE 1693 "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" #-}+                   {-# LINE 1699 "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" #-}+                   {-# LINE 1705 "src/Language/EWE/CheckGrammar.hs" #-}                    )-              ( _labelsIcopy,_labelsIlabelDef,_labelsIres) =+              ( _labelsIcopy,_labelsIlabelDef,_labelsIpp,_labelsIres) =                   labels_ _labelsOlabelDef-              ( _instrIres) =+              ( _instrIpp,_instrIres) =                   instr_ _instrOidMemRefDef _instrOlabelFound-          in  ( _lhsOlabelDef,_lhsOres)))+          in  ( _lhsOlabelDef,_lhsOpp,_lhsOres))) -- Stmts ------------------------------------------------------- {-    visit 0:@@ -1352,7 +1716,8 @@          labelFound           : Set.Set String       chained attribute:          labelDef             : Set.Set String-      synthesized attribute:+      synthesized attributes:+         pp                   : Doc          res                  : Either String ()    alternatives:       alternative Cons:@@ -1369,15 +1734,15 @@ type T_Stmts = (Map.Map String Int) ->                (Set.Set String) ->                (Set.Set String) ->-               ( (Set.Set String),(Either String ()))+               ( (Set.Set String),Doc,(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 ())}+data Syn_Stmts = Syn_Stmts {labelDef_Syn_Stmts :: (Set.Set String),pp_Syn_Stmts :: Doc,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))+    (let ( _lhsOlabelDef,_lhsOpp,_lhsOres) = sem _lhsIidMemRefDef _lhsIlabelDef _lhsIlabelFound+     in  (Syn_Stmts _lhsOlabelDef _lhsOpp _lhsOres)) sem_Stmts_Cons :: T_Stmt ->                   T_Stmts ->                   T_Stmts@@ -1385,7 +1750,8 @@     (\ _lhsIidMemRefDef        _lhsIlabelDef        _lhsIlabelFound ->-         (let _lhsOres :: (Either String ())+         (let _lhsOpp :: Doc+              _lhsOres :: (Either String ())               _lhsOlabelDef :: (Set.Set String)               _hdOidMemRefDef :: (Map.Map String Int)               _hdOlabelDef :: (Set.Set String)@@ -1394,79 +1760,94 @@               _tlOlabelDef :: (Set.Set String)               _tlOlabelFound :: (Set.Set String)               _hdIlabelDef :: (Set.Set String)+              _hdIpp :: Doc               _hdIres :: (Either String ())               _tlIlabelDef :: (Set.Set String)+              _tlIpp :: Doc               _tlIres :: (Either String ())+              -- use rule "src-ag/Language/EWE/PPProg.ag"(line 25, column 10)+              _lhsOpp =+                  ({-# LINE 25 "src-ag/Language/EWE/PPProg.ag" #-}+                   (($$) _hdIpp _tlIpp)+                   {-# LINE 1773 "src/Language/EWE/CheckGrammar.hs" #-}+                   )               -- 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" #-}+                   {-# LINE 1779 "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" #-}+                   {-# LINE 1785 "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" #-}+                   {-# LINE 1791 "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" #-}+                   {-# LINE 1797 "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" #-}+                   {-# LINE 1803 "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" #-}+                   {-# LINE 1809 "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" #-}+                   {-# LINE 1815 "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" #-}+                   {-# LINE 1821 "src/Language/EWE/CheckGrammar.hs" #-}                    )-              ( _hdIlabelDef,_hdIres) =+              ( _hdIlabelDef,_hdIpp,_hdIres) =                   hd_ _hdOidMemRefDef _hdOlabelDef _hdOlabelFound-              ( _tlIlabelDef,_tlIres) =+              ( _tlIlabelDef,_tlIpp,_tlIres) =                   tl_ _tlOidMemRefDef _tlOlabelDef _tlOlabelFound-          in  ( _lhsOlabelDef,_lhsOres)))+          in  ( _lhsOlabelDef,_lhsOpp,_lhsOres))) sem_Stmts_Nil :: T_Stmts sem_Stmts_Nil =     (\ _lhsIidMemRefDef        _lhsIlabelDef        _lhsIlabelFound ->-         (let _lhsOres :: (Either String ())+         (let _lhsOpp :: Doc+              _lhsOres :: (Either String ())               _lhsOlabelDef :: (Set.Set String)+              -- use rule "src-ag/Language/EWE/PPProg.ag"(line 25, column 10)+              _lhsOpp =+                  ({-# LINE 25 "src-ag/Language/EWE/PPProg.ag" #-}+                   empty+                   {-# LINE 1840 "src/Language/EWE/CheckGrammar.hs" #-}+                   )               -- 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" #-}+                   {-# LINE 1846 "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" #-}+                   {-# LINE 1852 "src/Language/EWE/CheckGrammar.hs" #-}                    )-          in  ( _lhsOlabelDef,_lhsOres)))+          in  ( _lhsOlabelDef,_lhsOpp,_lhsOres)))
src/Language/EWE/Parser.y view
@@ -2,7 +2,7 @@ {-# OPTIONS -w #-} module Language.EWE.Parser(pEWE) where -import Language.EWE.Token(Tkns,Tkn(..))+import Language.EWE.Token(Tkns,Tkn(..), Tkn_(..)) import Language.EWE.Scanner import Language.EWE.AbsSyn }@@ -10,43 +10,42 @@ %name parse %tokentype { Tkn } %error     { parseError }-%monad { Alex } -%lexer { lexwrap } { TknEOF }+%monad { Alex }+%lexer { lexwrap } { Tkn _ TknEOF } -%token int        { TknInt $$ }-       str        { TknStr $$ }  ---       label      { TknLabel $$ }-       id         { TknId $$ }-       ':='       { TknAssgn }-       ':'        { TknColon }-       '('        { TknLPar  }-       ')'        { TknRPar  }-       '['        { TknLBrk  }-       ']'        { TknRBrk  }-       ','        { TknComma }-       '+'        { TknOper '+' }-       '-'        { TknOper '-' }-       '*'        { TknOper '*' }-       '/'        { TknOper '/' }-       '%'        { TknOper '%' }-       '<>'       { TknCond "<>" }-       '='        { TknCond "=" }-       '<'        { TknCond "<" }-       '<='       { TknCond "<=" }-       '>'        { TknCond ">" }-       '>='       { TknCond ">=" }-       'PC'       { TknResWrd "PC" }-       'M'        { TknResWrd "M" }-       'readInt'  { TknResWrd "readInt" }-       'writeInt' { TknResWrd "writeInt" }-       'readStr'  { TknResWrd "readStr" }-       'writeStr' { TknResWrd "writeStr" }-       'goto'     { TknResWrd "goto" }-       'if'        { TknResWrd "if" }-       'then'     { TknResWrd "then" }-       'halt'     { TknResWrd "halt" }-       'break'    { TknResWrd "break" }-       'equ'      { TknResWrd "equ" }+%token int        { Tkn _ (TknInt $$) }+       str        { Tkn _ (TknStr $$) }+       id         { Tkn _ (TknId $$) }+       ':='       { Tkn _ TknAssgn }+       ':'        { Tkn _ TknColon }+       '('        { Tkn _ TknLPar  }+       ')'        { Tkn _ TknRPar  }+       '['        { Tkn _ TknLBrk  }+       ']'        { Tkn _ TknRBrk  }+       ','        { Tkn _ TknComma }+       '+'        { Tkn _ (TknOper '+') }+       '-'        { Tkn _ (TknOper '-') }+       '*'        { Tkn _ (TknOper '*') }+       '/'        { Tkn _ (TknOper '/') }+       '%'        { Tkn _ (TknOper '%') }+       '<>'       { Tkn _ (TknCond "<>") }+       '='        { Tkn _ (TknCond "=") }+       '<'        { Tkn _ (TknCond "<") }+       '<='       { Tkn _ (TknCond "<=") }+       '>'        { Tkn _ (TknCond ">") }+       '>='       { Tkn _ (TknCond ">=") }+       'PC'       { Tkn _ (TknResWrd "PC") }+       'M'        { Tkn _ (TknResWrd "M") }+       'readInt'  { Tkn _ (TknResWrd "readInt") }+       'writeInt' { Tkn _ (TknResWrd "writeInt") }+       'readStr'  { Tkn _ (TknResWrd "readStr") }+       'writeStr' { Tkn _ (TknResWrd "writeStr") }+       'goto'     { Tkn _ (TknResWrd "goto") }+       'if'       { Tkn _ (TknResWrd "if") }+       'then'     { Tkn _ (TknResWrd "then") }+       'halt'     { Tkn _ (TknResWrd "halt") }+       'break'    { Tkn _ (TknResWrd "break") }+       'equ'      { Tkn _ (TknResWrd "equ") } %%  EweProg : Executable Equates { Prg $1 $2 }@@ -71,7 +70,7 @@       | 'M' '[' MemRef '+' int ']' ':=' MemRef    { IMMR $3 $5 $8 }       | 'readInt' '(' MemRef ')'                  { IRI $3 }       | 'writeInt' '(' MemRef ')'                 { IWI $3 }-      | 'readStr' '(' MemRef ',' MemRef ')'       { IRS $3 $5 }  +      | 'readStr' '(' MemRef ',' MemRef ')'       { IRS $3 $5 }       | 'writeStr' '(' MemRef ')'                 { IWS $3 }       | 'goto' int                                { IGI $2 }       | 'goto' id                                 { IGS $2 }@@ -111,4 +110,3 @@ pEWE :: String -> Either String Prog pEWE s = runAlex s parse }-
src/Language/EWE/Scanner.x view
@@ -8,7 +8,7 @@                             getPosn                            ) where -import Language.EWE.Token(Tkns,Tkn(..))+import Language.EWE.Token(Tkns,Tkn(..),Tkn_(..)) }  %wrapper "monad"@@ -49,10 +49,13 @@        "equ"                        { returnResWrd }        \" [^\"]* \"                 { returnStr }        (($nozerodigit $digit*)| 0)  { returnInt }---       $alpha [$alpha $digit]*\:    { returnLabel }-       $alpha [$alpha $digit]*       { returnId }+       $alpha [$alpha $digit]*      { returnId }  {+returnTkn :: Tkn_ -> AlexInput -> Int -> Alex Tkn+returnTkn tkn _ _ = do pos <- getPosn +                       return $ Tkn pos tkn+ returnEOL :: AlexInput -> Int -> Alex Tkn returnEOL = returnTkn $ TknEOL @@ -62,9 +65,6 @@ returnColon :: AlexInput -> Int -> Alex Tkn returnColon = returnTkn $ TknColon -returnTkn :: Tkn -> AlexInput -> Int -> Alex Tkn-returnTkn tkn _ _ = return $ tkn- returnLPar :: AlexInput -> Int -> Alex Tkn returnLPar = returnTkn $ TknLPar @@ -92,28 +92,27 @@ returnInt :: AlexInput -> Int -> Alex Tkn returnInt = returnFunction (TknInt . read) --- returnLabel :: AlexInput -> Int -> Alex Tkn--- returnLabel = returnFunction (TknLabel . init)- returnId :: AlexInput -> Int -> Alex Tkn returnId = returnFunction TknId  returnResWrd :: AlexInput -> Int -> Alex Tkn returnResWrd = returnFunction TknResWrd -returnFunction :: (String -> Tkn) -> AlexInput -> Int -> Alex Tkn-returnFunction f (_,_,_,s) i = return $ f (take i s)+returnFunction :: (String -> Tkn_) -> AlexInput -> Int -> Alex Tkn+returnFunction f (_,_,_,s) i = do pos <- getPosn+                                  return $ (Tkn pos (f (take i s)))  alexEOF :: Alex Tkn-alexEOF = return $ TknEOF+alexEOF = do pos <- getPosn+             return $ Tkn pos TknEOF  alexExec :: Alex Tkns alexExec = do    t <- alexMonadScan    case t of-     TknEOF -> return $ [t]-     _      -> do ts <- alexExec-                  return (t:ts)+     (Tkn pos TknEOF) -> return $ [t]+     _                -> do ts <- alexExec+                            return (t:ts)  getPosn :: Alex (Int,Int) getPosn = do
src/Language/EWE/Token.hs view
@@ -1,21 +1,24 @@-module Language.EWE.Token(Tkns,Tkn(..)) where+module Language.EWE.Token(Tkns,Tkn(..),Tkn_(..)) where  type Tkns = [Tkn] -data Tkn = TknInt   Int-         | TknStr   String---         | TknLabel String-         | TknId    String-         | TknAssgn-         | TknColon-         | TknComma-         | TknLPar-         | TknRPar-         | TknLBrk-         | TknRBrk-         | TknOper   Char-         | TknCond   String-         | TknResWrd String-         | TknEOL-         | TknEOF+type TknPos = (Int,Int)++data Tkn  = Tkn TknPos Tkn_ deriving (Show, Eq)++data Tkn_ = TknInt   Int+          | TknStr   String+          | TknId    String+          | TknAssgn+          | TknColon+          | TknComma+          | TknLPar+          | TknRPar+          | TknLBrk+          | TknRBrk+          | TknOper   Char+          | TknCond   String+          | TknResWrd String+          | TknEOL+          | TknEOF              deriving (Show, Eq)
+ src/Language/EWE/TokenUtils.hs view
@@ -0,0 +1,31 @@+module Language.EWE.TokenUtils(ppTokens) where++import Text.PrettyPrint+import Language.EWE.Token(Tkns,Tkn(..),Tkn_(..))++ppTokens :: Tkns -> String+ppTokens tkns = render $ ppTkns tkns++ppTkns :: Tkns -> Doc+ppTkns = vcat.(map ppTkn)++ppTkn :: Tkn -> Doc+ppTkn (Tkn pos tkn) = ppTkn_ tkn <+> ppPos pos+    where ppPos (l,c) = text "at" <+> text "line:" <+> int l <+>+                        text "col:" <+> int c++ppTkn_ :: Tkn_ -> Doc+ppTkn_ (TknInt i)  = text "Int:"        <+> int i+ppTkn_ (TknStr s)  = text "String:"     <+> text s+ppTkn_ (TknId  s)  = text "Id:"         <+> text s+ppTkn_ (TknAssgn)  = text "Operator:"   <+> text ":="+ppTkn_ (TknColon)  = text "Operator:"   <+> text ":"+ppTkn_ (TknLPar)   = text "Separator:"  <+> text "("+ppTkn_ (TknRPar)   = text "Separator:"  <+> text ")"+ppTkn_ (TknLBrk)   = text "Separator:"  <+> text "["+ppTkn_ (TknRBrk)   = text "Separator:"  <+> text "]"+ppTkn_ (TknOper c) = text "Operator:"   <+> char c+ppTkn_ (TknCond s) = text "Coditional:" <+> text s+ppTkn_ (TknResWrd s) = text "Reserved Word:" <+> text s+ppTkn_ (TknEOL)    = text "<EOL>"+ppTkn_ (TknEOF)    = text "<EOF>"
src/Language/EWE/VM.hs view
@@ -5,17 +5,22 @@ import Language.EWE.Utils(emptyProg, equates, stms) import qualified Data.List as L import qualified Data.Maybe as M+import qualified Data.Map.Strict as Map import Control.Monad.Trans.State.Lazy import Control.Monad.Trans.Class(lift) import Data.Char (ord,chr) import System.IO(hFlush, stdout,hPutStrLn,hPutStr) import System.Exit(exitWith,ExitCode(..)) -type Memory = [(Int,Int)]+-- type Memory = [(Int,Int)]+type Memory = Map.Map Int Int  emptyMemory :: Memory-emptyMemory = []+emptyMemory = Map.empty +-- emptyMemory :: Memory+-- emptyMemory = []+ type PC = Int  initPC :: PC@@ -51,11 +56,17 @@ mRef (MRefI i) _  = i mRef (MRefId s) m = M.fromMaybe (error $ "Internal error: memory reference " ++ s ++ " not found ") $ L.lookup s m +-- outMem :: Int -> Memory -> (Memory,Int)+-- outMem r m = M.maybe ((r,0):m, 0) ((,) m) (L.lookup r m)+ outMem :: Int -> Memory -> (Memory,Int)-outMem r m = M.maybe ((r,0):m, 0) (\i -> (m,i)) (L.lookup r m)+outMem r m = M.maybe (Map.insert r 0 m, 0) ((,) m) (Map.lookup r m) +-- inMem :: Int -> Int -> Memory -> Memory+-- inMem i v m = (i,v):m+ inMem :: Int -> Int -> Memory -> Memory-inMem i v m = (i,v):m+inMem = Map.insert  incrPC :: StateVM -> Int incrPC state = (pc state) + 1
src/Main.hs view
@@ -8,9 +8,11 @@ import Data.Version(Version(..), showVersion) import System.Exit(exitSuccess) import System.Console.GetOpt+import Text.PrettyPrint(Doc(..),render,empty) import Data.Maybe(fromMaybe) import Control.Monad(when) import Language.EWE.Token+import Language.EWE.TokenUtils import Language.EWE.Scanner import Language.EWE.Parser import Language.EWE.AbsSyn@@ -67,17 +69,17 @@ showScannerOutput scanout =    case scanout of       Left err   -> hPutStrLn stderr $ "Scanner error: " ++ show err-      Right tkns -> hPutStrLn stdout $ show tkns+      Right tkns -> hPutStrLn stdout $ ppTokens tkns -showParserOutput :: Either String Prog -> IO ()-showParserOutput parseout =-    case parseout of-       Left  msg  ->  hPutStrLn stderr $ show msg-       Right prog ->  hPutStrLn stdout $ show prog+showParserOutput :: (Bool,(String,Doc)) -> IO ()+showParserOutput (False,(msg,_))   =+ do hPutStrLn stderr $ show msg+showParserOutput (True,(_,doc))  =+ do hPutStrLn stdout $ render doc  showHelp :: IO () showHelp = do-  mapM_ (hPutStrLn stderr) (lines $ usageInfo header options) +  mapM_ (hPutStrLn stderr) (lines $ usageInfo header options)   exitSuccess   where header = "Usage: ewe [OPTION...] files..." @@ -96,10 +98,10 @@   s    <- hGetContents fh   let  scanout = runAlex s alexExec        pRes   = pEWE s-       errorParser           = either (\_ -> True)  (\_ -> False) pRes-       (passGrammar,errGram) = either (\_ -> (False,[])) checkGrammar  pRes+       errorParser                 = either (\_ -> True)  (\_ -> False) pRes+       ckg@(passGrammar,(errGram,doc)) = either (\_ -> (False,([],empty))) checkGrammar pRes   when (optScanOut opts)               (showScannerOutput scanout)-  when (optParserOut opts)             (showParserOutput pRes)+  when (optParserOut opts)             (showParserOutput ckg)   when (not passGrammar)               (showErrorGrammar errGram)   when (optNoExec opts && passGrammar) (execProg opts errorParser pRes)   hClose fh@@ -108,18 +110,18 @@ showErrorGrammar msg = do    hPutStrLn stderr $ show msg -checkGrammar :: Prog -> (Bool,String)+checkGrammar :: Prog -> (Bool,(String,Doc)) checkGrammar prog = let inh = Inh_Prog                         syn = wrap_Prog (sem_Prog prog) inh                     in case (res_Syn_Prog syn) of-                         Left msg -> (False, msg)-                         Right () -> (True, [])+                         Left msg -> (False, (msg, empty))+                         Right () -> (True, ([], pp_Syn_Prog syn))  processStaticOptions :: Options -> IO () processStaticOptions opts =   if optShowVersion opts   then do hPutStrLn stdout $ "ewe version: " ++ (showVersion version)-          exitSuccess          +          exitSuccess   else if optShowHelp opts        then showHelp        else return ()