Can it write an interpreter without building the tree of parse?

Daneel Yaitskov rtfm.rtfm.rtfm at gmail.com
Thu Oct 15 09:33:18 EDT 2009


Hi,


I learn Parsec library now. Parsers from all articles which I found at 
first parse input stream entirely and only then call an eval function. 
Such method requires to define many data-types for each an element of a 
language. And I guess that it hard to write bash interpreter with it 
help. Bash makes immediately its commands. For example:

#!/bin/bash
echo HEELLO
)
echo DDDD

dan at tmp$ bash a.sh
HEELLO
a.sh: line 5:  syntax error near unexpected token  `)'
a.sh: line 5: `)'
dan at tmp$

First command of the script is made by bash nonetheless the error in the 
next line.

I want to write a interpreter which does actions (IO) inside the parse 
function. But I don't know how to do it. That code show that What I 
need. Does trick exist that the block function can contain an action 
(putStr)?

import Text.ParserCombinators.Parsec
import Data.Map

interpret s = runParser mainf () "" s

mainf :: GenParser Char () (IO ())
mainf = do rr <- block
            eof
            return $ putStrLn rr

block :: GenParser Char () String
block = do s <- string "HELLO WORLD"
            ----- putStrLn "There is an action"
            return s



Daneel Yaitskov.



More information about the Libraries mailing list