7.6 KiB
7.6 KiB
v5.0.0
New Features
- Add Rust target language output.
API Changes
- The matched text argument passed to lexer user code blocks is now named
match_textfor every target language. It was previously namedmatchfor C, C++, and D, andmatch_for Rust. Any lexer user code block which references the matched text must be updated to use the new name. Thematch_lengthargument (C and C++) is unchanged. - Tree generation mode now stores all tree nodes in a compact arena owned by the parser context (a flat node array plus a shared child-link array). This replaces the previous design of one heap allocation per node with layout-punned typed structs.
- Tree nodes are now referenced by lightweight handles rather than pointers.
p_result()and the field accessors return handle values. - The whole tree is freed together with the context by
p_context_delete(). Thep_tree_delete()/p_tree_delete_XXX()functions have been removed; tree node handles are only valid while the context is alive. - Tree node field access changed per target language:
- C: per-field accessor functions (e.g.
p_Start_pItems(node)) plus tree walk macros (e.g.p_tree_walk_Start(node, pItems, pItem, pToken1, token)), and generic accessorsp_node_valid(),p_node_position(),p_node_end_position(),p_node_n_fields(),p_node_data(),p_node_id(). - C++: handle methods called with
()(e.g.node.pItems().pToken1().token()), plus the same C-style functions/macros for convenience. - D:
@propertyaccessors preserving the previous field-access syntax (e.g.node.pItems.pToken1.token); null checks use.validinstead ofis null.
- C: per-field accessor functions (e.g.
- Tree-mode parser rule user code:
$$and$1etc. now yield node handles. Reference child fields through the target-language accessors described above rather than through struct pointer members.
Improvements
- Improve D language detection in propane.vim
- Speed up specs
v4.8.1
Fixes
- Fix tree node struct type forward-declarations for C/C++
v4.8.0
New Features
- Add
p_parse_inner_XXX()APIs that accept a caller-provided set of follow tokens. These behave the same asp_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 withp_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
nolinegrammar statement to skip emitting#linedirectives - 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()andp_tree_delete()for D targets.
v4.0.0
New Features
- Add
context_user_fieldsstatement to allow custom context user fields. - Add
token_user_fieldsstatement to allow custom token user fields. - Add
on_token_nodestatement to allow custom code when constructing token nodes. - Add
free_token_nodestatement to allow custom code when freeing token nodes. - Add
p_context_delete(). - Allow
droppatterns to execute lexer user code blocks.
Breaking Changes
- Replace
p_context_init()withp_context_new()andp_context_delete(). - Renamed
p_free_tree()top_tree_delete(). - The
free_token_nodestatement 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_nodegrammar statement to reclaim user-allocated memory stored in a Token tree nodepvaluefield - Add valgrind memory leak tests to unit tests
- Fix build issues for C++ to officially support C++ target output
Improvements
- Document
p_lex()andp_token_info_tin user guide (#37)
Breaking Changes
- Rename AST generation mode to tree generation mode (see 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