definition module WhileCommon from StdOverloaded import class toString, class zero from GenEq import generic gEq from Common import ::Either, ::Error from WhileLexer import ::Token from Yard import ::Parser :: Var :== String :: State :== Var -> Either Error Int :: Operator = Add | Sub | Mul | Div :: AExpr = Var Var | Lit Int | Op AExpr Operator AExpr :: Comparator = Eq | Ne | Le | Lt | Ge | Gt :: BExpr = Bool Bool | Not BExpr | And BExpr BExpr | Or BExpr BExpr | Comp AExpr Comparator AExpr derive gEq AExpr, Operator, BExpr, Comparator instance zero State instance toString AExpr instance toString Operator instance toString BExpr instance toString Comparator class run s :: s State -> Either Error State class eval i o :: i State -> Either Error o instance eval AExpr Int instance eval BExpr Bool class parse o :: [Token] -> Either Error o paexpr :: Parser Token AExpr pbexpr :: Parser Token BExpr