Achim Schneider | 17 May 00:17

Re: Proving my point

Philippa Cowderoy <flippa <at> flippac.org> wrote:

> On Fri, 16 May 2008, Achim Schneider wrote:
> 
> > My problem is that realTopLevel = expr, and that I get into an
> > infinite recursion, never "closing" enough parens, never hitting
> > eof.
> 
> Have you run into the left-recursion trap, by any chance?
> 
> This doesn't work:
> 
> expr = do expr; ...
> 
expr =
    do {e <- parens expr; return $ Nest e}
    <|> lambda
    <|> _let
    <|> try app
    <|> atom

There's at least one token before any recursion, so I guess not. After
all, it terminates. It's my state that does not succeed in directing
the parser not to mess up, so I'm reimplementing the thing as a
two-pass but stateless parser now. Definitely the easier and clearer
thing to do: I can have an end of line token that carries the number of
trailing spaces, so I got perfect indent information without any pain
involved, at all, and don't have to make parsers fail based on state.

--

-- 
(c) this sig last receiving data processing entity. Inspect headers for
past copyright information. All rights reserved. Unauthorised copying,
hiring, renting, public performance and/or broadcasting of this
signature prohibited. 

Gmane