The GRL parser adds a lot of minuses to its great advantage (the ability to parse almost any grammar and solve any ambiguity).
Here are the minuses that I found:
In the answer, I gave a restriction of the type of semantic value. Not deadly but unpleasant.
Delayed action. This is well written to the docks (see 1.5.3.1).
Because in case of conflicts the parser starts branching then it is impossible to use the return value in the lexer. Well, the delayed action here also affects. This can not cope.
Some grammars can cause unexpected problems when parsing conflicts with which the LALR parser does well. Here we need an analysis of the grammar, which means that not any LALR grammar will suit the GLR parser.
If after parsing different parts of the conflict both parsers are alive, then it is necessary either to set priorities or to make merge. And merzh it always hurts.
And in terms of speed it is difficult to say something. The work of the GRL parser is not linear and very dependent on grammar. But the approximate (very approximate) complexity will be O (2 ^ n) where n is the number of conflicts since on each conflict, the parser branches into two other parsers which, in turn, can also branch.
Write in the comments if you know some more minutes and I will add them to the answer.
Expr ::= Expr + Expr | Expr - Expr | TermExpr ::= Expr + Expr | Expr - Expr | TermExpr ::= Expr + Expr | Expr - Expr | Termuse the left-recursive grammarExpr ::= Term + Expr | Term - Expr | TermExpr ::= Term + Expr | Term - Expr | TermExpr ::= Term + Expr | Term - Expr | Termor right-recursive grammarExpr ::= Expr + Term | Expr - Term | TermExpr ::= Expr + Term | Expr - Term | TermExpr ::= Expr + Term | Expr - Term | Term(respectively for LR or LL parser). - VladDx * y. But the glr parser will allow this. - Ilya Chizhanovx * yambiguity disposable without the help of lexer hack? Or are there several parse trees? - VladD