somewhat improved C++ lexing
[lisp/ebnf-parser.git] / TODO.txt
1 Possible improvements:
2 - Convert (end value) to (value end)?
3   Why did I do it this way?
4   - nil may be a valid value; but it may not be a valid index
5   - see grammar-exception (which currently doesn't exploit this order)
6
7   However, users probably want the value more often than the end index...
8
9 - Loop-detection logic
10   Each rule tracks its invocations.
11   When called, push the string and start to a list.
12   If the same (string start) pair is already on the list, then the current 
13   invocation should return nil (to escape the left-recursive loop).
14   When finished, pop the string and start.
15
16   Simplification: Assume the user only parses one string at a time => only need to store the index.
17
18 - Input streams
19   Generalize from a parse string to a parse buffer
20   e.g. buffer a file as it is being read
21
22   Provide a mechanism for explicitely flushing the buffer 
23
24 - Error reporting
25   Track the deepest partial parse; assume its termination indicates the error location.
26   Provide hooks for diagnosing/reporting/fixing the error.
27
28 - Provide line/column information (especially for parsed files)
29   Allow this to propagate through nested calls (as in ISO14977:syntax).
30
31 - add EBNF syntax for grammar-func, error reporting, buffer flushing, etc.
32
33   The EBNF spec notes that a meta-identifier cannot be followed by '(' and suggests using
34   this to extend the metalanguage...  Maybe use '<' and '>' ?
35
36   Probably also define some standard grammar-func transformations (maybe grammar-copy and grammar-ignore?).
37
38 - Store meta-information in the rules to allow for algebraic simplification
39   e.g. "r1='a'|'b'|'c'; r2=r1-'b';" could simplify to "r1='a'|'b'|'c'; r2='a'|'c';".
40
41 - Write user documentation
42   Explain why I didn't use a table-based parser
43   - Easily understood
44   - Simplest translation from grammar to parser code; no transformations required.
45   - No grammar restrictions (once left-recursion is eliminated)
46   - Computers are fast enough; people who need the speed for large parses can add the tables.
47   - Rules can be individually implemented/tested/extended at runtime
48
49   Illustrate input/output pairs for each of grammar-XX.
50   (Also look for improvements in how the output is generated.)
51
52 - Provide grammars for other common source types
53   - date/number/IP strings
54   - XML/HTML
55   - (La)TeX
56   - CORBA IDL
57
58 - Add an interactive (graphical?) editor/debugger