A c++17
recursive-descent parser library that:
- provides an easy EBNF-like syntax for writing grammars.
- allows any type of STL-like container or STL-like stream to be used as input.
- allows case-insensitive parsing.
- allows for multiple errors per parse (error recovery).
- allows for parsing left-recursive grammars.
Version 1.0.0.7.
-
1.0.0.7
- Rewritten from scratch, to improve quality of the API.
-
1.0.0.6
- Added function-based parsing.
-
1.0.0.5
- Added custom match functions in order to allow the resolution of ambiguities while parsing.
- allowed terminal values to be of different type that the value of the source container, in order to allow the result of a parse (the ast nodes created by a parse) to be fed to another parse function.
- added terminal parsing via functions.
- added parsing via standalone functions.
- added multiple error handling.
-
1.0.0.4
- Rewrote the library:
- all parser grammar classes are now inside a single template class
class parser_engine<SourceT, MatchIdT>
, for the following reasons:- compiler performance (MSVC 32-bit regularly crashed with out of memory error from the many template instantiations of previous versions).
- library code organization; writing a grammar usually requires including all the grammar constructs, so it is reduntant to have separate files for each grammar-related class.
- user code organization; whole grammars need to be specialized on source type.
- coding style is closer to the standard: all identifiers are lower case, words are separated by underscores, idiomatic c++ is used whenever possible.
- all parser grammar classes are now inside a single template class
- Rewrote the documentation, due to more functionality to be added in the future.
- Rewrote the library:
-
1.0.0.3
- Reorganized the library in order to support compiler front ends into a separate namespace. The main library is now in
namespace parserlib::core
. - Added
namespace parserlib::cfe
which now contains the compiler-front-end functionality. - separated tokenization and parsing phases for compiler-front-ends.
- Added relevant documentation and unit tests.
- Reorganized the library in order to support compiler front ends into a separate namespace. The main library is now in
-
1.0.0.2
-
Rewrote the library from scratch in order to provide a better interface. Changes:
- All the getter methods now start with 'get', in order to play better with Intellisense.
- The
ParseContext
class is now configured over the Source type, with the default class being the classSourceString
. - The class
SourceString
provides custom iterator which counts lines and columns, compatible with thestd::string
interface. - The functions
terminal
,terminalSet
,terminalRange
are changed toterm
,oneOf
,oneIn
. - Matches are now only hierarchical (as in
operator >=
of previous version). - The
'operator >=
has been replaced withoperator ->*
, which is much more distinct than the former; no more typing accidentally '>>' where>=
was intended. - The default match id type is no longer a string; it is an int.
- Simplified the left recursion parsing implementation.
-
-
1.0.0.1
- Added support for compiler front-end construction.
-
1.0.0.0
- Initial release.
TODO list in the current version:
- document code.
- complete the library documentation.
- provide API for counting lines and columns for character parsers.
- provide translation of matches to AST nodes.