Stephane Bortzmeyer wrote:
> I'm trying to use Parsec for a language which have identifiers where
> the '-' character is allowed only inside identifiers, not at the start
> or the end.
> 
> identifier = do
>     start <- letter
>     rest <- many (alphaNum <|> char '-') 
>     end <- letter       
>     return ([start] ++ rest ++ [end])
>   <?> "characters authorized for identifiers"

identifier = do
        start <- letter
        rest <- many (alphaNum <|> try inner_minus)
        return $ start : rest
    where
        inner_minus = do 
                char '-' 
                lookAhead alphaNum
                return '-'


> because the parser created by "many" is greedy: it consumes
> everything, including the final letter.

Yes, it does.  You could implement you own non-greedy many combinator,
but you get the associated inefficiency.  Or you could use ReadP, which
doesn't have this problem (but replaces it with other surprises).  


Udo.
-- 
Eagles may soar but weasels don't get sucked into jet engines.
        -- Steven Wright 

Attachment: signature.asc
Description: Digital signature

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to