Updated the header define wrapper since renaming.
[external/ragel.git] / TODO
diff --git a/TODO b/TODO
index c84cb27..85c5440 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,7 +1,35 @@
-Need a "write entry name;" feature.
+Guard against including a ragel file more than once (newsgroup).
 
-Conditional action blocks need to be explicitly ordered in the same way that
-actions are ordered.
+Line numbers in included files refer to the master file. This needs to be
+fixed -- from Manoj.
+
+Remove old action embedding and condition setting syntax.
+
+fbreak should advance the current char. Depreciate fbreak and add
+    fctl_break;
+    fctl_return <expr>;
+    fctl_goto <label>;
+This is needed for better support of pull scanners.
+
+Eliminate tokend, replace it with the marker variable and add ftokend/ftoklen.
+
+Add the accept action embedding operator: like eof but only for states that end
+up final. Add the combined pending/accept action. This becomes a good idea when
+eof action execution is moved into the main loop.
+
+Add a prefix operator which sets every state final.
+
+Minimization should remove a condition when the character allows both
+the positive and negative sense of the condition. This happens in:
+test_every_10_chars = ( ( c when test_len ) c{0,9} )**;
+In this example there is non-determinsm that is killed by the priorities, but
+since conditions are expanded before priorities are tested, many transitions
+end up with test_len || !test_len.
+
+Should be possible to include scanner definitions in another scanner.
+
+Need an "entry name;" feature, causing name to get written out with the other
+entry points in the data.
 
 Possibly bring back the old semantics of > in a new operator, or allow it to be
 defined somehow.
@@ -10,7 +38,6 @@ When priorities are embedded without a name, the name of the current machine is
 used. Perhaps a unique name for each instance of the current machine should be
 used instead. This idea could work well if applied to user-defined embeddings. 
 
-Verbose embeddings %eof a  to   $eof(a).
 User defined embeddings <-name(a1,a2,...).
 User defined operators expr1 <name> expr2.
 
@@ -18,24 +45,8 @@ Doesn't make make sense for [] to be the lambda (zero-length) machine. This
 should be the empty set (the empty machine). But then would it be invalid in a
 regular expression?
 
-Add an option (probably -L) for turning off line numbers for debugging the
-generated state machine.
-
-Expressions of the form: expr1 <: expr2 . expr3
-sometimes don't behave as expected. If expr2 contains the empty string then
-it's possible for the machine to escape to expr3. This is somewhat unexpected.
-The empty string does count as moving through the right machine so there should
-not be an exception for this case.
-Using the stronger implementation: ( expr1 $1 %0 . expr2 ) will solve the problem.
-
-Also, there is potential for nondeterminism to persist via the empty string
-with the :> and :>> operators. Should also guard against this using leaving
-priorities.
-
 The |> guarded operator and the <| guarded operator need to be added.
 
-The fixed size stack is a problem for manual recursion of unlimited depth.
-
 An option to turn off the removal of duplicate actions might be useful for
 analyzing unintentional nondeterminism.
 
@@ -43,14 +54,6 @@ Might be a good idea to add in some protection against using up all of a
 system's memory. This protection could then be removed by people when someone
 is sure they want to use a lot of memory.
 
-fbreak should advance the current char. Depreciate fbreak and add
-    fctl_break;
-    fctl_return <expr>;
-    fctl_goto <label>;
-
-Should the fbreak functions execute the to-state actions of the target state?
-
-It should be possible to import/export definitions.
 
 If a scanner can be optimized into a pure state machine, maybe permit it to be
 referenced as a machine definition. Alternately: inline scanners with an