-Ragel 6.0 - TBR
-===============
- -Remove the 'noend' write option from examples/atoi.rl. This example is
+Ragel 6.0 - Jan 12, 2008
+========================
+ -Removed the 'noend' write option from examples/atoi.rl. This example is
referenced a lot as a first example and as such it shouldn't contain a
special purpose write option like 'noend'.
-Introcuded the "eof" variable for indicating the end of file. The p variable
now used to emulate gotos.
-Ruby code generation was also restructured. Gotos are elmulated using a
series of if tests.
- -Gone back to 3.X semantics for >, % and error actions. The > operator also
+ -Went back to 3.X semantics for >, % and error actions. The > operator also
embeds a leaving action/priority into the start state if it is final. If EOF
- happens in a state with a leaving operator then leaving action it is
+ happens in a state with a leaving operator then the leaving action is
executed. If EOF happens in a non-final state that has an error action, the
error action is executed.
- -The Ragel program now executes frontend and backend processes separately,
+ -The "ragel" program now executes frontend and backend processes separately,
connecting them with a temporary file in the current directory. Without the
-x option the "ragel" program marshals arguments and calls the frontend and
backend. With the -x option the "ragel" program acts as the frontend only.
same name in case we are executing from the source tree.
-Changed the -l option in rlgen-cd to -L because it is covered in the
frontend. Added a passthrough in the frontend for the backend options.
- -Dot file generation can now be invoked using the -V option to the parent. We
+ -Dot file generation can now be invoked using the -V option to ragel. We
now require an input file. If standard in is used then we don't have a file
name on which to base the output.
-Able to build native windows executables using Cygwin+MinGW.
associated with explicit initialization statements. It is also much easier
on the java compiler which can run out of memory compiling very large
machines. The downside is that it takes slightly longer to initialize static
- data.
+ data at run time.
-The fbreak statement now advances p.
-In the :> :>> and <: operators it was possible for the priority assignment
to be bypassed via the zero length string. In :> this was fixed
If the start state is final it now embeds a leaving action into it,
preventing persistance through the zero length string. In :>> and <: this
was fixed explicitly. With <: the entering priority operator was used and
- with :> a sepecial exception was added. Since it uses the finishing
+ with :> a special exception was added. Since it uses the finishing
transition operator it also adds a leaving priority to the start state if it
is final.
-Ranlib is now run on the archives. Patch from Kenny MacDermid.
Semantics of > % and Error Actions
==================================
-Now that EOF actions are executed in the same context as regular actions we are
-free to go back to the 3.X semantics for >, % and error actions.
+Ragel has gone back to the 3.X semantics for >, % and error actions.
Those that have been using Ragel since the 3.X days will remember that the
entering operator > embedded a leaving action/priority into the start state
when it was final. The leaving operator % would embed EOF actions when the
final states stayed final all the way to the end of compilation. Also, error
-actions would embed EOF actions when at the end of compilation the states they
-were embedded into were not final.
+actions would embed EOF actions when at the end of compilation the states the
+error actions were embedded into were not final.
-These characteristics were removed because EOF actions were not executed in the
-same context as regular actions and easily resulted in compile errors. Now that
-all actions are executed in the same context this is no longer a problem and
-the original Ragel semantics is restored.
+The problem before was that EOF actions and regular actions were executed in
+different contexts ("write exec" and "write eof"), and a single action block
+could easily end up in two different functions. This could lead to compile
+errors and other subtle errors. Now that all actions are executed in the same
+context ("write exec") these problems go away. The original semantics has been
+restored.
Backend Automatically Executed
==============================
The "ragel" program now automatically executes the appropriate backend. If you
-need the intermediate XML format you can use the -x option. Your makefiles will
-need to be updated.
+need the intermediate XML format you can use the -x option.
The fbreak Statement
====================
the previous version of Ragel is was possible for the priority assignments to
be bypassed via the the zero length string. Running the following examples
through 5.25 you will see that the a and b actions are executed on a single
-transition, showing the guard fails. This happens because the the operators did
-not consider that the middle machine might have a start state that is final. In
-6.0 these cases have been fixed.
+transition, showing the guard fails. This happens because the operators did not
+consider that the middle machine might have a start state that is final. In 6.0
+these cases have been fixed.
(' '@a)* <: 'x'* . ' '@b;
(' '@a)* :> 'x'? . ' '@b;
To update your code simply search and replace:
tokstart => ts
tokend => te
+
+Options
+=======
+
+The -l option in rlgen-cd was changed to -L because -l is used in the frontend,
+which now must pass options through.