summaryrefslogtreecommitdiff
path: root/paper/While/WhileCommon.dcl
diff options
context:
space:
mode:
Diffstat (limited to 'paper/While/WhileCommon.dcl')
-rw-r--r--paper/While/WhileCommon.dcl45
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