1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219
|
Kelbt 0.15 - Jan 22, 2012
=========================
-Eliminated type-punned pointer warnings GCC emits for generated code.
Kelbt 0.14 - Oct 1, 2009
========================
-Added the -I option for specifying directories to look in for included files.
-Added the location of the including file to the list of locations to search for
included files.
-Applied patch from David Keller: Hardcoded "Token" string should be Token().
-Fixed many of the test cases. Added missing includes and the <ParserName>_tk
prefix to _eof.
Kelbt 0.13 - Oct 6, 2008
========================
-The uses statement can now reference nonterminals before they are defined.
-Fixed a typo in an 'undefined type' error message.
-Fixed graphviz generation.
-Check rhs references for undo and final blocks, not just try blocks.
-Now tracking the number of reductions that an token causes.
-Use causeReduce counting to maintain a queue of un-translated tokens. When
pulling off the queue tokens are translated. When causeReduce drops to zero
during backtracking the token is put back onto the queue and un-translated.
This balances translation with un-translation.
-Fixed distclean target.
-Production names and language element names should be const char*.
-Updated scanner to Ragel 6.X.
-Now fixing the ordering timestamps after advancing reductions. When
transferring a reduction copy in the min time from the source transitions.
Also remove gaps. This does not affect parsing, but improves graphviz
output.
-Gave the eof token a better name: <parser_name>_tk_eof. Allows multiple
parsers in the same program and prevents clashes with "eof" which seems to
be common.
-Updated email address.
-Fixed const correctness problems.
Kelbt 0.12 - May 1, 2007
========================
-Don't emit empty switch blocks for trial, undo and final actions.
-Ignore write statements that are not at the root of the include stack.
-Added an option (-l) for turning off the writing of line directives.
-Improved error messages.
-A commit is now always a full commit of the stack. It induces any remaining
final actions and cleans up the stack. Motivation: it should be possible to
reliably control when final actions are executed. In the previous scheme
reliable control was not possible because if retries existed ahead of the
scoped commit then the number of retries would not drop to zero and the final
actions would not be executed. Further, no important practical uses for the
scoped commit have surfaced. That is, there are no examples of needing to
commit a production while preserving earlier alternatives. Therefore the added
complexity of the scoped commit feature is not justified.
-The malloc used by the final action execution/commit code has been eliminated
and replaced with a pointer mechanism.
-Added a class keyword for nonterminals and the token type. The keyword goes
directly in front of the nonterm/type/token name. Constructors and
destructors are invoked for nonterminal class types and the token type when
it is a class.
nonterm class Foo {};
type class Foo {};
token uses class MyToken;
-Added the "write finish" statement which invokes destructors for the items
still on the stack.
-Blocks of LangEls are now tracked and freed in the finish code.
-Kelbt now uses Ragel's import feature instead of repeating the definition of
tokens inside the section parser.
-The branch point printing function (-i) now prints dot sets to give you a
sense of where in the grammar the conflicts are.
-Added the shortest statement. This changes the default action ordering from
a longest-match strategy to a shortest-match strategy. To make this work
reliably the nonterminal which is to be made into a shortest match should be
wrapped in a fresh nonterminal which is then specified using the shortest
statement. This syntax will likely be improved in the future.
shortest lifted_list;
lifted_list: list;
list: list item;
list: ;
-Did some cleanup of the syntax highlighting. Removed junk left over from the
port of the ragel syntax file a long time ago.
-Fixed an missing variable initialization. This eliminates errors reported by
valgrind.
-Added an install target to the makefiles.
Kelbt 0.11 - Feb 12, 2007
=========================
-The commit and final block execution code now uses malloc to allocate an
array of pointers instead of using a variable-sized array on the stack,
which is not portable C.
-Applied more fixes to cxxprep from Gilles J. Seguin.
-Updated to the latest aapl.
Kelbt 0.10 - Jan 27, 2007
=========================
-Applied fixes to cxxprep from Gilles J. Seguin.
-Adopted Ragel's write statement style of generating code. The types of
statements are:
write instance_data; - the runtime data used by the parser.
write token_defs; - pound defines for the tokens.
write types; - data structures representing language elements.
write data; - static data used by the parser.
write init; - initialization code.
write exec; - the parse loop.
-The access statement was added. It can be used to specify where the instance
data is located. For example, inside a structure:
access parser->;
-Removed return statements from the exec loop. Errors and regular exits now
just drop out at the bottom of exec.
-The generated code has been made compatible with C.
-Added a C test.
-The generated data structures and static data elements now have their names
prefixed with the parser name.
-The "token uses" statement was added. This allows the user to change the
name of the data structure which contains token data. It defaults to
"Token".
token uses ParserToken;
-Implemented single-line parser specifications. This is useful mostly for
write statements.
-Fixes to line directive writing were made.
Kelbt 0.9 - Jan 22, 2007
========================
-Fix to initialization code: the sentinel at the top of the stack needs
to have its pointers initialized.
Kelbt 0.8 - Jan 16, 2007
========================
-Added a priority mechanism for tweaking control of the parser. Priorities
are associated with characters in productions and these take precedence over
the default ordered choice strategy. The ordered choice strategy is also an
'innermost' strategy where all the possibilities within a non-terminal take
precedence over any characters which follow the non-terminal. Priorities let
one override this in particular cases.
-Line directives are now generated for inline code blocks which are passed
through to the output file.
-Access to the non-terminal element and the right hand side elements of the
production being reduced now works properly in final actions.
Kelbt 0.7 - Dec 8, 2006
=======================
-Added a credits file.
-Kelbt no longer generates code which writes 'parse error' when parsing
fails. This can be done by the caller of parseLangEl after looking at the
return value.
-The scanner is now a class. It tracks the current line and guards against
passing tokens to the parser if no parser name has been given.
-Separated the parsing of the 'parser' and 'include' statements from the
scanner.
Kelbt 0.6 - Dec 2, 2006
=======================
-Replaced the Flex scanner with a Ragel scanner.
-Replaced the Bison parser with a Kelbt-0.5 parser. Kelbt is now
self-hosting. Error handling is now broken and must be added back.
-The code was cleaned up: a large amount of code left over from the initial
fork from Ragel was removed.
-Bug fix: when the retry point is at the root of the stack, meaning it is the
only real element, we cannot consult the transition that the sentinel
element below it took because that transition does not exist. There is no
state and no type associated with the sentinel. This case is now caught and
uses the start state directly.
Kelbt 0.5 - Nov 18, 2006
========================
-Fixed production-based commits which became broken when the state table
construction was improved in the previous version.
-The commit, execFinal and final functions were moved into the main
processing loop. The execFinal that was called in finish() is now called
from the main loop by setting a commit on the final shift of the eof
transition which completes the parse.
-The specified parser name is now used as the name of parser class when the
functions are generated.
-The startState variable was moved to the static table data section. The
mutable parser data is no longer static.
-The struct block was removed, as it is now depreciated.
-Can no longer compile test cases with -pedantic and -ansi due to variable
length arrays on stack.
Kelbt 0.4 - Oct 30, 2006
========================
-A considerable amount of code cleanup and was done. This includes removal of
unused code, simplification of data structures and rewrites of LR state
table construction functions. The unnecessary complexity was because kelbt
was derived from a version of a keller which supported right-regular
parsing. Along with the cleanup comes a speedup in LR table construction.
-An improvement was made to the ordering algorithm. When it's time to assign
an ordering to a reduction after recursing down a production, the old way
was to find the expand-to state of the production and assign an ordering to
any transition which had a reduction of the production. The problem here is
that it assumes that every transition that has the reduction can follow that
instance of the production. In reality this is not true. There may be some
transitions that have the reduction, but which come from a different
instance of the production. Now we make sure that we assign a time only to
reductions on characters which can follow the production instance. We do
this by computing the characters on the fly. This gives a more accurate
ordering.
Kelbt 0.3 - Aug 8, 2006
=======================
-Fixed a bug in LALR(1) state table construction which caused reductions
actions for some middle-recursive grammars to not be added. For example this
grammar fails to set a reduce of A-2 on the ')' character.
S: A;
S: B;
A: '(' A ')';
A: '(' 'x' ')';
B: '(' B ')';
B: '(' 'x' ')';
Kelbt 0.2 - Aug 1, 2006
=======================
-Fixed the rejection command: It now immediately shifts the nonterminal being
rejected before jumping to the parse error handling. Previously this
nonterminal would get lost and would muck things up.
-Added a test showing variable length list processing.
-The cxxprep example can use the aapl in the root kelbt package.
Kelbt 0.1 - Jun 26, 2006
========================
-Initial release.
|