News for hackers. Stuff that matters.
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

http://journal.stuffwithstuff.com/2011/03/19/pratt-parsers-e...

https://github.com/JacksonKearl/PrattParse

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 Sunday July 24, 2022 @09:56PM (#32219775)
What is your complaint re precedence in Pratt parsing? The linked code properly implements precedence fairly trivially.
Re:Building a tiny little broken calculator with parser comb... by userbinator on Sunday July 24, 2022 @11:57PM (#32220338)
I think you misunderstood. I'm referring to the original article of this item, not your linked code.
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.
Re:Building a tiny little broken calculator with parser comb... by lioeters on Sunday July 24, 2022 @08:37PM (#32219329)
I'm a fan of Pratt parsers too. In addition to the article by @munificent you linked above, I found the following helpful.

- 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

Re:Building a tiny little broken calculator with parser comb... by 2143 on Monday July 25, 2022 @12:40AM (#32220535)
To the original author:

Under "Parser Generator":

```

   const parseChar = char =>
  input => [
    input[0] === char,
    input.slice(1, input.length)
  ];

   const parseA = parseChar('A');
   const parseA = parseChar('B');

   parseA(testString) // [ true, 'bcd123' ]
   parseB(testString) // [ false, 'Abcd123' ]
```

There seems to be a typo: the 2nd "parseA" should really be a "parseB"?

Re:Building a tiny little broken calculator with parser comb... by jfo on Monday July 25, 2022 @03:21AM (#32221453)
Thanks, I have fixed it