- Restricted to features of grammar formalism
- Extra tools and compilation steps
- Reliance on opaque generator tool, that is often hard to debug, optimize or extend
- Static grammar that can’t be changed at runtime
- Often hard to generate good error messages
- Many tools generate comparatively slow parsers
- Some tools have only limited Unicode support
- Portability problems
|
- Tradeoff between declarativeness and performance
- Syntax less readable than PEG or Regular Expression syntax
- Left‐recursive grammar rules have to be rewritten
- Does not support a pre‐parsing tokenization phase
- You have to learn the API
- Limited to F#
- Code‐dependence on FParsec
- Aggressive performance optimizations add complexity to parts of the lower‐level FParsec source code
|
- You have to write everything yourself, which can take a lot of effort
- Implementing (fast) parsers requires some experience
-
Expression (sub)grammars with infix operators can be ugly and inefficient to parse with a pure recursive‐descent parser, so you might also
have to write some kind of embedded operator precedence parser
|