Re:Building a tiny little broken calculator with parser comb...
by jakear on Sunday July 24, 2022 @08:14PM
(#32219171)
Those interested may find Pratt parsing compelling, it is easy to implement and works well for hobby parsers (production quality error messaging tends to require custom code). As an example here’s a quick and dirty expression evaluator I made a whole back that supports D&D-style die roll codes as literals/first class variables: https://github.com/JacksonKearl/RollDice-Discord
Re:Building a tiny little broken calculator with parser comb...
by userbinator on Sunday July 24, 2022 @09:45PM
(#32219712)
I believe Pratt, TDOP, and precedence climbing are all just different names for the same technique that involves comparing precedences in a loop. The fact that it's basic principle is so simple is probably what lead to multiple independent reinventions.
If anything, after reading about the aforementioned algorithms, the technique in the article seems to show that using parser combinators is a lot of work for very little gain --- I've read much shorter articles on recursive descent, and those do handle precedence correctly.
Re:Building a tiny little broken calculator with parser comb...
by jakear on Monday July 25, 2022 @02:11AM
(#32221068)
That’s more a critique of the author than the concept - I gave up midway through the article but order combinators remain a useful tool, particularly as a library. To my eyes, the logic here https://github.com/JacksonKearl/RollDice-Discord/blob/master... is much simpler than the equivalent recursive descent code would be. I’d be interested in an article comparing them in greater detail.
http://journal.stuffwithstuff.com/2011/03/19/pratt-parsers-e...
https://github.com/JacksonKearl/PrattParse
If anything, after reading about the aforementioned algorithms, the technique in the article seems to show that using parser combinators is a lot of work for very little gain --- I've read much shorter articles on recursive descent, and those do handle precedence correctly.
- How Desmos Uses Pratt Parsers (2018) - TypeScript - https://engineering.desmos.com/articles/pratt-parser/ - Source: https://github.com/desmosinc/pratt-parser-blog-code
- Simple But Powerful Pratt Parsing (2020) - Rust - https://matklad.github.io/2020/04/13/simple-but-powerful-pra... - Source: https://github.com/matklad/minipratt
Under "Parser Generator":
```
```There seems to be a typo: the 2nd "parseA" should really be a "parseB"?