- Fixed a bug in the tokenizer where it was accepting an extra character when accepting a string.
- Fixed bugs in the tokenizer -- now it correctly tokenizes some test strings using a combined DFA.
- Enabled combined DFA tests.
- Added some TODO comments.
- Implemented types for representing a context-free grammar (CFG).
- Implemented algorithms for computing the set of nullable nonterminals in the grammar and the FIRST and FOLLOW sets for each nonterminal.
- Created the Tables module to hold parser-table-generating code.
- Implemented some basic types which will be used when implementing parser tables.
- Implemented the 'closure' and 'goto' functions for LR(0) parsing.
- Implemented DU types which serve to add an additional, unique nonterminal representing the start symbol and an additional, unique terminal representing the end-of-file marker.
- Implemented a function, AugmentedGrammar.ofGrammar, which uses the new types to augment an existing grammar with the start symbol and end-of-file token.
- Implemented most of the code for LR(0) parser table generation.
- Modified the LR(0) parser-table-building function so it builds the parser table on-the-fly instead of computing values _then_ building the table.
- As of this commit, the LR(0) parser table seems to be created correctly for some small test grammars.
- Fixed a bug in the function for computing FOLLOW sets -- it was sometimes crashing because it tried to create a FOLLOW set for a terminal (token).
- Added some other grammars and tests for the table-generating functions.
- Moved some code out of the Lr0 module into the main module (Tables) so it can be reused by the SLR module.
- Copied the LR(0) table-creating functions into a new Slr module (for Simple LR) and modified the code to produce an SLR table.
- Renamed the 'Derivation' module to 'Predictive', since the FIRST and FOLLOW sets are related to predictive parsing; later, we can also implement some code to generate predictive parsing tables for recursive-descent parsers.
- Renamed Derivation.fs to Predictive.fs to correspond to the renaming of the module.
- Created unit test project for FSharpYacc.
- Moved impromptu test code from the Program module of FSharpYacc into the unit test project; however, the code has not (yet) been refashioned into unit tests.
- Moved AugmentedTerminal and AugmentedNonterminal types and AugmentedGrammar module into the Ast module.
- Created the Lr1 module and started implementing algorithm for creating LR(1) parsing tables.
- Implemented a function to determine if all symbols in some slice of a production are nullable; this function simplifies the conditions of some 'if'-statements in the functions for computing the FIRST and FOLLOW sets.
- Fixed a bug in function which computes the FOLLOW sets for the nonterminals of the grammar; it was sometimes returning incomplete results (i.e., the computed sets didn't contain invalid symbols, they just didn't contain all of the symbols they should).
- Added assembly-level attributes to FSharpLex and FSharpYacc, including the 'InternalsVisibleTo' attribute so the test projects can test internal functionality.
- Fixed the issues with FsUnit and NUnit which were causing the unit tests to fail when run in the NUnit GUI; FsUnit was referencing an old version of the NUnit assembly.
- Added some additional grammars to the FSharpYacc test project, and moved all of the grammars into a Grammars module so they can be reused for various tests.
- Implemented some unit tests based on the test grammars.
- Moved CommonAssemblyInfo to the top of the projects.