ewe-0.1.0.31: src/Language/EWE/CheckGrammar.hs
-- UUAGC 0.9.50 (src-ag/Language/EWE/CheckGrammar.ag)
module Language.EWE.CheckGrammar where
{-# LINE 2 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
import qualified Data.Set as Set
import qualified Data.Map as Map
import Language.EWE.AbsSyn
import Language.EWE.Utils
{-# LINE 12 "src/Language/EWE/CheckGrammar.hs" #-}
{-# LINE 109 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
isLabelDef :: String -> Set.Set String -> Either String ()
isLabelDef str sets
| str `Set.member` sets = Right ()
| otherwise = Left $ "Label: " ++ str ++ " is not defined "
isLabelNotDef :: String -> Set.Set String -> Either String ()
isLabelNotDef str sets
| str `Set.member` sets = Left $ "Label: " ++ str ++ " is already defined "
| otherwise = Right ()
isMemRefDef :: String -> Map.Map String Int -> Either String ()
isMemRefDef str map
| str `Map.member` map = Right ()
| otherwise = Left $ "Mem Ref: " ++ str ++ " is not defined"
{-# LINE 29 "src/Language/EWE/CheckGrammar.hs" #-}
-- Cond --------------------------------------------------------
{-
alternatives:
alternative CLET:
alternative CLT:
alternative CGET:
alternative CGT:
alternative CE:
alternative CNE:
-}
-- cata
sem_Cond :: Cond ->
T_Cond
sem_Cond (CLET) =
(sem_Cond_CLET)
sem_Cond (CLT) =
(sem_Cond_CLT)
sem_Cond (CGET) =
(sem_Cond_CGET)
sem_Cond (CGT) =
(sem_Cond_CGT)
sem_Cond (CE) =
(sem_Cond_CE)
sem_Cond (CNE) =
(sem_Cond_CNE)
-- semantic domain
type T_Cond = ( )
data Inh_Cond = Inh_Cond {}
data Syn_Cond = Syn_Cond {}
wrap_Cond :: T_Cond ->
Inh_Cond ->
Syn_Cond
wrap_Cond sem (Inh_Cond) =
(let ( ) = sem
in (Syn_Cond))
sem_Cond_CLET :: T_Cond
sem_Cond_CLET =
(let
in ( ))
sem_Cond_CLT :: T_Cond
sem_Cond_CLT =
(let
in ( ))
sem_Cond_CGET :: T_Cond
sem_Cond_CGET =
(let
in ( ))
sem_Cond_CGT :: T_Cond
sem_Cond_CGT =
(let
in ( ))
sem_Cond_CE :: T_Cond
sem_Cond_CE =
(let
in ( ))
sem_Cond_CNE :: T_Cond
sem_Cond_CNE =
(let
in ( ))
-- Equ ---------------------------------------------------------
{-
visit 0:
chained attribute:
idMemRef : Map.Map String Int
synthesized attribute:
res : Either String ()
alternatives:
alternative Tuple:
child x1 : {String}
child x2 : {Int}
-}
-- cata
sem_Equ :: Equ ->
T_Equ
sem_Equ ( x1,x2) =
(sem_Equ_Tuple x1 x2)
-- semantic domain
type T_Equ = (Map.Map String Int) ->
( (Map.Map String Int),(Either String ()))
data Inh_Equ = Inh_Equ {idMemRef_Inh_Equ :: (Map.Map String Int)}
data Syn_Equ = Syn_Equ {idMemRef_Syn_Equ :: (Map.Map String Int),res_Syn_Equ :: (Either String ())}
wrap_Equ :: T_Equ ->
Inh_Equ ->
Syn_Equ
wrap_Equ sem (Inh_Equ _lhsIidMemRef) =
(let ( _lhsOidMemRef,_lhsOres) = sem _lhsIidMemRef
in (Syn_Equ _lhsOidMemRef _lhsOres))
sem_Equ_Tuple :: String ->
Int ->
T_Equ
sem_Equ_Tuple x1_ x2_ =
(\ _lhsIidMemRef ->
(let _lhsOres :: (Either String ())
_lhsOidMemRef :: (Map.Map String Int)
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 46, column 11)
_lhsOres =
({-# LINE 46 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
if x1_ `Map.member` _lhsIidMemRef
then Left $ x1_ ++ " was already defined "
else Right ()
{-# LINE 130 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 46, column 11)
_lhsOidMemRef =
({-# LINE 50 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
Map.insert x1_ x2_ _lhsIidMemRef
{-# LINE 136 "src/Language/EWE/CheckGrammar.hs" #-}
)
in ( _lhsOidMemRef,_lhsOres)))
-- Equates -----------------------------------------------------
{-
visit 0:
chained attribute:
idMemRef : Map.Map String Int
alternatives:
alternative Cons:
child hd : Equ
child tl : Equates
alternative Nil:
-}
-- cata
sem_Equates :: Equates ->
T_Equates
sem_Equates list =
(Prelude.foldr sem_Equates_Cons sem_Equates_Nil (Prelude.map sem_Equ list))
-- semantic domain
type T_Equates = (Map.Map String Int) ->
( (Map.Map String Int))
data Inh_Equates = Inh_Equates {idMemRef_Inh_Equates :: (Map.Map String Int)}
data Syn_Equates = Syn_Equates {idMemRef_Syn_Equates :: (Map.Map String Int)}
wrap_Equates :: T_Equates ->
Inh_Equates ->
Syn_Equates
wrap_Equates sem (Inh_Equates _lhsIidMemRef) =
(let ( _lhsOidMemRef) = sem _lhsIidMemRef
in (Syn_Equates _lhsOidMemRef))
sem_Equates_Cons :: T_Equ ->
T_Equates ->
T_Equates
sem_Equates_Cons hd_ tl_ =
(\ _lhsIidMemRef ->
(let _lhsOidMemRef :: (Map.Map String Int)
_hdOidMemRef :: (Map.Map String Int)
_tlOidMemRef :: (Map.Map String Int)
_hdIidMemRef :: (Map.Map String Int)
_hdIres :: (Either String ())
_tlIidMemRef :: (Map.Map String Int)
-- copy rule (up)
_lhsOidMemRef =
({-# LINE 13 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_tlIidMemRef
{-# LINE 181 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_hdOidMemRef =
({-# LINE 16 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRef
{-# LINE 187 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (chain)
_tlOidMemRef =
({-# LINE 13 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_hdIidMemRef
{-# LINE 193 "src/Language/EWE/CheckGrammar.hs" #-}
)
( _hdIidMemRef,_hdIres) =
hd_ _hdOidMemRef
( _tlIidMemRef) =
tl_ _tlOidMemRef
in ( _lhsOidMemRef)))
sem_Equates_Nil :: T_Equates
sem_Equates_Nil =
(\ _lhsIidMemRef ->
(let _lhsOidMemRef :: (Map.Map String Int)
-- copy rule (chain)
_lhsOidMemRef =
({-# LINE 13 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRef
{-# LINE 208 "src/Language/EWE/CheckGrammar.hs" #-}
)
in ( _lhsOidMemRef)))
-- Instr -------------------------------------------------------
{-
visit 0:
inherited attributes:
idMemRefDef : Map.Map String Int
labelFound : Set.Set String
synthesized attribute:
res : Either String ()
alternatives:
alternative IMMI:
child dest : MRef
child int : {Int}
alternative IMMS:
child dest : MRef
child string : {String}
alternative IMRPC:
child dest : MRef
child int : {Int}
alternative SPC:
child oper : MRef
alternative IMMM:
child dest : MRef
child oper : MRef
alternative IAdd:
child dest : MRef
child left : MRef
child right : MRef
alternative ISub:
child dest : MRef
child left : MRef
child right : MRef
alternative IMul:
child dest : MRef
child left : MRef
child right : MRef
alternative IDiv:
child dest : MRef
child left : MRef
child right : MRef
alternative IMod:
child dest : MRef
child left : MRef
child right : MRef
alternative IMRI:
child dest : MRef
child oper : MRef
child int : {Int}
alternative IMMR:
child dest : MRef
child int : {Int}
child oper : MRef
alternative IRI:
child oper : MRef
alternative IWI:
child oper : MRef
alternative IRS:
child left : MRef
child right : MRef
alternative IWS:
child oper : MRef
alternative IGI:
child int : {Int}
alternative IGS:
child string : {String}
alternative IFI:
child bcond : MRef
child cond : Cond
child then : MRef
child int : {Int}
alternative IFS:
child bcond : MRef
child cond : Cond
child then : MRef
child string : {String}
alternative IH:
alternative IB:
alternative INI:
-}
-- cata
sem_Instr :: Instr ->
T_Instr
sem_Instr (IMMI _dest _int) =
(sem_Instr_IMMI (sem_MRef _dest) _int)
sem_Instr (IMMS _dest _string) =
(sem_Instr_IMMS (sem_MRef _dest) _string)
sem_Instr (IMRPC _dest _int) =
(sem_Instr_IMRPC (sem_MRef _dest) _int)
sem_Instr (SPC _oper) =
(sem_Instr_SPC (sem_MRef _oper))
sem_Instr (IMMM _dest _oper) =
(sem_Instr_IMMM (sem_MRef _dest) (sem_MRef _oper))
sem_Instr (IAdd _dest _left _right) =
(sem_Instr_IAdd (sem_MRef _dest) (sem_MRef _left) (sem_MRef _right))
sem_Instr (ISub _dest _left _right) =
(sem_Instr_ISub (sem_MRef _dest) (sem_MRef _left) (sem_MRef _right))
sem_Instr (IMul _dest _left _right) =
(sem_Instr_IMul (sem_MRef _dest) (sem_MRef _left) (sem_MRef _right))
sem_Instr (IDiv _dest _left _right) =
(sem_Instr_IDiv (sem_MRef _dest) (sem_MRef _left) (sem_MRef _right))
sem_Instr (IMod _dest _left _right) =
(sem_Instr_IMod (sem_MRef _dest) (sem_MRef _left) (sem_MRef _right))
sem_Instr (IMRI _dest _oper _int) =
(sem_Instr_IMRI (sem_MRef _dest) (sem_MRef _oper) _int)
sem_Instr (IMMR _dest _int _oper) =
(sem_Instr_IMMR (sem_MRef _dest) _int (sem_MRef _oper))
sem_Instr (IRI _oper) =
(sem_Instr_IRI (sem_MRef _oper))
sem_Instr (IWI _oper) =
(sem_Instr_IWI (sem_MRef _oper))
sem_Instr (IRS _left _right) =
(sem_Instr_IRS (sem_MRef _left) (sem_MRef _right))
sem_Instr (IWS _oper) =
(sem_Instr_IWS (sem_MRef _oper))
sem_Instr (IGI _int) =
(sem_Instr_IGI _int)
sem_Instr (IGS _string) =
(sem_Instr_IGS _string)
sem_Instr (IFI _bcond _cond _then _int) =
(sem_Instr_IFI (sem_MRef _bcond) (sem_Cond _cond) (sem_MRef _then) _int)
sem_Instr (IFS _bcond _cond _then _string) =
(sem_Instr_IFS (sem_MRef _bcond) (sem_Cond _cond) (sem_MRef _then) _string)
sem_Instr (IH) =
(sem_Instr_IH)
sem_Instr (IB) =
(sem_Instr_IB)
sem_Instr (INI) =
(sem_Instr_INI)
-- semantic domain
type T_Instr = (Map.Map String Int) ->
(Set.Set String) ->
( (Either String ()))
data Inh_Instr = Inh_Instr {idMemRefDef_Inh_Instr :: (Map.Map String Int),labelFound_Inh_Instr :: (Set.Set String)}
data Syn_Instr = Syn_Instr {res_Syn_Instr :: (Either String ())}
wrap_Instr :: T_Instr ->
Inh_Instr ->
Syn_Instr
wrap_Instr sem (Inh_Instr _lhsIidMemRefDef _lhsIlabelFound) =
(let ( _lhsOres) = sem _lhsIidMemRefDef _lhsIlabelFound
in (Syn_Instr _lhsOres))
sem_Instr_IMMI :: T_MRef ->
Int ->
T_Instr
sem_Instr_IMMI dest_ int_ =
(\ _lhsIidMemRefDef
_lhsIlabelFound ->
(let _lhsOres :: (Either String ())
_destOidMemRefDef :: ( Map.Map String Int )
_destIres :: ( Either String () )
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 83, column 11)
_lhsOres =
({-# LINE 83 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_destIres
{-# LINE 363 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_destOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 369 "src/Language/EWE/CheckGrammar.hs" #-}
)
( _destIres) =
dest_ _destOidMemRefDef
in ( _lhsOres)))
sem_Instr_IMMS :: T_MRef ->
String ->
T_Instr
sem_Instr_IMMS dest_ string_ =
(\ _lhsIidMemRefDef
_lhsIlabelFound ->
(let _lhsOres :: (Either String ())
_destOidMemRefDef :: ( Map.Map String Int )
_destIres :: ( Either String () )
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 84, column 11)
_lhsOres =
({-# LINE 84 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_destIres
{-# LINE 387 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_destOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 393 "src/Language/EWE/CheckGrammar.hs" #-}
)
( _destIres) =
dest_ _destOidMemRefDef
in ( _lhsOres)))
sem_Instr_IMRPC :: T_MRef ->
Int ->
T_Instr
sem_Instr_IMRPC dest_ int_ =
(\ _lhsIidMemRefDef
_lhsIlabelFound ->
(let _lhsOres :: (Either String ())
_destOidMemRefDef :: ( Map.Map String Int )
_destIres :: ( Either String () )
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 85, column 11)
_lhsOres =
({-# LINE 85 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_destIres
{-# LINE 411 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_destOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 417 "src/Language/EWE/CheckGrammar.hs" #-}
)
( _destIres) =
dest_ _destOidMemRefDef
in ( _lhsOres)))
sem_Instr_SPC :: T_MRef ->
T_Instr
sem_Instr_SPC oper_ =
(\ _lhsIidMemRefDef
_lhsIlabelFound ->
(let _lhsOres :: (Either String ())
_operOidMemRefDef :: ( Map.Map String Int )
_operIres :: ( Either String () )
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 86, column 11)
_lhsOres =
({-# LINE 86 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_operIres
{-# LINE 434 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_operOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 440 "src/Language/EWE/CheckGrammar.hs" #-}
)
( _operIres) =
oper_ _operOidMemRefDef
in ( _lhsOres)))
sem_Instr_IMMM :: T_MRef ->
T_MRef ->
T_Instr
sem_Instr_IMMM dest_ oper_ =
(\ _lhsIidMemRefDef
_lhsIlabelFound ->
(let _lhsOres :: (Either String ())
_destOidMemRefDef :: ( Map.Map String Int )
_operOidMemRefDef :: ( Map.Map String Int )
_destIres :: ( Either String () )
_operIres :: ( Either String () )
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 87, column 11)
_lhsOres =
({-# LINE 87 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_destIres <--> _operIres
{-# LINE 460 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_destOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 466 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_operOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 472 "src/Language/EWE/CheckGrammar.hs" #-}
)
( _destIres) =
dest_ _destOidMemRefDef
( _operIres) =
oper_ _operOidMemRefDef
in ( _lhsOres)))
sem_Instr_IAdd :: T_MRef ->
T_MRef ->
T_MRef ->
T_Instr
sem_Instr_IAdd dest_ left_ right_ =
(\ _lhsIidMemRefDef
_lhsIlabelFound ->
(let _lhsOres :: (Either String ())
_destOidMemRefDef :: ( Map.Map String Int )
_leftOidMemRefDef :: ( Map.Map String Int )
_rightOidMemRefDef :: ( Map.Map String Int )
_destIres :: ( Either String () )
_leftIres :: ( Either String () )
_rightIres :: ( Either String () )
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 88, column 11)
_lhsOres =
({-# LINE 88 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_destIres <--> _leftIres <--> _rightIres
{-# LINE 497 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_destOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 503 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_leftOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 509 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_rightOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 515 "src/Language/EWE/CheckGrammar.hs" #-}
)
( _destIres) =
dest_ _destOidMemRefDef
( _leftIres) =
left_ _leftOidMemRefDef
( _rightIres) =
right_ _rightOidMemRefDef
in ( _lhsOres)))
sem_Instr_ISub :: T_MRef ->
T_MRef ->
T_MRef ->
T_Instr
sem_Instr_ISub dest_ left_ right_ =
(\ _lhsIidMemRefDef
_lhsIlabelFound ->
(let _lhsOres :: (Either String ())
_destOidMemRefDef :: ( Map.Map String Int )
_leftOidMemRefDef :: ( Map.Map String Int )
_rightOidMemRefDef :: ( Map.Map String Int )
_destIres :: ( Either String () )
_leftIres :: ( Either String () )
_rightIres :: ( Either String () )
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 89, column 11)
_lhsOres =
({-# LINE 89 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_destIres <--> _leftIres <--> _rightIres
{-# LINE 542 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_destOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 548 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_leftOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 554 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_rightOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 560 "src/Language/EWE/CheckGrammar.hs" #-}
)
( _destIres) =
dest_ _destOidMemRefDef
( _leftIres) =
left_ _leftOidMemRefDef
( _rightIres) =
right_ _rightOidMemRefDef
in ( _lhsOres)))
sem_Instr_IMul :: T_MRef ->
T_MRef ->
T_MRef ->
T_Instr
sem_Instr_IMul dest_ left_ right_ =
(\ _lhsIidMemRefDef
_lhsIlabelFound ->
(let _lhsOres :: (Either String ())
_destOidMemRefDef :: ( Map.Map String Int )
_leftOidMemRefDef :: ( Map.Map String Int )
_rightOidMemRefDef :: ( Map.Map String Int )
_destIres :: ( Either String () )
_leftIres :: ( Either String () )
_rightIres :: ( Either String () )
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 90, column 11)
_lhsOres =
({-# LINE 90 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_destIres <--> _leftIres <--> _rightIres
{-# LINE 587 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_destOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 593 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_leftOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 599 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_rightOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 605 "src/Language/EWE/CheckGrammar.hs" #-}
)
( _destIres) =
dest_ _destOidMemRefDef
( _leftIres) =
left_ _leftOidMemRefDef
( _rightIres) =
right_ _rightOidMemRefDef
in ( _lhsOres)))
sem_Instr_IDiv :: T_MRef ->
T_MRef ->
T_MRef ->
T_Instr
sem_Instr_IDiv dest_ left_ right_ =
(\ _lhsIidMemRefDef
_lhsIlabelFound ->
(let _lhsOres :: (Either String ())
_destOidMemRefDef :: ( Map.Map String Int )
_leftOidMemRefDef :: ( Map.Map String Int )
_rightOidMemRefDef :: ( Map.Map String Int )
_destIres :: ( Either String () )
_leftIres :: ( Either String () )
_rightIres :: ( Either String () )
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 91, column 11)
_lhsOres =
({-# LINE 91 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_destIres <--> _leftIres <--> _rightIres
{-# LINE 632 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_destOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 638 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_leftOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 644 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_rightOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 650 "src/Language/EWE/CheckGrammar.hs" #-}
)
( _destIres) =
dest_ _destOidMemRefDef
( _leftIres) =
left_ _leftOidMemRefDef
( _rightIres) =
right_ _rightOidMemRefDef
in ( _lhsOres)))
sem_Instr_IMod :: T_MRef ->
T_MRef ->
T_MRef ->
T_Instr
sem_Instr_IMod dest_ left_ right_ =
(\ _lhsIidMemRefDef
_lhsIlabelFound ->
(let _lhsOres :: (Either String ())
_destOidMemRefDef :: ( Map.Map String Int )
_leftOidMemRefDef :: ( Map.Map String Int )
_rightOidMemRefDef :: ( Map.Map String Int )
_destIres :: ( Either String () )
_leftIres :: ( Either String () )
_rightIres :: ( Either String () )
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 92, column 11)
_lhsOres =
({-# LINE 92 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_destIres <--> _leftIres <--> _rightIres
{-# LINE 677 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_destOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 683 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_leftOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 689 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_rightOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 695 "src/Language/EWE/CheckGrammar.hs" #-}
)
( _destIres) =
dest_ _destOidMemRefDef
( _leftIres) =
left_ _leftOidMemRefDef
( _rightIres) =
right_ _rightOidMemRefDef
in ( _lhsOres)))
sem_Instr_IMRI :: T_MRef ->
T_MRef ->
Int ->
T_Instr
sem_Instr_IMRI dest_ oper_ int_ =
(\ _lhsIidMemRefDef
_lhsIlabelFound ->
(let _lhsOres :: (Either String ())
_destOidMemRefDef :: ( Map.Map String Int )
_operOidMemRefDef :: ( Map.Map String Int )
_destIres :: ( Either String () )
_operIres :: ( Either String () )
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 93, column 11)
_lhsOres =
({-# LINE 93 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_destIres <--> _operIres
{-# LINE 720 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_destOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 726 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_operOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 732 "src/Language/EWE/CheckGrammar.hs" #-}
)
( _destIres) =
dest_ _destOidMemRefDef
( _operIres) =
oper_ _operOidMemRefDef
in ( _lhsOres)))
sem_Instr_IMMR :: T_MRef ->
Int ->
T_MRef ->
T_Instr
sem_Instr_IMMR dest_ int_ oper_ =
(\ _lhsIidMemRefDef
_lhsIlabelFound ->
(let _lhsOres :: (Either String ())
_destOidMemRefDef :: ( Map.Map String Int )
_operOidMemRefDef :: ( Map.Map String Int )
_destIres :: ( Either String () )
_operIres :: ( Either String () )
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 94, column 11)
_lhsOres =
({-# LINE 94 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_destIres <--> _operIres
{-# LINE 755 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_destOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 761 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_operOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 767 "src/Language/EWE/CheckGrammar.hs" #-}
)
( _destIres) =
dest_ _destOidMemRefDef
( _operIres) =
oper_ _operOidMemRefDef
in ( _lhsOres)))
sem_Instr_IRI :: T_MRef ->
T_Instr
sem_Instr_IRI oper_ =
(\ _lhsIidMemRefDef
_lhsIlabelFound ->
(let _lhsOres :: (Either String ())
_operOidMemRefDef :: ( Map.Map String Int )
_operIres :: ( Either String () )
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 95, column 11)
_lhsOres =
({-# LINE 95 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_operIres
{-# LINE 786 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_operOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 792 "src/Language/EWE/CheckGrammar.hs" #-}
)
( _operIres) =
oper_ _operOidMemRefDef
in ( _lhsOres)))
sem_Instr_IWI :: T_MRef ->
T_Instr
sem_Instr_IWI oper_ =
(\ _lhsIidMemRefDef
_lhsIlabelFound ->
(let _lhsOres :: (Either String ())
_operOidMemRefDef :: ( Map.Map String Int )
_operIres :: ( Either String () )
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 96, column 11)
_lhsOres =
({-# LINE 96 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_operIres
{-# LINE 809 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_operOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 815 "src/Language/EWE/CheckGrammar.hs" #-}
)
( _operIres) =
oper_ _operOidMemRefDef
in ( _lhsOres)))
sem_Instr_IRS :: T_MRef ->
T_MRef ->
T_Instr
sem_Instr_IRS left_ right_ =
(\ _lhsIidMemRefDef
_lhsIlabelFound ->
(let _lhsOres :: (Either String ())
_leftOidMemRefDef :: ( Map.Map String Int )
_rightOidMemRefDef :: ( Map.Map String Int )
_leftIres :: ( Either String () )
_rightIres :: ( Either String () )
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 97, column 11)
_lhsOres =
({-# LINE 97 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_leftIres <--> _rightIres
{-# LINE 835 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_leftOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 841 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_rightOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 847 "src/Language/EWE/CheckGrammar.hs" #-}
)
( _leftIres) =
left_ _leftOidMemRefDef
( _rightIres) =
right_ _rightOidMemRefDef
in ( _lhsOres)))
sem_Instr_IWS :: T_MRef ->
T_Instr
sem_Instr_IWS oper_ =
(\ _lhsIidMemRefDef
_lhsIlabelFound ->
(let _lhsOres :: (Either String ())
_operOidMemRefDef :: ( Map.Map String Int )
_operIres :: ( Either String () )
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 98, column 11)
_lhsOres =
({-# LINE 98 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_operIres
{-# LINE 866 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_operOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 872 "src/Language/EWE/CheckGrammar.hs" #-}
)
( _operIres) =
oper_ _operOidMemRefDef
in ( _lhsOres)))
sem_Instr_IGI :: Int ->
T_Instr
sem_Instr_IGI int_ =
(\ _lhsIidMemRefDef
_lhsIlabelFound ->
(let _lhsOres :: (Either String ())
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 99, column 11)
_lhsOres =
({-# LINE 99 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
Right ()
{-# LINE 887 "src/Language/EWE/CheckGrammar.hs" #-}
)
in ( _lhsOres)))
sem_Instr_IGS :: String ->
T_Instr
sem_Instr_IGS string_ =
(\ _lhsIidMemRefDef
_lhsIlabelFound ->
(let _lhsOres :: (Either String ())
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 100, column 11)
_lhsOres =
({-# LINE 100 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
isLabelDef string_ _lhsIlabelFound
{-# LINE 900 "src/Language/EWE/CheckGrammar.hs" #-}
)
in ( _lhsOres)))
sem_Instr_IFI :: T_MRef ->
T_Cond ->
T_MRef ->
Int ->
T_Instr
sem_Instr_IFI bcond_ cond_ then_ int_ =
(\ _lhsIidMemRefDef
_lhsIlabelFound ->
(let _lhsOres :: (Either String ())
_bcondOidMemRefDef :: ( Map.Map String Int )
_thenOidMemRefDef :: ( Map.Map String Int )
_bcondIres :: ( Either String () )
_thenIres :: ( Either String () )
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 101, column 11)
_lhsOres =
({-# LINE 101 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_bcondIres <--> _thenIres
{-# LINE 920 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_bcondOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 926 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_thenOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 932 "src/Language/EWE/CheckGrammar.hs" #-}
)
( _bcondIres) =
bcond_ _bcondOidMemRefDef
( _thenIres) =
then_ _thenOidMemRefDef
in ( _lhsOres)))
sem_Instr_IFS :: T_MRef ->
T_Cond ->
T_MRef ->
String ->
T_Instr
sem_Instr_IFS bcond_ cond_ then_ string_ =
(\ _lhsIidMemRefDef
_lhsIlabelFound ->
(let _lhsOres :: (Either String ())
_bcondOidMemRefDef :: ( Map.Map String Int )
_thenOidMemRefDef :: ( Map.Map String Int )
_bcondIres :: ( Either String () )
_thenIres :: ( Either String () )
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 102, column 11)
_lhsOres =
({-# LINE 102 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
isLabelDef string_ _lhsIlabelFound <--> _bcondIres <--> _thenIres
{-# LINE 956 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_bcondOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 962 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_thenOidMemRefDef =
({-# LINE 42 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 968 "src/Language/EWE/CheckGrammar.hs" #-}
)
( _bcondIres) =
bcond_ _bcondOidMemRefDef
( _thenIres) =
then_ _thenOidMemRefDef
in ( _lhsOres)))
sem_Instr_IH :: T_Instr
sem_Instr_IH =
(\ _lhsIidMemRefDef
_lhsIlabelFound ->
(let _lhsOres :: (Either String ())
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 103, column 11)
_lhsOres =
({-# LINE 103 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
Right ()
{-# LINE 984 "src/Language/EWE/CheckGrammar.hs" #-}
)
in ( _lhsOres)))
sem_Instr_IB :: T_Instr
sem_Instr_IB =
(\ _lhsIidMemRefDef
_lhsIlabelFound ->
(let _lhsOres :: (Either String ())
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 104, column 11)
_lhsOres =
({-# LINE 104 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
Right ()
{-# LINE 996 "src/Language/EWE/CheckGrammar.hs" #-}
)
in ( _lhsOres)))
sem_Instr_INI :: T_Instr
sem_Instr_INI =
(\ _lhsIidMemRefDef
_lhsIlabelFound ->
(let _lhsOres :: (Either String ())
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 105, column 11)
_lhsOres =
({-# LINE 105 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
Right ()
{-# LINE 1008 "src/Language/EWE/CheckGrammar.hs" #-}
)
in ( _lhsOres)))
-- Labels ------------------------------------------------------
{-
visit 0:
chained attribute:
labelDef : Set.Set String
synthesized attributes:
copy : Labels
res : Either String ()
alternatives:
alternative Cons:
child hd : {String}
child tl : Labels
visit 0:
local copy : _
alternative Nil:
visit 0:
local copy : _
-}
-- cata
sem_Labels :: Labels ->
T_Labels
sem_Labels list =
(Prelude.foldr sem_Labels_Cons sem_Labels_Nil list)
-- semantic domain
type T_Labels = ( Set.Set String ) ->
( Labels,( Set.Set String ),( Either String () ))
data Inh_Labels = Inh_Labels {labelDef_Inh_Labels :: ( Set.Set String )}
data Syn_Labels = Syn_Labels {copy_Syn_Labels :: Labels,labelDef_Syn_Labels :: ( Set.Set String ),res_Syn_Labels :: ( Either String () )}
wrap_Labels :: T_Labels ->
Inh_Labels ->
Syn_Labels
wrap_Labels sem (Inh_Labels _lhsIlabelDef) =
(let ( _lhsOcopy,_lhsOlabelDef,_lhsOres) = sem _lhsIlabelDef
in (Syn_Labels _lhsOcopy _lhsOlabelDef _lhsOres))
sem_Labels_Cons :: String ->
T_Labels ->
T_Labels
sem_Labels_Cons hd_ tl_ =
(\ _lhsIlabelDef ->
(let _lhsOres :: ( Either String () )
_lhsOlabelDef :: ( Set.Set String )
_lhsOcopy :: Labels
_tlOlabelDef :: ( Set.Set String )
_tlIcopy :: Labels
_tlIlabelDef :: ( Set.Set String )
_tlIres :: ( Either String () )
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 53, column 11)
_lhsOres =
({-# LINE 53 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
isLabelNotDef hd_ _tlIlabelDef
{-# LINE 1061 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 53, column 11)
_lhsOlabelDef =
({-# LINE 54 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
Set.insert hd_ _tlIlabelDef
{-# LINE 1067 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- self rule
_copy =
({-# LINE 39 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
(:) hd_ _tlIcopy
{-# LINE 1073 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- self rule
_lhsOcopy =
({-# LINE 39 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_copy
{-# LINE 1079 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_tlOlabelDef =
({-# LINE 38 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIlabelDef
{-# LINE 1085 "src/Language/EWE/CheckGrammar.hs" #-}
)
( _tlIcopy,_tlIlabelDef,_tlIres) =
tl_ _tlOlabelDef
in ( _lhsOcopy,_lhsOlabelDef,_lhsOres)))
sem_Labels_Nil :: T_Labels
sem_Labels_Nil =
(\ _lhsIlabelDef ->
(let _lhsOres :: ( Either String () )
_lhsOlabelDef :: ( Set.Set String )
_lhsOcopy :: Labels
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 55, column 11)
_lhsOres =
({-# LINE 55 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
Right ()
{-# LINE 1100 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 55, column 11)
_lhsOlabelDef =
({-# LINE 56 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIlabelDef
{-# LINE 1106 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- self rule
_copy =
({-# LINE 39 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
[]
{-# LINE 1112 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- self rule
_lhsOcopy =
({-# LINE 39 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_copy
{-# LINE 1118 "src/Language/EWE/CheckGrammar.hs" #-}
)
in ( _lhsOcopy,_lhsOlabelDef,_lhsOres)))
-- MRef --------------------------------------------------------
{-
visit 0:
inherited attribute:
idMemRefDef : Map.Map String Int
synthesized attribute:
res : Either String ()
alternatives:
alternative MRefI:
child int : {Int}
alternative MRefId:
child string : {String}
-}
-- cata
sem_MRef :: MRef ->
T_MRef
sem_MRef (MRefI _int) =
(sem_MRef_MRefI _int)
sem_MRef (MRefId _string) =
(sem_MRef_MRefId _string)
-- semantic domain
type T_MRef = ( Map.Map String Int ) ->
( ( Either String () ))
data Inh_MRef = Inh_MRef {idMemRefDef_Inh_MRef :: ( Map.Map String Int )}
data Syn_MRef = Syn_MRef {res_Syn_MRef :: ( Either String () )}
wrap_MRef :: T_MRef ->
Inh_MRef ->
Syn_MRef
wrap_MRef sem (Inh_MRef _lhsIidMemRefDef) =
(let ( _lhsOres) = sem _lhsIidMemRefDef
in (Syn_MRef _lhsOres))
sem_MRef_MRefI :: Int ->
T_MRef
sem_MRef_MRefI int_ =
(\ _lhsIidMemRefDef ->
(let _lhsOres :: ( Either String () )
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 79, column 12)
_lhsOres =
({-# LINE 79 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
Right ()
{-# LINE 1161 "src/Language/EWE/CheckGrammar.hs" #-}
)
in ( _lhsOres)))
sem_MRef_MRefId :: String ->
T_MRef
sem_MRef_MRefId string_ =
(\ _lhsIidMemRefDef ->
(let _lhsOres :: ( Either String () )
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 80, column 12)
_lhsOres =
({-# LINE 80 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
isMemRefDef string_ _lhsIidMemRefDef
{-# LINE 1173 "src/Language/EWE/CheckGrammar.hs" #-}
)
in ( _lhsOres)))
-- Prog --------------------------------------------------------
{-
visit 0:
synthesized attribute:
res : Either String ()
alternatives:
alternative Prg:
child stms : Stmts
child equates : Equates
-}
-- cata
sem_Prog :: Prog ->
T_Prog
sem_Prog (Prg _stms _equates) =
(sem_Prog_Prg (sem_Stmts _stms) (sem_Equates _equates))
-- semantic domain
type T_Prog = ( (Either String ()))
data Inh_Prog = Inh_Prog {}
data Syn_Prog = Syn_Prog {res_Syn_Prog :: (Either String ())}
wrap_Prog :: T_Prog ->
Inh_Prog ->
Syn_Prog
wrap_Prog sem (Inh_Prog) =
(let ( _lhsOres) = sem
in (Syn_Prog _lhsOres))
sem_Prog_Prg :: T_Stmts ->
T_Equates ->
T_Prog
sem_Prog_Prg stms_ equates_ =
(let _stmsOlabelDef :: (Set.Set String)
_stmsOlabelFound :: (Set.Set String)
_stmsOidMemRefDef :: (Map.Map String Int)
_equatesOidMemRef :: (Map.Map String Int)
_lhsOres :: (Either String ())
_stmsIlabelDef :: (Set.Set String)
_stmsIres :: (Either String ())
_equatesIidMemRef :: (Map.Map String Int)
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 59, column 9)
_stmsOlabelDef =
({-# LINE 59 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
Set.empty
{-# LINE 1217 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 59, column 9)
_stmsOlabelFound =
({-# LINE 60 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_stmsIlabelDef
{-# LINE 1223 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 59, column 9)
_stmsOidMemRefDef =
({-# LINE 61 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_equatesIidMemRef
{-# LINE 1229 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 62, column 9)
_equatesOidMemRef =
({-# LINE 62 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
Map.empty
{-# LINE 1235 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (up)
_lhsOres =
({-# LINE 10 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_stmsIres
{-# LINE 1241 "src/Language/EWE/CheckGrammar.hs" #-}
)
( _stmsIlabelDef,_stmsIres) =
stms_ _stmsOidMemRefDef _stmsOlabelDef _stmsOlabelFound
( _equatesIidMemRef) =
equates_ _equatesOidMemRef
in ( _lhsOres))
-- Stmt --------------------------------------------------------
{-
visit 0:
inherited attributes:
idMemRefDef : Map.Map String Int
labelFound : Set.Set String
chained attribute:
labelDef : Set.Set String
synthesized attribute:
res : Either String ()
alternatives:
alternative Stmt:
child labels : Labels
child instr : Instr
visit 0:
local res1 : _
-}
-- cata
sem_Stmt :: Stmt ->
T_Stmt
sem_Stmt (Stmt _labels _instr) =
(sem_Stmt_Stmt (sem_Labels _labels) (sem_Instr _instr))
-- semantic domain
type T_Stmt = (Map.Map String Int) ->
(Set.Set String) ->
(Set.Set String) ->
( (Set.Set String),(Either String ()))
data Inh_Stmt = Inh_Stmt {idMemRefDef_Inh_Stmt :: (Map.Map String Int),labelDef_Inh_Stmt :: (Set.Set String),labelFound_Inh_Stmt :: (Set.Set String)}
data Syn_Stmt = Syn_Stmt {labelDef_Syn_Stmt :: (Set.Set String),res_Syn_Stmt :: (Either String ())}
wrap_Stmt :: T_Stmt ->
Inh_Stmt ->
Syn_Stmt
wrap_Stmt sem (Inh_Stmt _lhsIidMemRefDef _lhsIlabelDef _lhsIlabelFound) =
(let ( _lhsOlabelDef,_lhsOres) = sem _lhsIidMemRefDef _lhsIlabelDef _lhsIlabelFound
in (Syn_Stmt _lhsOlabelDef _lhsOres))
sem_Stmt_Stmt :: T_Labels ->
T_Instr ->
T_Stmt
sem_Stmt_Stmt labels_ instr_ =
(\ _lhsIidMemRefDef
_lhsIlabelDef
_lhsIlabelFound ->
(let _lhsOres :: (Either String ())
_lhsOlabelDef :: (Set.Set String)
_labelsOlabelDef :: ( Set.Set String )
_instrOidMemRefDef :: (Map.Map String Int)
_instrOlabelFound :: (Set.Set String)
_labelsIcopy :: Labels
_labelsIlabelDef :: ( Set.Set String )
_labelsIres :: ( Either String () )
_instrIres :: (Either String ())
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 65, column 10)
_res1 =
({-# LINE 65 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
let f (e,er,s) lbl = if Set.member lbl s
then (True,
lbl ++ " is already defined\n" ++ er,
s)
else (e, er, Set.insert lbl s)
(e', errs', set') = foldl f (False,"",_lhsIlabelDef) _labelsIcopy
in if e'
then Left errs'
else Right ()
{-# LINE 1311 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- "./src-ag/Language/EWE/CheckGrammar.ag"(line 76, column 11)
_lhsOres =
({-# LINE 76 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_res1 <--> _instrIres
{-# LINE 1317 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (up)
_lhsOlabelDef =
({-# LINE 26 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_labelsIlabelDef
{-# LINE 1323 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_labelsOlabelDef =
({-# LINE 38 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIlabelDef
{-# LINE 1329 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_instrOidMemRefDef =
({-# LINE 33 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 1335 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_instrOlabelFound =
({-# LINE 32 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIlabelFound
{-# LINE 1341 "src/Language/EWE/CheckGrammar.hs" #-}
)
( _labelsIcopy,_labelsIlabelDef,_labelsIres) =
labels_ _labelsOlabelDef
( _instrIres) =
instr_ _instrOidMemRefDef _instrOlabelFound
in ( _lhsOlabelDef,_lhsOres)))
-- Stmts -------------------------------------------------------
{-
visit 0:
inherited attributes:
idMemRefDef : Map.Map String Int
labelFound : Set.Set String
chained attribute:
labelDef : Set.Set String
synthesized attribute:
res : Either String ()
alternatives:
alternative Cons:
child hd : Stmt
child tl : Stmts
alternative Nil:
-}
-- cata
sem_Stmts :: Stmts ->
T_Stmts
sem_Stmts list =
(Prelude.foldr sem_Stmts_Cons sem_Stmts_Nil (Prelude.map sem_Stmt list))
-- semantic domain
type T_Stmts = (Map.Map String Int) ->
(Set.Set String) ->
(Set.Set String) ->
( (Set.Set String),(Either String ()))
data Inh_Stmts = Inh_Stmts {idMemRefDef_Inh_Stmts :: (Map.Map String Int),labelDef_Inh_Stmts :: (Set.Set String),labelFound_Inh_Stmts :: (Set.Set String)}
data Syn_Stmts = Syn_Stmts {labelDef_Syn_Stmts :: (Set.Set String),res_Syn_Stmts :: (Either String ())}
wrap_Stmts :: T_Stmts ->
Inh_Stmts ->
Syn_Stmts
wrap_Stmts sem (Inh_Stmts _lhsIidMemRefDef _lhsIlabelDef _lhsIlabelFound) =
(let ( _lhsOlabelDef,_lhsOres) = sem _lhsIidMemRefDef _lhsIlabelDef _lhsIlabelFound
in (Syn_Stmts _lhsOlabelDef _lhsOres))
sem_Stmts_Cons :: T_Stmt ->
T_Stmts ->
T_Stmts
sem_Stmts_Cons hd_ tl_ =
(\ _lhsIidMemRefDef
_lhsIlabelDef
_lhsIlabelFound ->
(let _lhsOres :: (Either String ())
_lhsOlabelDef :: (Set.Set String)
_hdOidMemRefDef :: (Map.Map String Int)
_hdOlabelDef :: (Set.Set String)
_hdOlabelFound :: (Set.Set String)
_tlOidMemRefDef :: (Map.Map String Int)
_tlOlabelDef :: (Set.Set String)
_tlOlabelFound :: (Set.Set String)
_hdIlabelDef :: (Set.Set String)
_hdIres :: (Either String ())
_tlIlabelDef :: (Set.Set String)
_tlIres :: (Either String ())
-- use rule "./src-ag/Language/EWE/CheckGrammar.ag"(line 23, column 12)
_lhsOres =
({-# LINE 23 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
((<-->) _hdIres _tlIres)
{-# LINE 1405 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (up)
_lhsOlabelDef =
({-# LINE 20 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_tlIlabelDef
{-# LINE 1411 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_hdOidMemRefDef =
({-# LINE 28 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 1417 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_hdOlabelDef =
({-# LINE 26 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIlabelDef
{-# LINE 1423 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_hdOlabelFound =
({-# LINE 27 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIlabelFound
{-# LINE 1429 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_tlOidMemRefDef =
({-# LINE 22 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIidMemRefDef
{-# LINE 1435 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (chain)
_tlOlabelDef =
({-# LINE 20 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_hdIlabelDef
{-# LINE 1441 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (down)
_tlOlabelFound =
({-# LINE 21 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIlabelFound
{-# LINE 1447 "src/Language/EWE/CheckGrammar.hs" #-}
)
( _hdIlabelDef,_hdIres) =
hd_ _hdOidMemRefDef _hdOlabelDef _hdOlabelFound
( _tlIlabelDef,_tlIres) =
tl_ _tlOidMemRefDef _tlOlabelDef _tlOlabelFound
in ( _lhsOlabelDef,_lhsOres)))
sem_Stmts_Nil :: T_Stmts
sem_Stmts_Nil =
(\ _lhsIidMemRefDef
_lhsIlabelDef
_lhsIlabelFound ->
(let _lhsOres :: (Either String ())
_lhsOlabelDef :: (Set.Set String)
-- use rule "./src-ag/Language/EWE/CheckGrammar.ag"(line 23, column 12)
_lhsOres =
({-# LINE 23 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
Right ()
{-# LINE 1465 "src/Language/EWE/CheckGrammar.hs" #-}
)
-- copy rule (chain)
_lhsOlabelDef =
({-# LINE 20 "./src-ag/Language/EWE/CheckGrammar.ag" #-}
_lhsIlabelDef
{-# LINE 1471 "src/Language/EWE/CheckGrammar.hs" #-}
)
in ( _lhsOlabelDef,_lhsOres)))