implementation module SimpleParse import StdList, StdTuple from StdFunc import o import Yard import WhileCommon import WhileLexer import Simple instance parse Stm where parse cs = fst (runParser parser cs) where parser :: Parser Token Stm parser = liftM2 Compose parser` (item CompToken *> parser) <|> parser` parser` :: Parser Token Stm parser` = item ParenOpen *> parser <* item ParenClose <|> item SkipToken *> pure Skip <|> item IfToken *> liftM3 If pbexpr (item ThenToken *> parser) (item ElseToken *> parser`) <|> item WhileToken *> liftM2 While pbexpr (item DoToken *> parser`) <|> liftM2 Ass (toVar <$> satisfy isVarToken) (item AssToken *> paexpr) toVar (VarToken v) = v isVarToken (VarToken _) = True; isVarToken _ = False