From e2b9657f79d913dddb064037e79a9dd1a63bdbf9 Mon Sep 17 00:00:00 2001 From: aarne Date: Tue, 4 Sep 2007 20:51:26 +0000 Subject: [PATCH] cleaned up Calculator example --- examples/tutorial/calculator/Calculator.gf | 6 ++--- examples/tutorial/calculator/CalculatorC.gf | 2 +- examples/tutorial/calculator/CalculatorE.gf | 27 +++++++++++++++++++++ examples/tutorial/calculator/CalculatorJ.gf | 4 +-- 4 files changed, 33 insertions(+), 6 deletions(-) create mode 100644 examples/tutorial/calculator/CalculatorE.gf diff --git a/examples/tutorial/calculator/Calculator.gf b/examples/tutorial/calculator/Calculator.gf index c2fbcd1bc..65192e226 100644 --- a/examples/tutorial/calculator/Calculator.gf +++ b/examples/tutorial/calculator/Calculator.gf @@ -6,7 +6,7 @@ abstract Calculator = { fun PEmpty : Prog ; - PDecl : Exp -> (Var -> Prog) -> Prog ; + PInit : Exp -> (Var -> Prog) -> Prog ; PAss : Var -> Exp -> Prog -> Prog ; EPlus, EMinus, ETimes, EDiv : Exp -> Exp -> Exp ; @@ -18,8 +18,8 @@ abstract Calculator = { def ex1 = - PDecl (EPlus (EInt 2) (EInt 3)) (\x -> - PDecl (EPlus (EVar x) (EInt 1)) (\y -> + PInit (EPlus (EInt 2) (EInt 3)) (\x -> + PInit (EPlus (EVar x) (EInt 1)) (\y -> PAss x (EPlus (EVar x) (ETimes (EInt 9) (EVar y))) PEmpty)) ; } diff --git a/examples/tutorial/calculator/CalculatorC.gf b/examples/tutorial/calculator/CalculatorC.gf index e36c28e3f..53eade357 100644 --- a/examples/tutorial/calculator/CalculatorC.gf +++ b/examples/tutorial/calculator/CalculatorC.gf @@ -10,7 +10,7 @@ concrete CalculatorC of Calculator = open Prelude, Formal in { lin PEmpty = ss [] ; - PDecl exp prog = ss ("int" ++ prog.$0 ++ "=" ++ top exp ++ ";" ++ prog.s) ; + PInit exp prog = ss ("int" ++ prog.$0 ++ "=" ++ top exp ++ ";" ++ prog.s) ; PAss vr exp prog = ss (vr.s ++ "=" ++ top exp ++ ";" ++ prog.s) ; EPlus = infixl 0 "+" ; diff --git a/examples/tutorial/calculator/CalculatorE.gf b/examples/tutorial/calculator/CalculatorE.gf new file mode 100644 index 000000000..f432d371a --- /dev/null +++ b/examples/tutorial/calculator/CalculatorE.gf @@ -0,0 +1,27 @@ +--# -path=.:prelude + +concrete CalculatorE of Calculator = open Prelude in { + + flags lexer=codevar ; unlexer=unwords ; + + lincat + Prog, Exp, Var = SS ; + + lin + PEmpty = ss [] ; + PInit exp prog = ss ("initialize" ++ prog.$0 ++ "as" ++ exp.s ++ PAUSE ++ prog.s) ; + PAss vr exp prog = ss ("redefine" ++ vr.s ++ "as" ++ exp.s ++ PAUSE ++ prog.s) ; + + EPlus = infix "plus" ; + EMinus = infix "minus" ; + ETimes = infix "times" ; + EDiv = infix ["divided by"] ; + + EInt i = i ; + EVar x = x ; + + oper + infix : Str -> SS -> SS -> SS = \op,x,y -> + ss (x.s ++ op ++ y.s ++ PAUSE) ; + PAUSE = "PAUSE" ; +} diff --git a/examples/tutorial/calculator/CalculatorJ.gf b/examples/tutorial/calculator/CalculatorJ.gf index 0df7b73fe..68ff5342c 100644 --- a/examples/tutorial/calculator/CalculatorJ.gf +++ b/examples/tutorial/calculator/CalculatorJ.gf @@ -9,13 +9,13 @@ concrete CalculatorJ of Calculator = open Prelude in { lin PEmpty = ss [] ; - PDecl exp prog = ss (exp.s ++ ";" ++ prog.s) ; + PInit exp prog = ss (exp.s ++ ";" ++ "istore" ++ prog.$0 ++ ";" ++ prog.s) ; PAss vr exp prog = ss (exp.s ++ ";" ++ "istore" ++ vr.s ++ ";" ++ prog.s) ; EPlus = postfix "iadd" ; EMinus = postfix "isub" ; ETimes = postfix "imul" ; - EDiv = postfix "imul" ; + EDiv = postfix "idiv" ; EInt = prefixSS "iconst" ; EVar = prefixSS "iload" ;