diff options
Diffstat (limited to 'paper/While/WhileCommon.dcl')
-rw-r--r-- | paper/While/WhileCommon.dcl | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/paper/While/WhileCommon.dcl b/paper/While/WhileCommon.dcl new file mode 100644 index 0000000..b813641 --- /dev/null +++ b/paper/While/WhileCommon.dcl @@ -0,0 +1,45 @@ +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 + +:: AExpr = Var Var + | Lit Int + | Op AExpr Operator AExpr + +:: Operator = Add | Sub | Mul | Div + +:: BExpr = Bool Bool + | Not BExpr + | And BExpr BExpr + | Or BExpr BExpr + | Comp AExpr Comparator AExpr + +:: Comparator = Eq | Ne | Le | Lt | Ge | Gt + +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 |