## Unreleased ### New Features - Add `p_parse_inner_XXX()` APIs that accept a caller-provided set of follow tokens. These behave the same as `p_parse_XXX()` by parsing starting at the given start rule, but instead of expecting the rest of the input to match the start rule they allow specifying a set of tokens that may follow the start rule. - Add `p_set_position()` API to set the current text position stored in the context. Useful for setting the initial text position to something other than `(1, 1)` for a nested parse operation. - Add `p_input_index()` API to get the current input text byte offset. - Add `p_set_input_index()` API to set the current input text byte offset. Useful together with `p_set_position()` to rewind the input part-way through a parse in order to re-read an earlier section of the input. ## v4.7.0 ### New Features - Support parser rule user code blocks in tree generation mode. ### Fixes - propane.vim: do not highlight rule components as propane keywords ## v4.6.0 ### New Features - Add lexer user code API to access matched input text positions - Track rule component text positions and add parser user code API to access ### Fixes - Fixed a few user guide and source comments related to text input positions ## v4.5.0 ### New Features - Add `noline` grammar statement to skip emitting `#line` directives - Attempt to autodetect target language (D/C++) in extra/vim/syntax/propane.vim ### Fixes - Fix #line reset directives - Update keyword list in extra/vim/syntax/propane.vim - Fix propane.vim keyword detection ## v4.4.0 ### New Features - Add p_value_get() / p_value_get_XXX() accessors ## v4.3.0 ### New Features - Use #line for user code blocks to report input grammar position for errors. ## v4.2.0 ### New Features - Add support for a custom lex function. ## v4.1.0 ### New Features - Add `p_context_delete()` and `p_tree_delete()` for D targets. ## v4.0.0 ### New Features - Add `context_user_fields` statement to allow custom context user fields. - Add `token_user_fields` statement to allow custom token user fields. - Add `on_token_node` statement to allow custom code when constructing token nodes. - Add `free_token_node` statement to allow custom code when freeing token nodes. - Add `p_context_delete()`. - Allow `drop` patterns to execute lexer user code blocks. ### Breaking Changes - Replace `p_context_init()` with `p_context_new()` and `p_context_delete()`. - Renamed `p_free_tree()` to `p_tree_delete()`. - The `free_token_node` statement now takes a user code block instead of a function name parameter. ## v3.0.0 ### New Features - Add support for multiple starting rules (#38) - Add `p_free_tree()` functions to reclaim generated tree memory - Add `free_token_node` grammar statement to reclaim user-allocated memory stored in a Token tree node `pvalue` field - Add valgrind memory leak tests to unit tests - Fix build issues for C++ to officially support C++ target output ### Improvements - Document `p_lex()` and `p_token_info_t` in user guide (#37) ### Breaking Changes - Rename AST generation mode to tree generation mode (see [UPGRADING.md](UPGRADING.md)) ## v2.3.0 ### New Features - Add \D, \S, \w, \W special character classes ### Improvements - Include line numbers for pattern errors - Improve performance in a few places - Parallelize parser table generation on Linux hosts - Add github workflow to run unit tests ### Fixes - Fix a couple clang warnings for C backend - Fix C backend not fully initializing pvalues when multiple ptypes are used with different sizes. - Fix some user guide examples ## v2.2.1 ### Fixes - Fix GC issue for D backend when AST is enabled (#36) ## v2.2.0 ### Improvements - Allow multiple lexer modes to be specified for a lexer pattern (#35) - Document p_decode_code_point() API function (#34) ## v2.1.1 ### Fixes - Field aliases for AST node fields could alias incorrect field when multiple rule alternatives present for one rule set (#33) ## v2.1.0 ### Improvements - Report rule name and line number for conflicting AST node field positions errors (#32) ## v2.0.0 ### Improvements - Log conflicting rules on reduce/reduce conflict (#31) - Use 1-based row and column values for position values (#30) ### Fixes - Fix named optional rules (#29) ### Upgrading - Adjust all uses of p_position_t row and col values to expect 1-based instead of 0-based values. ## v1.5.1 ### Improvements - Improve performance (#28) ## v1.5.0 ### New Features - Track start and end text positions for tokens and rules in AST node structures (#27) - Add warnings for shift/reduce conflicts to log file (#25) - Add -w command line switch to treat warnings as errors and output to stderr (#26) - Add rule field aliases (#24) ### Improvements - Show line numbers of rules on conflict (#23) ## v1.4.0 ### New Features - Allow user to specify AST node name prefix or suffix - Allow specifying the start rule name - Allow rule terms to be marked as optional ### Improvements - Give a better error message when a referenced ptype has not been declared ## v1.3.0 ### New Features - Add AST generation (#22) ## v1.2.0 ### New Features - Allow one line user code blocks (#21) - Add backslash escape codes (#19) - Add API to access unexpected token found (#18) - Add token_names API (#17) - Add D example to user guide for p_context_init() (#16) - Allow user termination from lexer code blocks (#15) ### Fixes - Fix generator hang when state transition cycle is present (#20) ## v1.1.0 ### New Features - Add user parser terminations (#13) - Document generated parser API in user guide (#14) ## v1.0.0 - Initial release