Add more flexibility in how whitespace is specified.
[gazelle.git] / TODO
blob6d61c06dfb722991b7528b440db9933744054925
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 * What about GLAs with EOF out of the start state?  If there is only one
7   non-EOF transition, it *seems* pointless, because our normal EOF stack
8   unwinding seems to cover it.  On the other hand, verifying this is always
9   true seems like a lot of hard thought.  Let's think of it as an optimization
10   and do it later.
12 Language:
13 * make semicolons optional at end of line.
15 Compiler / Grammar Analysis (all changes should have test-cases):
16 * make tostring() methods for all of the grammar objects.
17 * create Lua bindings for the C grammar representation, which we can use
18   to write tests that verify that the grammar makes it through the bytecode
19   step unchanged.
20 * (maybe) take regular subset of non-regular lookahead when it doesn't
21   cause alternatives' languages to intersect.
22 * (maybe) support full-LL by having first states of GLA have edges that
23   are the states on the return stack at runtime.
24 * detect cases where some RTN alternatives have no GLA final state.
25   (shouldn't happen, modulo bugs).
26 * deal with lexer-level ambiguity.  longest match will do for now, but
27   we're not currently detecting s -> "A" | "AB";
29 Runtime:
30 * Richer callback specifiers.
31 * Bring back slotbufs: a cheap (stack only, no heap) way of saving parse_vals for
32   the currently-open nodes of the parse tree.
33 * Provide a buffering layer.
34 * As the runtime starts to mature: language bindings.
36 Tests!  Everything should have tests, as much as possible:
37 * all aspects of compilation
38 * bitcode format (both reading and writing)
39 * JSON output from gzlparse.  Both well-formedness and accuracy.
41 Major design areas that exist only in my head:
42 * Character sets other than ASCII.
43 * Embedding Lua to do things only an imperative language can do.
44 * Operator-precedence parsing using the shunting yard algorithm.
45 * Parallel parsers (for both embedded languages and things like whitespace/comments)
46 * Error recovery (basically: just yield to an imperative function).
47 * Generate imperative bytecode / JIT compile.
48 * AST-building.