Send Beginners mailing list submissions to beginners@haskell.org To subscribe or unsubscribe via the World Wide Web, visit http://www.haskell.org/mailman/listinfo/beginners or, via email, send a message with subject or body 'help' to beginners-requ...@haskell.org
You can reach the person managing the list at beginners-ow...@haskell.org When replying, please edit your Subject line so it is more specific than "Re: Contents of Beginners digest..." Today's Topics: 1. Re: Simple parser question (Martin Drautzburg) 2. Building with shared libraries on OS X (James Nelson) ---------------------------------------------------------------------- Message: 1 Date: Mon, 18 Feb 2013 21:48:36 +0100 From: Martin Drautzburg <martin.drautzb...@web.de> Subject: Re: [Haskell-beginners] Simple parser question To: "The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell" <beginners@haskell.org> Message-ID: <201302182148.36204.martin.drautzb...@web.de> Content-Type: Text/Plain; charset="iso-8859-1" Thanks, that kind of worked. As long as I am only dealing with literal integers at the beginning of pluses is works fine. *Main> parse "(1+2+3)" Plus (Lit 1) (Plus (Lit 2) (Lit 3)) But this fails already: *Main> parse "(1+2)+3" Error "parse error" There is no problem with expressions in parenthes, but my "pluses" can only start with an integer (even one in parentheses), but not with an expression, since I had to get rid of the expression at the left side, to avoid left- recursion. I am also confused that saying "a plus expression is an integer followed by many "plus somethings" is not what the language says. So this requires a lot of "paying attention" to get right. I'd much rather say "a plus expression is two expressions with a '+' in between". Any other ideas? On Thursday, 14. February 2013 15:23:03 Twan van Laarhoven wrote: > Left-recursion is always a problem for recursive-descend parsers. The > solution is to rewrite the parser as: > * first always parse an expression without a Plus > * followed by zero or more "+ exp" parts. > > How exactly you write this depends on the combinators that the book defines > for writing parsers. In Parsec you would write something like: > > parseExp = do > lit <- parseLit > pluses <- many (parsePlusToken *> parseLit) > return (combinePlusesWithLit lit pluses) > > combinePlusesWithLit = foldr Plus -- or foldl > > I hope you get the idea. > > Note that the parsec library has functions chainl and chainr that do > something like this under the hood, so you would never actually write the > above code. > > > Twan > > On 14/02/13 13:59, Martin Drautzburg wrote: > > Hello all, > > > > I just hit a sticking point when trying to parse something like > > > > data Exp = Lit Int -- literal integer > > > > | Plus Exp Exp > > > > where something like "1+2" should be parsed to "Plus (Lit 1) (Lit 2)". > > > > When I try to parse "1+2" my parser enters an infinite loop. I can > > understand why: it thinks > > > > "hmm, this expression could be a plus, but then it must start with an > > expression, lets check". > > > > and it tries to parse expression again and again considers Plus. > > > > When I change the rules, so it first checks for "Lit", it does parse the > > "1" just fine, but then gives up, because the remainder is not an > > expression anymore, but just a "+2". > > > > My parser is written in the style shown in Graham Hutton's book: > > > > Parser a :: String -> (a, String). > > > > I believe I am missing something obvious, but I can't see it. > > _______________________________________________ > Beginners mailing list > Beginners@haskell.org > http://www.haskell.org/mailman/listinfo/beginners -- Martin ------------------------------ Message: 2 Date: Tue, 19 Feb 2013 11:17:24 +0900 From: James Nelson <zayd...@gmail.com> Subject: [Haskell-beginners] Building with shared libraries on OS X To: beginners@haskell.org Message-ID: <17c8fed0-a1a9-4572-9e4b-603810b3a...@gmail.com> Content-Type: text/plain; charset=us-ascii Hi, I've been trying to install Haskell in such a way that I can compile things with the -dynamic option on an OS X machine. It seems that with the standard Haskell Platform, the shared versions of libraries are not included, so enabling the "shared" option in ~/.cabal/config doesn't work. I've tried installing haskell-platform from scratch with homebrew (with and without --devel), and this hasn't worked either Finally, I've tried re-installing Haskell Platform with the provided .dmg from scratch, but I get errors like: - Perhaps you haven't installed the "dyn" libraries for package `text-0.11.2.3'? - Codec/Zlib.hs:47:8: Could not find module `Codec.Compression.Zlib' Perhaps you haven't installed the "dyn" libraries for package `zlib-0.5.4.0'? Is there any way to add the shared libraries to everything included in haskell platform for OS X? Regards, James ------------------------------ _______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners End of Beginners Digest, Vol 56, Issue 31 *****************************************