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 +123/−120
- dist/build/ewe/ewe-tmp/Language/EWE/Scanner.hs +68/−98
- ewe.cabal +5/−3
- src-ag/Language/EWE/AbsSyn.ag +2/−2
- src-ag/Language/EWE/CheckGrammar.ag +1/−0
- src/Language/EWE/AbsSyn.hs +1/−1
- src/Language/EWE/CheckGrammar.hs +643/−262
- src/Language/EWE/Parser.y +37/−39
- src/Language/EWE/Scanner.x +14/−15
- src/Language/EWE/Token.hs +20/−17
- src/Language/EWE/TokenUtils.hs +31/−0
- src/Language/EWE/VM.hs +15/−4
- src/Main.hs +16/−14
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 ()