Lookahead improvements: EOF handling and better ambiguity detection.
[gazelle.git] / TODO
blob0f4016e90d24b1eafb6fc6b1bdb5c3ac7e8805f0
2 This is a list of things I definitely want to do.  I don't go into too many
3 specifics, because the specifics change often as I think about the problem
4 harder.
6 Compiler / Grammar Analysis (all changes should have test-cases):
7 * properly support EOF in lookahead (like s -> "A" | "A" "B"; should predict 1).
8 * properly support lookahead that predicts a return from a final RTN state
9   like s -> a "X"; a -> "Y"*;
10 * try to detect when we are in an infinite loop (requires much thought).
11 * detect cases where some RTN alternatives have no GLA final state.
12   (shouldn't happen, modulo bugs).
13 * deal with lexer-level ambiguity.  longest match will do for now, but
14   we're not currently detecting s -> "A" | "AB";
16 Runtime:
17 * Richer callback specifiers.
18 * Bring back slotbufs: a cheap (stack only, no heap) way of saving parse_vals for
19   the currently-open nodes of the parse tree.
20 * Provide a buffering layer.
21 * As the runtime starts to mature: language bindings.
23 Tests!  Everything should have tests, as much as possible:
24 * all aspects of compilation
25 * bitcode format (both reading and writing)
26 * JSON output from gzlparse.  Both well-formedness and accuracy.
28 Major design areas that exist only in my head:
29 * Character sets other than ASCII.
30 * Embedding Lua to do things only an imperative language can do.
31 * Operator-precedence parsing using the shunting yard algorithm.
32 * Parallel parsers (for both embedded languages and things like whitespace/comments)
33 * Error recovery (basically: just yield to an imperative function).
34 * Generate imperative bytecode / JIT compile.
35 * AST-building.