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