Added an item.
[external/ragel.git] / TODO
1 Should be possible to turn off line numbers for debugging purposes (from a
2 user).
3
4 Expressions of the form: expr1 <: expr2 . expr3
5 sometimes don't behave as expected. If expr2 contains the empty string then
6 it's possible for the machine to escape to expr3. This is somewhat unexpected.
7 The empty string does count as moving through the right machine so there should
8 not be an exception for this case.
9 Using the stronger implementation: ( expr1 $1 %0 . expr2 ) will solve the problem.
10
11 Also, there is potential for nondeterminism to persist via the empty string
12 with the :> and :>> operators. Should also guard against this using leaving
13 priorities.
14
15 The |> guarded operator and the <| guarded operator need to be added.
16
17 The fixed size stack is a problem for manual recursion of unlimited depth.
18
19 An option to turn off the removal of duplicate actions might be useful for
20 analyzing unintentional nondeterminism.
21
22 To avoid confusion, there should be a correspondence between state numbers in
23 the generated code, graphviz and the XML.
24
25 Might be a good idea to add in some protection against using up all of a
26 system's memory. This protection could then be removed by people when someone
27 is sure they want to use a lot of memory.
28
29 fbreak should advance the current char. Depreciate fbreak and add
30     fctl_break;
31     fctl_return <expr>;
32     fctl_goto <label>;
33
34 It should be possible to import/export definitions.
35
36 If a scanner can be optimized into a pure state machine, maybe permit it to be
37 referenced as a machine definition. Alternately: inline scanners with an
38 explicit exit pattern.
39
40 The split codegen needs a profiler connected to a graph partitioning algorithm.
41
42 Die a graceful death when rlcodegen -F receives large alphabets.
43
44 It's not currently possible to have more than one machine in a single function
45 because of label conflicts. Labels should have a unique prefix.
46
47 Emit a warning when a subtraction has no effect.
48
49 Emit a warning when unnamed priorities are used in longest match machines.
50 These priorities may unexpectedly interact across longest-match items. Changing
51 the language such that unwated interaction cannot happen would require naming
52 longest-match items.
53
54 Testing facilities: Quick easy way to query which strings are accepted.
55 Enumerate all accepted strings. From Nicholas Maxwell Lester.
56
57 Add more examples, add more tests and write more documentation.
58
59 A debugger would be nice. Ragel could emit a special debug version that
60 prompted for debug commands that allowed the user to step through the machine
61 and get details about where they are in their RL.
62
63 A quick and easy alternative would be a trace code generation option. This
64 would open a trace file and list all the active machines at each step of the
65 input.
66
67 Frontend should allow the redefinition of fsm section delimiters.
68
69 Do more to obscure ragel's private variables. Just a leading underscore is not
70 enough. Maybe something more like __ri__.
71
72 Some talk about capturing data:
73
74 Separate tokstart/tokend from the backtracking.  One var for preservation,
75 called preserve.  Write delcarations;  produces the necessary variables used by
76 ragel.  Move pattern start pattern end concepts into the general?  The
77 variables which may need to influence the preserve is dependent on the state.
78 States have a concept of which variables are in use.  Can be used for length
79 restrictions.  If there is an exit pattern, it is the explicit way out,
80 otherwise the start state and all final states are a way out.