module Language.Grammars.ZipperAG.Examples.LET.Let_No_Blocks where
import Data.Generics.Zipper
import Language.Grammars.ZipperAG.Examples.LET.Let_DataTypes_Boilerplate
import Language.Grammars.ZipperAG.Examples.LET.Let_Bidi
import Language.Grammars.ZipperAG
dclo :: Zipper RootA -> [String]
dclo ag = case (constructor ag) of
"RootA" -> dclo $ ag.$1
"LetA" -> dclo $ ag.$1
"ConsAssignA" -> dclo $ ag.$3
"EmptyListA" -> dcli ag
errs :: Zipper RootA -> [String]
errs ag = case (constructor ag) of
"RootA" -> errs $ ag.$1
"LetA" -> (errs $ ag.$1) ++ (errs $ ag.$2)
"InA" -> (errs $ ag.$1)
"ConsAssignA" -> mNBIn (lexeme_ConsAssignA ag) (dcli ag) ++ (errs $ ag.$2) ++ (errs $ ag.$3)
"EmptyListA" -> []
"Plus" -> (errs $ ag.$1) ++ (errs $ ag.$2)
"Divide" -> (errs $ ag.$1) ++ (errs $ ag.$2)
"Minus" -> (errs $ ag.$1) ++ (errs $ ag.$2)
"Time" -> (errs $ ag.$1) ++ (errs $ ag.$2)
"Variable" -> mBIn (lexeme_Variable ag) (env ag)
"Constant" -> []
dcli :: Zipper RootA -> [String]
dcli ag = case (constructor ag) of
"RootA" -> []
_ -> case (constructor $ parent ag) of
"ConsAssignA" -> (dcli $ parent ag) ++ [lexeme_ConsAssignA $ parent ag]
_ -> dcli $ parent ag
env :: Zipper RootA -> [String]
env ag = case (constructor ag) of
"RootA" -> dclo ag
_ -> env $ parent ag
mBIn :: String -> [String] -> [String]
mBIn name [] = [name]
mBIn name (n:es) = if (n==name) then [] else mBIn name es
mNBIn :: String -> [String] -> [String]
mNBIn tuple [] = []
mNBIn a1 (a2:es) = if (a1==a2) then [a1] else mNBIn a1 es
test_scope_no_block_rules p = errs $ toZipper (getRootC_RootA $ toZipper p)