Fix parser.
Chris Pressey
3 years ago
39 | 39 |
|
40 | 40 |
operand = do
|
41 | 41 |
spaces
|
42 | |
r <- indirect <|> direct <|> immediate
|
|
42 |
r <- (try indirect) <|> (try direct) <|> immediate
|
43 | 43 |
return r
|
44 | 44 |
|
45 | 45 |
indirect = do
|
|
55 | 55 |
|
56 | 56 |
immediate = do
|
57 | 57 |
n <- number
|
58 | |
return $ Direct n
|
|
58 |
return $ Immediate n
|
59 | 59 |
|
60 | 60 |
number = do
|
61 | 61 |
c <- digit
|
10 | 10 |
main = do
|
11 | 11 |
args <- getArgs
|
12 | 12 |
case args of
|
|
13 |
["parse", fileName] -> do
|
|
14 |
text <- readFile fileName
|
|
15 |
let prog = Parser.parseZOWIE text
|
|
16 |
putStrLn $ show $ prog
|
|
17 |
return ()
|
13 | 18 |
["run", fileName] -> do
|
14 | 19 |
text <- readFile fileName
|
15 | 20 |
let prog = Parser.parseZOWIE text
|
|
17 | 22 |
putStrLn $ show $ result
|
18 | 23 |
return ()
|
19 | 24 |
_ -> do
|
20 | |
abortWith "Usage: zowie run <carriage-program-text-filename>"
|
|
25 |
abortWith "Usage: zowie (parse|run) <zowie-program-filename>"
|
21 | 26 |
|
22 | 27 |
abortWith msg = do
|
23 | 28 |
hPutStrLn stderr msg
|