Everyone has to write a parser sometime. What approaches do you prefer when the time comes?
1. yacc (Not defeated in any contest vs. another choice) |
2. hand-coded recursive descent, loses to yacc by 27–18 |
3. bison |
4. parser combinators (write-in), loses to bison by 25–17 |
5. ANTLR, loses to parser combinators (write-in) by 19–16 |
6. CUP, loses to ANTLR by 14–5 |
7. other LALR parser generator, loses to CUP by 9–8 |
8. Perl re's, loses to other LALR parser generator by 12–10 |
9. other LL(k) parser generator, loses to Perl re's by 9–7 |
10. hand-coded shift-reduce parser, loses to Perl re's by 12–10 |
11. Elkhound, loses to hand-coded shift-reduce parser by 7–6 |
12. Pratt parser (Top down precedence) (write-in), loses to Elkhound by 7–4 |
13. Parsing Expression Grammar (write-in), loses to Pratt parser (Top down precedence) (write-in) by 8–6 |
14. DMS (write-in), loses to Parsing Expression Grammar (write-in) by 7–6 |
15. ply (write-in), loses to DMS (write-in) by 8–3 |
16. Definite Clause Grammars (Prolog) (write-in), loses to ply (write-in) by 22–4 |
17. The BNFC Converter (write-in), loses to Definite Clause Grammars (Prolog) (write-in) by 31–3 |
18. Earley (write-in), loses to The BNFC Converter (write-in) by 34–2 |
19. LR(1) parser generator (menhir) (write-in), loses to Earley (write-in) by 41–2 |
20. Parse::RecDescent (Perl) (write-in), loses to LR(1) parser generator (menhir) (write-in) by 43–1 |
21. Javacc (write-in), loses to Parse::RecDescent (Perl) (write-in) by 43–2 |
22. Copper (write-in), loses to Javacc (write-in) by 50–0 |
23. Parsec (Haskell) (write-in), loses to Copper (write-in) by 52–2 |
For simplicity, some details of the poll result are not shown.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1. yacc | - | 27 | 16 | 27 | 25 | 26 | 26 | 30 | 30 | 31 | 28 | 32 | 31 | 31 | 34 | 37 | 43 | 46 | 49 | 49 | 50 | 51 | 52 | |
2. hand-coded recursive descent | 18 | - | 22 | 28 | 27 | 29 | 27 | 33 | 31 | 33 | 31 | 34 | 32 | 34 | 35 | 41 | 45 | 47 | 50 | 51 | 51 | 53 | 53 | |
3. bison | 16 | 22 | - | 25 | 21 | 22 | 22 | 27 | 24 | 25 | 24 | 28 | 27 | 27 | 30 | 33 | 40 | 42 | 47 | 48 | 48 | 51 | 52 | |
4. parser combinators (write-in) | 15 | 13 | 17 | - | 19 | 19 | 17 | 18 | 20 | 21 | 20 | 20 | 18 | 20 | 27 | 35 | 40 | 41 | 44 | 45 | 45 | 50 | 52 | |
5. ANTLR | 12 | 12 | 10 | 16 | - | 14 | 14 | 18 | 17 | 18 | 16 | 20 | 18 | 19 | 22 | 28 | 36 | 38 | 44 | 46 | 45 | 49 | 52 | |
6. CUP | 8 | 7 | 9 | 12 | 5 | - | 9 | 14 | 11 | 11 | 11 | 13 | 14 | 11 | 17 | 27 | 35 | 39 | 45 | 46 | 45 | 49 | 52 | |
7. other LALR parser generator | 4 | 8 | 7 | 11 | 9 | 8 | - | 12 | 10 | 12 | 10 | 12 | 14 | 12 | 17 | 25 | 32 | 36 | 42 | 43 | 43 | 49 | 52 | |
8. Perl re's | 8 | 6 | 8 | 13 | 8 | 9 | 10 | - | 9 | 12 | 11 | 16 | 15 | 13 | 19 | 27 | 33 | 36 | 42 | 44 | 44 | 50 | 52 | |
9. other LL(k) parser generator | 3 | 4 | 4 | 7 | 3 | 4 | 2 | 7 | - | 7 | 5 | 10 | 9 | 8 | 14 | 25 | 31 | 35 | 41 | 43 | 43 | 49 | 52 | |
10. hand-coded shift-reduce parser | 4 | 3 | 4 | 12 | 5 | 8 | 5 | 10 | 7 | - | 7 | 11 | 11 | 9 | 14 | 25 | 32 | 36 | 43 | 44 | 44 | 50 | 53 | |
11. Elkhound | 4 | 4 | 3 | 8 | 2 | 1 | 3 | 6 | 3 | 6 | - | 7 | 9 | 6 | 12 | 23 | 31 | 35 | 42 | 44 | 44 | 49 | 52 | |
12. Pratt parser (Top down precedence) (write-in) | 4 | 3 | 4 | 7 | 4 | 4 | 4 | 5 | 3 | 6 | 4 | - | 8 | 4 | 10 | 22 | 29 | 33 | 41 | 42 | 43 | 49 | 52 | |
13. Parsing Expression Grammar (write-in) | 7 | 4 | 7 | 9 | 7 | 7 | 5 | 8 | 7 | 9 | 7 | 6 | - | 7 | 14 | 25 | 32 | 35 | 41 | 42 | 43 | 49 | 52 | |
14. DMS (write-in) | 1 | 1 | 0 | 6 | 0 | 0 | 0 | 3 | 0 | 2 | 0 | 4 | 6 | - | 8 | 21 | 29 | 33 | 41 | 42 | 43 | 49 | 52 | |
15. ply (write-in) | 4 | 3 | 2 | 2 | 2 | 2 | 3 | 4 | 3 | 5 | 3 | 3 | 3 | 3 | - | 22 | 30 | 34 | 41 | 42 | 43 | 49 | 52 | |
16. Definite Clause Grammars (Prolog) (write-in) | 3 | 3 | 3 | 3 | 3 | 4 | 4 | 4 | 4 | 6 | 4 | 4 | 4 | 4 | 4 | - | 31 | 33 | 41 | 42 | 43 | 49 | 52 | |
17. The BNFC Converter (write-in) | 3 | 3 | 2 | 1 | 3 | 3 | 3 | 4 | 3 | 4 | 3 | 3 | 3 | 3 | 3 | 3 | - | 34 | 42 | 42 | 43 | 49 | 52 | |
18. Earley (write-in) | 3 | 2 | 2 | 2 | 2 | 2 | 2 | 3 | 2 | 3 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | - | 41 | 42 | 43 | 49 | 52 | |
19. LR(1) parser generator (menhir) (write-in) | 2 | 1 | 2 | 2 | 2 | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | - | 43 | 43 | 49 | 52 | |
20. Parse::RecDescent (Perl) (write-in) | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | - | 43 | 49 | 52 | |
21. Javacc (write-in) | 2 | 1 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 3 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | - | 50 | 52 | |
22. Copper (write-in) | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | - | 52 | |
23. Parsec (Haskell) (write-in) | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | - |
Ballot reporting was not enabled for this poll.
Feel like voting on something else? Try one of these public polls: