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

Jean-Philippe Bernardy jeanphilippe.bernardy at gmail.com
Thu Oct 15 10:01:44 EDT 2009


Hello,

You can use lazy evaluation of achieve this. The idea is that the
parser will throw an exception upon finding an error,
but parsing will proceed only up to the point in the parse tree that
you are currently interpreting.

Malcolm Wallace has written a simple parsing library that you can use
for that purpose.

http://www.springerlink.com/content/n74p58jku234j761/

Cheers,
JP.

On Thu, Oct 15, 2009 at 3:33 PM, Daneel Yaitskov
<rtfm.rtfm.rtfm at gmail.com> wrote:
> 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.
>
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://www.haskell.org/mailman/listinfo/libraries
>


More information about the Libraries mailing list