Friday, July 18, 2008

Pro Perl Parsing (Pro)

The first 108 pages of "Pro Perl Parsing" deal with basic parsing concepts and give examples on how to use a CPAN module to define parsers. It's not quite accurate at times, though: The author uses the terms 'precedence' and 'associativity' interchangably, although these are orthogonal concepts. And the parser on page 82 has a design flaw (hint: try parsing "(5*(3+4))+1)", which yields 40, ouch!).

Then come 30 pages with a manual-page style explanation of Damian Conway's Parse::RecDescent module, along with some interesting tidbits here and there.

However, I would have expected to read a better explanation of the underlying parsing theory, like a distilled and simplified version of the "Dragon" book (Aho, "Compilers"). I would have liked to read how to write a custom parser from scratch in Perl, like in Mark Jason Dominus' "Higher Order Perl". Also, I would have expected more practical examples on how to tackle common parsing problems.

However, the second half of the book starts with an explanation of the HTML language. We get to know how titles and lists and links are done in HTML. Then we learn how to fetch web pages with Perl. Also, we learn about web services via SOAP and XML-RPC, about formatting output in Perl and are getting a chapter on "data mining". These topics aren't related to "parsing" at all, though.

There's an example on page 202 on how to parse command line arguments by lumping them all together to form a single string and then firing up an expensive recursive descent parser to tear them apart. Experienced Perl programmers would solve this common problem elegantly in a single line of Perl, using the Getopt::Std module.

So, I'm somewhat ambivalent on this book. Since there's not many books on Perl parsing, I was excited about it, but I was somewhat disappointed by the lack of depth, accuracy, and the filler-style second half of the book. I would have liked to read more about parsing in Perl and less about how to use CPAN modules dealing with parsing-related topics. Had the book maintained a strong focus on plain "parsing", it could have been a slam-dunk five-star. So, it's only three -- worth reading, but not a potential classic.

Download Link 1
Download Link 2