summaryrefslogtreecommitdiff
path: root/paper/While/SimpleTest.icl
blob: 3086012aaf3aebc1fc97891c8029347ad956994a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
module SimpleTest

from StdOverloaded import class zero(..), class toString(..)
import Common
import WhileLexer
import Simple
import SimpleParse

Start = val "z"
where
	lexed :: Either Error [Token]
	lexed = lex ['x := 30; z := 0; o := 1; s := 1; while s <= x do (z := z+1; o := o+2; s := s+o)']

	parsed :: Either Error Stm
	parsed = lexed >>= parse

	val :: Var -> Either Error Int
	val v = parsed >>= \pgm -> run pgm zero >>= eval (Var v)