copyright notices/updates
[sbp.git] / TODO
1 _____________________________________________________________________________
2 Immediately
3
4   - evil problems with: (x y? z /ws)
5      - it gets even more evil than that
6
7   - Annotation Tutorial
8
9
10 ______________________________________________________________________________
11 v1.1
12
13   - MUST HAVE BETTER ERROR MESSAGES
14      - use for developing java15.g
15   - java15.g
16   - topology no longer needed as an arg to parser?
17
18   - broader regression testing (for stuff like error messages, etc)
19
20   - More topology untangling [later]
21   - tib: use the lexer only for indentation increases/decreases
22   - grammar highlighting?
23
24   - Forest needs a "manual access" API
25       - the unwrap bit in Forest makes it really hard to expose an API for forests
26
27
28
29 ______________________________________________________________________________
30 v1.1
31
32   - finalize metagrammar and rdp-op's
33   - write some grammars
34       - Java grammar
35       - TeX (math?)
36       - URL (RFC)
37       - RFC2822 (email message/headers)
38   - clean up the whole Walk situation (?)
39
40
41 ______________________________________________________________________________
42 Soon
43
44   - serialization of parse tables
45
46   - "ambiguity modulo dropped fragments"?
47        - can this be checked statically?
48        - eliminated statically?
49
50   - substring parsing for better error messages
51
52   - Parameterized LR
53   - "Regular Right Part" grammars (NP Chapman, etc)
54   - Attribute unification
55
56   - inference of rejections for literals
57   - "prefer whitespace higher up" (?)
58
59   - Labeled edges on trees (associate a label with each slot in the
60     child array in Forest.Body?  might make equality tough) --
61     equivalent to Feature Structures.  Colon-labeling.
62
63 ______________________________________________________________________________
64 Later
65
66   - Partly-Linear-PATR? (O(n^6) unification grammar)
67
68   - Implement a k-token peek buffer (for each state, see if it "dead
69     ends" during the next k Phases based solely on state -- ignoring
70     result SPPF)
71
72   - Arrange for the SPPF corresponding to dropped subtrees to never be
73     generated (or merged, etc)
74
75   - Is there any way we can avoid creating a GSS.Node instance for
76     nodes which are transient in the sense that they have only one
77     eligible reduction?
78
79   - Re-read Rekers, particularly the stuff on optimal sharing
80
81   - Isolate the Element objects from Parse.Table/GSS so we can move
82     towards compilation.
83
84   - consider allowing a Forest.Body to represent some other Tree whose
85     Body's should be [recursively] considered part of this Forest.
86
87       - perhaps not: right now we have a nice situation where
88         Forest.Ref instances become immutable once iterator()ed.  This
89         also gives us a strong place to to culling with the certainty
90         that we won't throw out a Body which would later be salvaged
91         by some yet-to-be-added dependency.
92
93   - Figure out if there is a way to:
94
95       - allow unwrapping of children other than the very last one.
96
97       - fold repetitions into an array form in Forest, before
98         conversion to Tree.  The major problem here is that multiple
99         tree-arrays are possible, all of different lengths.  Worse,
100         even if they're all the same length, not all elements belong
101         in the same "possibility vector" as all others.  You
102         essentially need a GSS to represent the array, which perhaps
103         is what the unfolded form was in the first place.
104
105   - Wikipedia grammar (needs to be both lexerless and boolean)
106
107   - Boolean Parsing
108       => Ordered Choice (";" operator)
109
110   - bring back in parse-table phase resolution of precedence (just
111     like associativity).  This can be inferred from the use of ">"
112     when the rules are in one of these special forms:
113
114        E ::=  E     _
115            >  _     E
116
117        E ::=  _     E
118            >  E  _  E
119
120        E ::=  E  _  E
121            >  E  _  E
122
123     where "_" is anything and "E" is the defining nonterminal.
124     Essentially what we're looking for is the situation where the
125     leftmost portion of one rule produces another rule, and the
126     rightmost portion of the latter produces the former.
127
128     I'm not 100% certain that this is as "strong" as the prefer/avoid
129     form (try to prove this, you probably can), but it's "what people
130     intend" most of the time.
131
132   - implement Johnstone's algorithm for "reduced, resolved LR
133     tables" to eliminate superfluous reductions on
134     epsilon-transitions.
135
136 ______________________________________________________________________________
137 Neat Ideas
138
139   - Rekers & Koorn note that GLR Substring Parsing can be used to do
140     really elegant and generalized "autocompletion".
141
142
143 ______________________________________________________________________________
144 Ideas for the Future
145
146 - Incremental parse table construction
147 - "lazy GLR" and "lazy trees" -> language with first-class CF matching
148     - perhaps linear boolean grammars instead? (linear time, quad space)
149 - Forest parsing => chained parsers
150 - unification parsing, attributes, etc
151 - RRP grammars?
152 - Take another stab at maximal-match?  Nonterminal not-followed-by is
153   too strong.
154 - Error recovery based on substring parsing