|
Packit |
d0b620 |
# Changelog
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 2.7.0
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Released 2018-07-31
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Added [`mmap_file<>`](Inputs-and-Parsing.md#file-input) support for Windows.
|
|
Packit |
d0b620 |
* Added [deduction guides](https://en.cppreference.com/w/cpp/language/class_template_argument_deduction) for the input classes when compiling with C++17.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 2.6.1
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Released 2018-07-22
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Fixed endianness detection in test program.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 2.6.0
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Released 2018-06-22
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Added [Conan](https://conan.io/) [packages](https://bintray.com/taocpp/public-conan/pegtl%3Ataocpp/).
|
|
Packit |
d0b620 |
* Fixed the UTF-8 decoder to no longer accept UTF-16 surrogates.
|
|
Packit |
d0b620 |
* Fixed the UTF-16 decoder to no longer accept UTF-16 unmatched surrogates.
|
|
Packit |
d0b620 |
* Fixed the UTF-32 "decoder" to no longer accept UTF-16 surrogates.
|
|
Packit |
d0b620 |
* Fixed `pegtl/contrib/unescape.hh` to no longer accept unmatched surrogates.
|
|
Packit |
d0b620 |
* Optimised convenience rule [`two`](Rule-Reference.md#two-c-).
|
|
Packit |
d0b620 |
* Added new convenience rule [`three`](Rule-Reference.md#three-c-).
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 2.5.2
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Released 2018-05-31
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Fixed [`opt`](Rule-Reference.md#opt-r-) and [`until`](Rule-Reference.md#until-r-s-) to work as documented in some rare edge cases.
|
|
Packit |
d0b620 |
* Used [`opt_must`](Rule-Reference.md#opt_must-r-s-) and [`star_must`](Rule-Reference.md#star_must-r-s-) to optimise some included grammars.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 2.5.1
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Released 2018-05-14
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Added new convenience rule [`opt_must`](Rule-Reference.md#opt_must-r-s-).
|
|
Packit |
d0b620 |
* Optimised convenience rule [`if_must`](Rule-Reference.md#if_must-r-s-).
|
|
Packit |
d0b620 |
* Fixed examples to compile with Visual Studio and MinGW.
|
|
Packit |
d0b620 |
* Added [automated testing](https://travis-ci.org/taocpp/PEGTL) with GCC 8.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 2.5.0
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Released 2018-05-01
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Added rules to match Unicode properties via [ICU](http://site.icu-project.org) to contrib.
|
|
Packit |
d0b620 |
* Improved the [Parse Tree / AST interface](Parse-Tree.md).
|
|
Packit |
d0b620 |
* Fixed parse tree node generation to correctly remove intermediate nodes.
|
|
Packit |
d0b620 |
* Added big- and little-endian support to the UTF-16 and UTF-32 rules.
|
|
Packit |
d0b620 |
* Added rules for UINT-8 and big- and little-endian UINT-16, UINT-32 and UINT-64.
|
|
Packit |
d0b620 |
* Added function to `memory_input<>` to obtain the line around a position.
|
|
Packit |
d0b620 |
* Added function to `memory_input<>` to start again from the beginning.
|
|
Packit |
d0b620 |
* Added example for Python-style indentation-aware grammars.
|
|
Packit |
d0b620 |
* Added examples for regular, context-free, and context-sensitive grammars.
|
|
Packit |
d0b620 |
* Added example for how to parse with a symbol table.
|
|
Packit |
d0b620 |
* Added [automated testing](https://travis-ci.org/taocpp/PEGTL) with Clang 6.
|
|
Packit |
d0b620 |
* Added [automated testing](https://travis-ci.org/taocpp/PEGTL) with Clang's `-fms-extensions`.
|
|
Packit |
d0b620 |
* Fixed build with Clang when `-fms-extensions` is used (`clang-cl`).
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 2.4.0
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Released 2018-02-17
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Improved and documented the [Parse Tree / AST support](Parse-Tree.md).
|
|
Packit |
d0b620 |
* Changed prefix of all macros from `TAOCPP_PEGTL_` to `TAO_PEGTL_`. Compatibility macros with the old names are provided, they will be removed in version 3.0.
|
|
Packit |
d0b620 |
* Added a deleted overload to prevent creating a `memory_input<>` from a temporary `std::string`.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 2.3.4
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Released 2018-02-08
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Fixed build on older systems where `O_CLOEXEC` is not available.
|
|
Packit |
d0b620 |
* Added [automated testing](https://travis-ci.org/taocpp/PEGTL) with Android 6.0 and 7.0.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 2.3.3
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Released 2018-01-01
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Added more `noexcept`-specifications.
|
|
Packit |
d0b620 |
* Fixed most `clang-tidy`-issues.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 2.3.2
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Released 2017-12-16
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Worked around a Visual Studio 15.5 bug.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 2.3.1
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Released 2017-12-14
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Fixed linkage of `tao::pegtl::internal::file_open`.
|
|
Packit |
d0b620 |
* Improved error message for missing `source` parameter of `string_input<>`.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 2.3.0
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Released 2017-12-11
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Added constructor to `read_input<>` that accepts a `FILE*`, see issue [#78](https://github.com/taocpp/PEGTL/issues/78).
|
|
Packit |
d0b620 |
* Enhanced [`apply`](Rule-Reference.md#apply-a-), [`apply0`](Rule-Reference.md#apply0-a-) and [`if_apply`](Rule-Reference.md#if_apply-r-a-) to support `apply()`/`apply0()`-methods returning boolean values.
|
|
Packit |
d0b620 |
* Simplified implementation of [`raw_string`](Contrib-and-Examples.md#taopegtlcontribraw_stringhpp), the optional `Contents...` rules' `apply()`/`apply0()`-methods are now called with the original states.
|
|
Packit |
d0b620 |
* Fixed the tracer to work with `apply()`/`apply0()`-methods returning boolean values. (Thanks Joel Frederico)
|
|
Packit |
d0b620 |
* Fixed, simplified and improved [`examples/parse_tree.cpp`](Contrib-and-Examples.md#srcexamplepegtlparse_treecpp).
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 2.2.2
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Released 2017-11-22
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Bumped version.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 2.2.1
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Released 2017-11-22
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Celebrating the PEGTL's 10th anniversary!
|
|
Packit |
d0b620 |
* Fixed missing call to the [control class'](Control-and-Debug.md#control-functions) `failure()`-method when a rule with an `apply()`-method with a boolean return type fails.
|
|
Packit |
d0b620 |
* Fixed string handling in [`examples/abnf2pegtl.cc`](Contrib-and-Examples.md#srcexamplepegtlabnf2pegtlcpp).
|
|
Packit |
d0b620 |
* Simplified/improved Android build.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 2.2.0
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Released 2017-09-24
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Added possibility for actions' `apply()`- or `apply0()`-methods to return a `bool` which is then used to determine overall success or failure of the rule to which such an action was attached.
|
|
Packit |
d0b620 |
* Added [`<tao/pegtl/contrib/parse_tree.hpp>`](Contrib-and-Examples.md#taopegtlcontribparse_treehpp) and the [`examples/parse_tree.cpp`](Contrib-and-Examples.md#srcexamplepegtlparse_treecpp) application that shows how to build a [parse tree](https://en.wikipedia.org/wiki/Parse_tree). The example goes beyond a traditional parse tree and demonstrates how to select which nodes to include in the parse tree and how to transform the nodes into an [AST](https://en.wikipedia.org/wiki/Abstract_syntax_tree)-like structure.
|
|
Packit |
d0b620 |
* Added `bom` rules for UTF-8, UTF-16 and UTF-32.
|
|
Packit |
d0b620 |
* Added some missing includes for `config.hpp`.
|
|
Packit |
d0b620 |
* Added [automated testing](https://travis-ci.org/taocpp/PEGTL) with Clang 5.
|
|
Packit |
d0b620 |
* Added [automated testing](https://travis-ci.org/taocpp/PEGTL) with Xcode 9.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 2.1.4
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Released 2017-06-27
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Fixed shadow warning.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 2.1.3
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Released 2017-06-27
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Fixed [`raw_string`](Contrib-and-Examples.md#taopegtlcontribraw_stringhpp) with optional parameters.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 2.1.2
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Released 2017-06-25
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Bumped version.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 2.1.1
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Released 2017-06-25
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Fixed build with MinGW on Windows.
|
|
Packit |
d0b620 |
* Added [automated testing](https://ci.appveyor.com/project/taocpp/PEGTL) with MinGW.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 2.1.0
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Released 2017-06-23
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Added optional template parameters to [`raw_string`](Contrib-and-Examples.md#taopegtlcontribraw_stringhpp) for rules that the content must match.
|
|
Packit |
d0b620 |
* Added new contrib rules [`rep_one_min_max`](Contrib-and-Examples.md#taopegtlcontribrep_one_min_maxhpp) and `ellipsis`.
|
|
Packit |
d0b620 |
* Fixed broken [`TAOCPP_PEGTL_KEYWORD`](Rule-Reference.md#tao_pegtl_keyword--) macro.
|
|
Packit |
d0b620 |
* Fixed a bug in the contrib HTTP grammar which prevented it from parsing status lines in some cases.
|
|
Packit |
d0b620 |
* Fixed build with MinGW-w64 on Windows.
|
|
Packit |
d0b620 |
* Added [automated testing](https://ci.appveyor.com/project/taocpp/PEGTL) with MinGW-w64.
|
|
Packit |
d0b620 |
* Added [automated testing](https://travis-ci.org/taocpp/PEGTL) with GCC 7.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 2.0.0
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Released 2017-05-18
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Project
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Migrated to ["The Art of C++"](https://github.com/taocpp).
|
|
Packit |
d0b620 |
* A [**migration guide**](Migration-Guide.md#from-1y-to-2z) for porting applications from 1.y to 2.z is available.
|
|
Packit |
d0b620 |
* Version 2.z can be installed and used in parallel to version 1.y of the PEGTL.
|
|
Packit |
d0b620 |
* The semantics of all parsing rules and grammars is the same as for versions 1.y.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Input Layer
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Added support for custom [incremental input](Inputs-and-Parsing.md#incremental-input) readers.
|
|
Packit |
d0b620 |
* Added support for parsing [C streams](Inputs-and-Parsing.md#stream-inputs), i.e. `std::FILE*`.
|
|
Packit |
d0b620 |
* Added support for parsing [C++ streams](Inputs-and-Parsing.md#stream-inputs), i.e. `std::istream`.
|
|
Packit |
d0b620 |
* Added support for different [EOL-styles](Inputs-and-Parsing.md#line-ending).
|
|
Packit |
d0b620 |
* Renamed class `position_info` to `position`.
|
|
Packit |
d0b620 |
* Added the byte position to input classes and `position`.
|
|
Packit |
d0b620 |
* Added [fast parsing without line counting](Inputs-and-Parsing.md#tracking-mode) (except in errors).
|
|
Packit |
d0b620 |
* Refactored the `input` class into multiple input classes.
|
|
Packit |
d0b620 |
* Refactored the file parser classes into [input classes](Inputs-and-Parsing.md#file-input).
|
|
Packit |
d0b620 |
* Refactored the handling of [nested parsing](Inputs-and-Parsing.md#nested-parsing).
|
|
Packit |
d0b620 |
* Removed the `begin()` member from class `position`.
|
|
Packit |
d0b620 |
* Removed most [parsing front-end functions](Inputs-and-Parsing.md#parse-function).
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Parsing Rules
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Added combinator class [`minus`](Rule-Reference.md#minus-m-s-).
|
|
Packit |
d0b620 |
* Added ASCII rule class [`keyword`](Rule-Reference.md#keyword-c--).
|
|
Packit |
d0b620 |
* Added [`string`](Rule-Reference.md#string-c--1) rules for UTF-8, UTF-16 and UTF-32.
|
|
Packit |
d0b620 |
* Added [`apply`](Rule-Reference.md#apply-a-), [`apply0`](Rule-Reference.md#apply0-a-) and [`if_apply`](Rule-Reference.md#if_apply-r-a-) rules for intrusive actions.
|
|
Packit |
d0b620 |
* Added incremental input support rules [`discard`](Rule-Reference.md#discard) and [`require`](Rule-Reference.md#require-num-).
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* String Macros
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Renamed to [`TAOCPP_PEGTL_(I)STRING`](Rule-Reference.md#tao_pegtl_istring--).
|
|
Packit |
d0b620 |
* Increased allowed string length to 512.
|
|
Packit |
d0b620 |
* Allowed embedded null bytes.
|
|
Packit |
d0b620 |
* Reduced template instantiation depth.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Other Changes
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Added `apply()` and `apply0()` methods to [control class](Control-and-Debug.md#control-functions).
|
|
Packit |
d0b620 |
* Optimised superfluous input markers.
|
|
Packit |
d0b620 |
* Allowed optimisation of [actions that do not need the input](Actions-and-States.md#apply0).
|
|
Packit |
d0b620 |
* Replaced layered matching with superior Duseltronikâ„¢.
|
|
Packit |
d0b620 |
* Reduced template instantiation depth.
|
|
Packit |
d0b620 |
* Added support for [CMake](https://cmake.org/).
|
|
Packit |
d0b620 |
* Added [automated testing](https://ci.appveyor.com/project/taocpp/PEGTL) with Visual Studio 2015 and 2017.
|
|
Packit |
d0b620 |
* Added automated testing with Android 5.1, NDK r10e.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 1.3.1
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Released 2016-04-06
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Fixed unit test to use `eol` instead of hard-coded line ending.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 1.3.0
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Released 2016-04-06
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Tentative Android compatibility.
|
|
Packit |
d0b620 |
* Fixed build with MinGW on Windows.
|
|
Packit |
d0b620 |
* Changed file reader to open files in binary mode.
|
|
Packit |
d0b620 |
* Changed `eol` and `eolf` to accept both Unix and MS-DOS line endings.
|
|
Packit |
d0b620 |
* Optimised bumping the input forward and removed little used bump function.
|
|
Packit |
d0b620 |
* Simplified grammar analysis algorithm (and more `analyze()` tests).
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 1.2.2
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Released 2015-11-12
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Improved the JSON grammar and JSON string escaping.
|
|
Packit |
d0b620 |
* Added JSON test suite from http://json.org/JSON_checker/.
|
|
Packit |
d0b620 |
* Optimised bumping the input forward and string unescaping.
|
|
Packit |
d0b620 |
* Promoted `examples/json_changes.hh` to `pegtl/contrib/changes.hh`.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 1.2.1
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Released 2015-09-21
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Added `file_parser` as alias for `mmap_parser` or `read_parser` depending on availability of the former.
|
|
Packit |
d0b620 |
* Added Clang 3.7 to the automated tests.
|
|
Packit |
d0b620 |
* Added Mac OS X with Xcode 6 and Xcode 7 to the automated tests.
|
|
Packit |
d0b620 |
* Added coverage test and improved test coverage to 100%.
|
|
Packit |
d0b620 |
* Fixed state changing bug in `json_build_one` example.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 1.2.0
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Released 2015-08-23
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Added [`pegtl_string_t`](Rule-Reference.md#tao_pegtl_string--) and [`pegtl_istring_t`](Rule-Reference.md#tao_pegtl_istring--) to simplify string definitions as follows:
|
|
Packit |
d0b620 |
```c++
|
|
Packit |
d0b620 |
pegtl::string< 'h', 'e', 'l', 'l', 'o' > // Normal
|
|
Packit |
d0b620 |
pegtl_string_t( "hello" ) // New shortcut
|
|
Packit |
d0b620 |
```
|
|
Packit |
d0b620 |
* Added [`examples/abnf2pegtl.cc`](Contrib-and-Examples.md#srcexamplepegtlabnf2pegtlcpp) application that converts grammars based on [ABNF (RFC 5234)](https://tools.ietf.org/html/rfc5234) into a PEGTL C++ grammar.
|
|
Packit |
d0b620 |
* Added [`contrib/alphabet.hh`](Contrib-and-Examples.md#taopegtlcontribalphabethpp) with integer constants for alphabetic ASCII letters.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 1.1.0
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Released 2015-07-31
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Renamed namespace `pegtl::ucs4` to `pegtl::utf32` and generally adopted UTF-32 in all naming.
|
|
Packit |
d0b620 |
* Added experimental support for UTF-16 similar to the previously existing UTF-32 parsing rules.
|
|
Packit |
d0b620 |
* Added support for merging escaped UTF-16 surrogate pairs to `pegtl/contrib/unescape.hh`.
|
|
Packit |
d0b620 |
* Fixed incorrect handling of escaped UTF-16 surrogate pairs in the JSON examples.
|
|
Packit |
d0b620 |
* A [state](Rule-Reference.md#state-s-r-)'s `S::success()`-method can now have an extended signature to get access to the current `apply_mode`, *action*- and *control* class (template).
|
|
Packit |
d0b620 |
* The `contrib/raw_string` class template now calls `Action<raw_string<...>::content>::apply()` with the user's state(s).
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 1.0.0
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Released 2015-03-29
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Version 1.0.0 was a very large refactoring based on the previous years of experience.
|
|
Packit |
d0b620 |
The core design and approach were kept, but nearly all details of the implementation were changed, and some parts were added to, or removed from, the library.
|
|
Packit |
d0b620 |
Semantic versioning was introduced with version 1.0.0.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Deprecated old site on Google code and published new version on GitHub.
|
|
Packit |
d0b620 |
* Removed the semi-automatic pretty-printing of grammar rules; now the class names are used, when possible demangled.
|
|
Packit |
d0b620 |
* Renamed rule classes with multiple words in their names to use underscores, e.g. `ifmust<>` is now `if_must<>`.
|
|
Packit |
d0b620 |
* Removed support for incremental/stream parsing to allow for some simplifications and optimisations (*reintroduced in 2.0.0*).
|
|
Packit |
d0b620 |
* Removed the rules `apply<>` and `if_apply<>` that were used to directly call actions from within the grammar (*reintroduced in 2.0.0*), and:
|
|
Packit |
d0b620 |
* Where the other method of attaching actions to rules in PEGTL 0.x required specialisation of a given class template `action<>`, in PEGTL 1.y the action class template can be chosen by the user and changed at any point in the grammar.
|
|
Packit |
d0b620 |
* As a side-effect there is a much cleaner way of enabling and disabling actions in a portion of the grammar.
|
|
Packit |
d0b620 |
* Actions now have access to the current position in the input, i.e. to the filename, and line and column number.
|
|
Packit |
d0b620 |
* Actions now receive a pointer to, and the size of, the matched portion of the input (previously a `std::string` with a copy of the matched data), therefore:
|
|
Packit |
d0b620 |
* ~~There is no distinction between actions that require access to the matched data and those that don't, furthermore~~:
|
|
Packit |
d0b620 |
* The object via which actions gain access to the matched data is similar to that which rules receive ~~so actions can easily invoke another grammar on the matched data.~~
|
|
Packit |
d0b620 |
* The `at<>` and `not_at<>` rules now call their subordinate rules with actions disabled.
|
|
Packit |
d0b620 |
* The variadic `states...` arguments that are passed through all rule invocations for use by the actions are *not* forwarded with `std::forward<>` anymore since it (usually) doesn't make much sense to move them, and accidentially moving multiple times was a possible error scenario.
|
|
Packit |
d0b620 |
* There are now five different `rep` rules for repeating a sequence of rules with more control over the acceptable or required number of repetitions.
|
|
Packit |
d0b620 |
* There are new rules `try_catch<>` and `try_catch_type<>` that convert global errors, i.e. exceptions, into local errors, i.e. a return value of `false`.
|
|
Packit |
d0b620 |
* Unified concept for actions and debug hooks, i.e. just like the actions are called from a class template that is passed into the top-level `parse()`-function, there is another class template that is called for debug/trace and error throwing purposes; both can be changed at any point within the grammar.
|
|
Packit |
d0b620 |
* A large under-the-hood reorganisation has the benefit of preventing actions from being invoked on rules that are implementation details of other rules, e.g. the `pad< Rule, Padding >` rule contains `star< Padding >` in its implementation, so a specialisation of the action-class-template for `star< Padding >` would be called within `pad<>`, even though the `star< Pad >` was not explicitly written by the user; in PEGTL 1.y these unintended action invocations no longer occur.
|
|
Packit |
d0b620 |
* Partial support for Unicode has been added in the form of some basic rules like `one<>` and `range<>` also being supplied in a UTF-8 (and experimental UTF-16 and UTF-32) aware version(s) that can correctly process arbitrary code points from `0` to `0x10ffff`.
|
|
Packit |
d0b620 |
* The supplied input classes work together with the supplied exception throwing to support better error locations when performing nested file parsing, i.e. a `parse_error` contains a vector of parse positions.
|
|
Packit |
d0b620 |
* Added a function to analyse a grammar for the presence of infinite loops, i.e. cycles in the rules that do not (necessarily) consume any input like left recursion.
|
|
Packit |
d0b620 |
* As actions are applied to a grammar in a non-invasive way, several common grammars were added to the PEGTL as documented in [Contrib and Examples](Contrib-and-Examples.md).
|
|
Packit |
d0b620 |
* The `list<>`-rule was replaced by a set of new list rules with different padding semantics.
|
|
Packit |
d0b620 |
* The `at_one<>` and other rules `foo` that are merely shortcuts for `at< foo >` were removed.
|
|
Packit |
d0b620 |
* The `if_then<>` rule was removed.
|
|
Packit |
d0b620 |
* The `error_mode` flag was removed.
|
|
Packit |
d0b620 |
* The semantics of the `must<>` rules was changed to convert local failure to global failure only for the immediate sub-rules of a `must<>` rule.
|
|
Packit |
d0b620 |
* The `parse` methods now return a `bool` and can also produce local failures. To obtain the previous behaviour of success-or-global-failure, the top-level grammar rule has to be wrapped in a `must<>`.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 0.32
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Released 2012-12
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Removed superfluous includes (issue 5 from Google code hosting).
|
|
Packit |
d0b620 |
* Fixed bug in `not_at` rule regarding wrong propagation of errors (issue 3 from Google code hosting).
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 0.31
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Released 2011-02
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Fixed bug in `not_at` rule regarding wrong propagation of errors (issue 3 from Google code hosting).
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 0.30
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Fixed missing template arguments in the implementation of `smart_parse_string()`.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 0.29
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Fixed broken convenience rules `space_until_eof` and `blank_until_eol`.
|
|
Packit |
d0b620 |
* Extended the included examples that show how to build parse trees etc.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 0.28
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Optimised object file footprint of class `printer` and some related functions.
|
|
Packit |
d0b620 |
* Renamed class `rule_helper` to `rule_base` and `action_helper` to `action_base`.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 0.27
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Changed the type of exceptions thrown by the library to `pegtl::parse_error`.
|
|
Packit |
d0b620 |
* Changed class `basic_debug` to only generate a grammar back-trace when a `pegtl::parse_error` is flying.
|
|
Packit |
d0b620 |
* Changed logging to use a virtual method on the debug class inherited from common debug base class.
|
|
Packit |
d0b620 |
* Removed all `*_parse_*_nothrow()` parse functions.
|
|
Packit |
d0b620 |
* Removed the `_throws` substring from all remaining parse functions and changed the return type to `void`.
|
|
Packit |
d0b620 |
* Added convenience classes `file_input`, `ascii_file_input` and `dummy_file_input` for custom parse functions.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 0.26
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Changed pretty-printing of the `until` and `if...` rules (consistency).
|
|
Packit |
d0b620 |
* Changed pretty-printing of rules to use ":=" instead of "===" (conciseness).
|
|
Packit |
d0b620 |
* Renamed rule `action` to `ifapply` and removed rule `action_nth` (orthogonality).
|
|
Packit |
d0b620 |
* Renamed action `apply_nth` to `nth`, and renamed some other actions (consistency).
|
|
Packit |
d0b620 |
* Extended pretty-printing to the `apply` and `ifapply` rules (completeness).
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
The last of these changes effectively requires custom action classes to derive either from a valid rule class, or from the new class `pegtl::action_helper<>`, passing itself as template argument.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 0.25
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Fixed and cleaned up the rule pretty-printer in many places (readability).
|
|
Packit |
d0b620 |
* Added new convenience rule `enclose`, useful for quoted strings (convenience).
|
|
Packit |
d0b620 |
* Added new rule `apply` to unconditionally apply an action with empty matched string (convenience).
|
|
Packit |
d0b620 |
* Added action argument to `list` rule and added action `nop` for use as default action (convenience).
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 0.24
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Fixed some bugs in the pretty-printer; still in the experimental phase (usability).
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 0.23
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Added new rules `padl` and `padr` (convenience).
|
|
Packit |
d0b620 |
* Added example for quoted strings with arbitrary unicode characters (documentation).
|
|
Packit |
d0b620 |
* Changed rule `pad` to not suppress the padding in diagnostic messages (consistency).
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 0.22
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Cleaned up the source to compile with `-std=c++0x -pedantic` (compliance).
|
|
Packit |
d0b620 |
* Cleaned out some superfluous compiler flags from the Makefile (minimalism).
|
|
Packit |
d0b620 |
* Changed the default compiler to `g++`, which can be overriden by `$CXX` (consistency).
|
|
Packit |
d0b620 |
* Cleaned up unittests for where `char` is signed but `-fno-strict-overflow` is not given (compliance).
|
|
Packit |
d0b620 |
* Removed `list/not_list/at_list/at_not_list`, but `one/not_one/at_one/at_not_one` are now variadic (orthogonality).
|
|
Packit |
d0b620 |
* Removed the redundant rules `space_star`, `space_plus`, `blank_star`, and `blank_plus` (minimalism).
|
|
Packit |
d0b620 |
* Added new rule class `list` (not to be confused with the old, very different, rule `list`) (convenience).
|
|
Packit |
d0b620 |
* Changed class `seq` to invoke the `marker` with a modified `Must` flag for single-rule sequences (performance).
|
|
Packit |
d0b620 |
* Changed rule class `until1` to be a specialisation of `until`, rather than have a different name (consistency).
|
|
Packit |
d0b620 |
* Changed around the order of the template arguments of the `until` rule (consistency and flexibility).
|
|
Packit |
d0b620 |
* Changed around the order of the template arguments of the `rep` rule and reduced to strict repeat (minimalism).
|
|
Packit |
d0b620 |
* Changed many rule classes from one template argument to variadic sequence of arguments (flexibility).
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 0.21
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Changed the pretty-printing of rules, this is work in progress (aesthetics).
|
|
Packit |
d0b620 |
* Fixed the exception that occurred when `mmap()`ing an empty file (correctness).
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 0.20
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Added the missing `pegtl.hh` header file to the release archive...
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 0.19
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Cleanly layered implementation of `action_nth` (flexibility).
|
|
Packit |
d0b620 |
* Renamed class `action_all` back to `action` (was better that way).
|
|
Packit |
d0b620 |
* Moved main `pegtl.hh` include file out of `pegtl` directory (simplicity).
|
|
Packit |
d0b620 |
* Renamed the rule method from `s_match` to `match` (readability).
|
|
Packit |
d0b620 |
* Renamed the action method from `matched` to `apply` (readability).
|
|
Packit |
d0b620 |
* Renamed the rule method from `s_insert` to `prepare` (consistency).
|
|
Packit |
d0b620 |
* Changed the input iterator classes to report byte offsets (consistency).
|
|
Packit |
d0b620 |
* Added rule and action class to match captured sub-expressions (experiment).
|
|
Packit |
d0b620 |
* Changed class `action` to invoke arbitrary many actions (succinctness).
|
|
Packit |
d0b620 |
* Changed classes `ifmust` and `ifthen` to accept arbitrary many 'then' rules (succinctness).
|
|
Packit |
d0b620 |
* Fixed potential dangling reference in helper class `names` (correctness).
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 0.18
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Added parser functions `parse_forward` for forward iterators (completeness).
|
|
Packit |
d0b620 |
* Renamed parser functions for input iterators to `parse_input` (consistency).
|
|
Packit |
d0b620 |
* Added parser functions `parse_file` for files, implemented with `mmap(2)` (necessity).
|
|
Packit |
d0b620 |
* Added initial support for customised logging of error messages (flexibility).
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 0.17
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Added support for ranges of input iterators with automatic minimal buffering (flexibility).
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 0.16
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Added class `action_nth` (flexibility).
|
|
Packit |
d0b620 |
* Renamed class `action` to `action_all` (consistency).
|
|
Packit |
d0b620 |
* Changed class `marker` to a nop when "must" is true (performance).
|
|
Packit |
d0b620 |
* Changed `dummy_debug` to interpret "must" tracking (consistency).
|
|
Packit |
d0b620 |
* Fixed typo in name of `PEGTL_IMPURE_OPTIMISATIONS` macro (correctness).
|
|
Packit |
d0b620 |
* Made the marker class a sub-class of the input class (simplicity).
|
|
Packit |
d0b620 |
* Renamed some of classes named `white`, `space`, or `blank` (consistency).
|
|
Packit |
d0b620 |
* Fixed some issues in the R6RS example (CFG to PEG mismatch, only first datum).
|
|
Packit |
d0b620 |
* Added missing template arguments to `smart_parse`-functions (correctness).
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 0.15
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Removed some small superfluous functions (less is more).
|
|
Packit |
d0b620 |
* Changed the "must" tracking from run-time to compile-time (better?).
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 0.14
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Optimised behaviour of `seq<>` and `string<>` (performance).
|
|
Packit |
d0b620 |
* Added detection of division-by-zero to calculator example.
|
|
Packit |
d0b620 |
* Removed data source debug tracking from the library (simplicity).
|
|
Packit |
d0b620 |
* Removed run-time limits on rule applications and nesting (simplicity).
|
|
Packit |
d0b620 |
* Disentangled a couple of header files (maintainability).
|
|
Packit |
d0b620 |
* Renamed class `iterator_input` to forward_input (consistency).
|
|
Packit |
d0b620 |
* Added class `string_input` to initialise forward_input from a string (convenience).
|
|
Packit |
d0b620 |
* Removed template argument Rule to action functor's `matched()` method (simplicity).
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 0.13
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Added more wrapper functions for parsing (convenience).
|
|
Packit |
d0b620 |
* Renamed existing wrapper functions for parsing (consistency).
|
|
Packit |
d0b620 |
* Added `rewind()` method to class `iterator_input` (indirect).
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 0.12
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Added more directory structure.
|
|
Packit |
d0b620 |
* Fixed compile-error in `sexpression.cc` (correctness).
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 0.11
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Fixed back-tracking in class `string` (correctness).
|
|
Packit |
d0b620 |
* Fixed order of operands in calculator example (correctness).
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 0.10
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* Added Scheme R6RS grammar (example).
|
|
Packit |
d0b620 |
* Fixed behaviour at end-of-input (aesthetics).
|
|
Packit |
d0b620 |
* Fixed behaviour and use of class `position` (correctness).
|
|
Packit |
d0b620 |
* Changed to lazy initialisation of pretty-printer (performance).
|
|
Packit |
d0b620 |
* Changed the design of the input and parser classes (flexibility).
|
|
Packit |
d0b620 |
* Changed how expression rules provide their printer key (simplicity).
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## 0.9
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Released 2008
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
* First public release.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
## History
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Development of the PEGTL started in November 2007 as an experiment in C++0x.
|
|
Packit |
d0b620 |
It is based on ideas from the YARD library by Christopher Diggins.
|
|
Packit |
d0b620 |
|
|
Packit |
d0b620 |
Copyright (c) 2007-2018 Dr. Colin Hirsch and Daniel Frey
|