./devel/py-pyparsing, Parsing module for Python

[ CVSweb ] [ Homepage ] [ RSS ] [ Required by ]


Branch: CURRENT, Version: 3.3.2, Package name: py313-pyparsing-3.3.2, Maintainer: pkgsrc-users

The pyparsing module is an alternative approach to creating and executing
simple grammars, vs. the traditional lex/yacc approach, or the use of regular
expressions. The pyparsing module provides a library of classes that client
code uses to construct the grammar directly in Python code.


Required to run:
[devel/py-setuptools] [lang/python37]

Required to build:
[pkgtools/cwrappers]

Master sites:

Filesize: 6690.99 KB

Version history: (Expand)


CVS history: (Expand)


   2026-01-25 09:35:13 by Adam Ciarcinski | Files touched by this commit (3) | Package updated
Log message:
py-pyparsing: updated to 3.3.2

Version 3.3.2 - January, 2026

- Defined pyparsing-specific warning classes so that they can be selectively enabled
  or disabled without affecting warnings raised by other libraries in the same Python
  app:
  - `PyparsingWarning` - base warning for all pyparsing-specific warnings (inherits
    from `UserWarning`)
  - `PyparsingDeprecationWarning` - warning for using deprecated features (inherits
    from `PyparsingWarning` and `DeprecationWarning`)
  - `PyparsingDiagnosticWarning` - warning raised when pyparsing diagnostics are
    enabled and a diagnostic feature is used (inherits from `PyparsingWarning`)

- Added `as_datetime` parse action to `pyparsing.common` - a more generalized
  version of the `convert_to_datetime` parse action (supports any expression \ 
that extracts
  date/time fields into "year", "month", "day", \ 
etc. results names), and validates
  that the parsed fields represent a valid date and time.

- Added `iso8601_date_validated` and `iso8601_datetime_validated` expressions to
  `pyparsing.common`, which return a Python `datetime.datetime`

- Various performance improvements in `ParseResults` class and core functions, with
  10-20% performance overall.

- Added `regex_inverter` web page (using PyScript) to demonstrate using the \ 
`inv_regex.py`
  example.

- Expanded regex forms handled by the `examples/inv_regex.py` example:
  - named capturing groups (`?P<name>`)
  - partial repetition (`{m,}` and `{,n}`)
  - negated character classes (`[^...]`)

- Added `SPy` (Simplified Python) parser to examples.
   2025-12-26 11:21:29 by Adam Ciarcinski | Files touched by this commit (3) | Package updated
Log message:
py-pyparsing: updated to 3.3.1

Version 3.3.1 - December, 2025

- Added license info to metadata, following PEP-639. Thanks to Gedalia Pasternak and
  Marc Mueller for submitted issue and PR.

Version 3.3.0 - December, 2025

================================================================================ \ 
===========
 The version 3.3.0 release will begin emitting `DeprecationWarnings` for \ 
pyparsing methods
 that have been renamed to PEP8-compliant names (introduced in pyparsing 3.0.0, \ 
in August,
 2021, with legacy names retained as aliases). In preparation, I added in pyparsing
 3.2.2 a utility for finding and replacing the legacy method names with the new \ 
names.
 This utility is located at `pyparsing/tools/cvt_pep8_names.py`. This script \ 
will scan all
 Python files specified on the command line, and if the `-u` option is selected, will
 replace all occurrences of the old method names with the new PEP8-compliant names,
 updating the files in place.

 Here is an example that converts all the files in the pyparsing `/examples` \ 
directory:

      python -m pyparsing.tools.cvt_pyparsing_pep8_names -u examples/*.py

 The new names are compatible with pyparsing versions 3.0.0 and later.
================================================================================ \ 
===========

- Deprecated `indentedBlock`, when converted using the `cvt_pyparsing_pep8_names`
  utility, will emit `UserWarnings` that additional code changes will be required.
  This is because the new `IndentedBlock` class no longer requires the calling code
  to supply an indent stack, while adding support for nested indentation levels
  and grouping.

- Deprecated `locatedExpr`, when converted using the `cvt_pyparsing_pep8_names`
  utility, will emit `UserWarnings` that additional code changes may be required.
  The new `Located` class removes the extra grouping level of the parsed values.
  (If the original `locatedExpr` parser was defined with a results name, then
  the extra grouping is retained, so that the results name nesting works properly;
  in this case, no code changes would be required.)

- Updated all examples and test cases to use PEP8 names (unless the test case is \ 
specifically
  designed to test behavior of a legacy method). Added railroad diagrams for \ 
some examples.

- Added exception handling when calling `formatted_message()`, so that \ 
`str(exception)`
  always returns at least _something_.

- All unit tests pass with Python 3.14, including 3.14t. This does _not_ necessarily
  mean that pyparsing is now thread-safe, just that when run in the free-threaded
  interpreter, there were no errors. None of the unit tests try to do any parsing
  with multiple threads - they test the basic functionality of the library, \ 
under various
  versions of packrat and left-recursive parsing.

- Added AI instructions so that AI agents can be prompted with best practices
  for generating parsers using pyparsing code. These instructions are in the
  `ai/best_practices.md` file, and can be accessed programmatically by calling
  `pyparsing.show_best_practices()` or running `python -m \ 
pyparsing.ai.show_best_practices`
  from the command line, after installing the `pyparsing` package.

- Implemented a TINY language parser/interpreter using pyparsing, in the \ 
`examples/tiny`
  directory. This is a little tutorial language that I used to demonstrate how \ 
to use pyparsing to
  build a simple interpreter, following a recommended parser+AST+engine+run \ 
structure.
  The `docs` sub-directory also includes transcripts of the AI session used to \ 
create the
  parser and the interpreter. The `samples` sub-directory includes a few sample \ 
TINY programs.

- Fixed minor formatting bugs in `pyparsing.testing.with_line_numbers`, found \ 
during development
  of the TINY language example.

- Added test in `DelimitedList` and `nested_expr` which auto-suppress delimiting \ 
commas to
  avoid wrapping in a `Suppress` if delimiter is already a `Suppress`.

- Added performance benchmarking tools and documentation:
  - `tests/perf_pyparsing.py` runs a series of benchmark parsing tests, \ 
exercising different
    aspects of the pyparsing package. For cross-version analysis, this script \ 
can export
    results as CSV and append to a consolidated data file.
  - Runner scripts `run_perf_all_tags.bat` (Windows) and `run_perf_all_tags.sh` \ 
(Ubuntu/bash)
    execute the benchmark across multiple Python versions (3.9–3.14) and \ 
pyparsing versions
    (3.1.1 through 3.3.0), aggregating results into `perf_pyparsing.csv` at the \ 
repo root.
  - See `tests/README.md` for usage instructions.

- Used performance benchmarking to identify and revert an inefficient utility \ 
method used in
  `transform_string` (introduced in pyparsing 3.2.0b2).
   2025-09-23 19:43:46 by Adam Ciarcinski | Files touched by this commit (2) | Package updated
Log message:
py-pyparsing: updated to 3.2.5

Version 3.2.5 - September, 2025

- JINX! Well, 3.2.4 had a bug for `Word` expressions that include a space
  character, if that expression was then copied, either directly with .copy() or
  by adding a results name, or including in another construct (like `DelimitedList`)
  that makes a copy internally. Issue 618, reported by mstinberg, among others -
  thanks, and sorry for the inconvenience.
   2025-09-14 11:46:10 by Adam Ciarcinski | Files touched by this commit (2) | Package updated
Log message:
py-pyparsing: updated to 3.2.4

Version 3.2.4 - September, 2025

- Barring any catastrophic bugs in this release, this will be the last release in
  the 3.2.x line. The next release, 3.3.0, will begin emitting `DeprecationWarnings`
  when the pre-PEP8 methods are used (see header notes above for more information,
  including available automation for converting any existing code using
  pyparsing with the old names).

- Fixed bug when using a copy of a `Word` expression (either by using the explicit
  `copy()` method, or attaching a results name), and setting a new expression name,
  a raised `ParseException` still used the original expression name. Also affected
  `Regex` expressions with `as_match` or `as_group_list` = True. Reported by
  Waqas Ilyas, in Issue #612 - good catch!

- Fixed type annotation for `replace_with`, to accept `Any` type. Fixes Issue #602,
  reported by esquonk.

- Added locking around potential race condition in `ParserElement.reset_cache`, as
  well as other cache-related methods. Fixes Issue #604, reported by \ 
CarlosDescalziIM.

- Substantial update to docstrings and doc generation in preparation for 3.3.0,
  great effort by FeRD, thanks!

- Notable addition by FeRD to convert docstring examples to work with doctest! This
  was long overdue, thanks so much!
   2025-04-12 13:44:18 by Adam Ciarcinski | Files touched by this commit (3) | Package updated
Log message:
py-pyparsing: updated to 3.2.3

Version 3.2.3 - March, 2025

- Fixed bug released in 3.2.2 in which `nested_expr` could overwrite parse actions
  for defined content, and could truncate list of items within a nested list.
  Fixes Issue 600, reported by hoxbro and luisglft, with helpful diag logs and
  repro code.

Version 3.2.2 - March, 2025

- Released `cvt_pyparsing_pep8_names.py` conversion utility to upgrade \ 
pyparsing-based
  programs and libraries that use legacy camelCase names to use the new \ 
PEP8-compliant
  snake_case method names. The converter can also be imported into other scripts as

        from pyparsing.tools.cvt_pyparsing_pep8_names import pep8_converter

- Fixed bug in `nested_expr` where nested contents were stripped of whitespace when
  the default whitespace characters were cleared (raised in this StackOverflow
  question https://stackoverflow.com/questions/79327649 by Ben Alan). Also addressed
  bug in resolving PEP8 compliant argument name and legacy argument name.

- Fixed bug in `rest_of_line` and the underlying `Regex` class, in which matching a
  pattern that could match an empty string (such as `".*"` or \ 
`"[A-Z]*"` would not raise
  a `ParseException` at or beyond the end of the input string. This could cause an
  infinite parsing loop when parsing `rest_of_line` at the end of the input string.
  Reported by user Kylotan, thanks!

- Enhancements and extra input validation for \ 
`pyparsing.util.make_compressed_re` - see
  usage in `examples/complex_chemical_formulas.py` and result in the generated \ 
railroad
  diagram `examples/complex_chemical_formulas_diagram.html`. Properly escapes \ 
characters
  like "." and "*" that have special meaning in regular \ 
expressions.

- Fixed bug in `one_of()` to properly escape characters that are regular \ 
expression markers
  (such as '*', '+', '?', etc.) before building the internal regex.

- Better exception message for `MatchFirst` and `Or` expressions, showing all \ 
alternatives
  rather than just the first one.

- Added return type annotation of "-> None" for all `__init__()` \ 
methods, to satisfy
  `mypy --strict` type checking. PR submitted by FeRD, thank you!

- Added optional argument `show_hidden` to `create_diagram` to show
  elements that are used internally by pyparsing, but are not part of the actual
  parser grammar. For instance, the `Tag` class can insert values into the parsed
  results but it does not actually parse any input, so by default it is not included
  in a railroad diagram. By calling `create_diagram` with `show_hidden` = `True`,
  these internal elements will be included. (You can see this in the tag_metadata.py
  script in the examples directory.)

- Fixed bug in `number_words.py` example. Also added `ebnf_number_words.py` to \ 
demonstrate
  using the `ebnf.py` EBNF parser generator to build a similar parser directly from
  EBNF.

- Fixed syntax warning raised in `bigquery_view_parser.py`, invalid escape \ 
sequence "\s".
  Reported by sameer-google, nice catch!

- Added support for Python 3.14.
   2025-02-23 19:05:52 by Thomas Klausner | Files touched by this commit (2) | Package updated
Log message:
py-pyparsing: update for flit_core 3.11

Bump PKGREVISION.
   2025-01-02 10:19:51 by Adam Ciarcinski | Files touched by this commit (2) | Package updated
Log message:
py-pyparsing: updated to 3.2.1

Version 3.2.1 - December, 2024

- Updated generated railroad diagrams to make non-terminal elements links to \ 
their related
  sub-diagrams. This _greatly_ improves navigation of the diagram, especially for
  large, complex parsers.

- Simplified railroad diagrams emitted for parsers using `infix_notation`, by hiding
  lookahead terms. Renamed internally generated expressions for clarity, and improved
  diagramming.

- Improved performance of `cpp_style_comment`, `c_style_comment`, `common.fnumber`
  and `common.ieee_float` Regex expressions. PRs submitted by Gabriel Gerlero,
  nice work, thanks!

- Add missing type annotations to `match_only_at_col`, `replace_with`, \ 
`remove_quotes`,
  `with_attribute`, and `with_class`.

- Added generated diagrams for many of the examples.

- Replaced old examples/0README.html file with examples/README.md file.
   2024-08-26 16:58:07 by Adam Ciarcinski | Files touched by this commit (2) | Package updated
Log message:
py-pyparsing: updated to 3.1.4

Version 3.1.4 - August, 2024
----------------------------
- Fix to type annotation that referenced `re.Pattern`. Since this type was \ 
introduced in
  Python 3.7, using this type definition broke Python 3.6 installs of pyparsing. PR
  submitted by Felix Fontein, nice work!

Version 3.1.3 - August, 2024
----------------------------
- Added new `Tag` ParserElement, for inserting metadata into the parsed results.
  This allows a parser to add metadata or annotations to the parsed tokens.
  The `Tag` element also accepts an optional `value` parameter, defaulting to `True`.
  See the new `tag_metadata.py` example in the `examples` directory.

  Example:

        # add tag indicating mood
        end_punc = "." | ("!" + Tag("enthusiastic")))
        greeting = "Hello" + Word(alphas) + end_punc

        result = greeting.parse_string("Hello World.")
        print(result.dump())

        result = greeting.parse_string("Hello World!")
        print(result.dump())

  prints:

        ['Hello', 'World', '.']

        ['Hello', 'World', '!']
        - enthusiastic: True

- Added example `mongodb_query_expression.py`, to convert human-readable infix query
  expressions (such as `a==100 and b>=200`) and transform them into the equivalent
  query argument for the pymongo package (`{'$and': [{'a': 100}, {'b': {'$gte': \ 
200}}]}`).
  Supports many equality and inequality operators - see the docstring for the
  `transform_query` function for more examples.

- Fixed issue where PEP8 compatibility names for `ParserElement` static methods were
  not themselves defined as `staticmethods`. When called using a `ParserElement` \ 
instance,
  this resulted  in a `TypeError` exception.

- To address a compatibility issue in RDFLib, added a property setter for the
  `ParserElement.name` property, to call `ParserElement.set_name`.

- Modified `ParserElement.set_name()` to accept a None value, to clear the defined
  name and corresponding error message for a `ParserElement`.

- Updated railroad diagram generation for `ZeroOrMore` and `OneOrMore` \ 
expressions with
  `stop_on` expressions.

- Added `<META>` tag to HTML generated for railroad diagrams to force \ 
UTF-8 encoding
  with older browsers, to better display Unicode parser characters.

- Fixed some cosmetics/bugs in railroad diagrams:
  - fixed groups being shown even when `show_groups`=False
  - show results names as quoted strings when `show_results_names`=True
  - only use integer loop counter if repetition > 2

- Some type annotations added for parse action related methods.

- Added exception type to `trace_parse_action` exception output, while investigating
  SO question posted by medihack.

- Added `set_name` calls to internal expressions generated in `infix_notation`, for
  improved railroad diagramming.

- `delta_time`, `lua_parser`, `decaf_parser`, and `roman_numerals` examples \ 
cleaned up
  to use latest PEP8 names and add minor enhancements.

- Fixed bug (and corresponding test code) in `delta_time` example that did not handle
  weekday references in time expressions (like "Monday at 4pm") when \ 
the weekday was
  the same as the current weekday.

- Minor performance speedup in `trim_arity`, to benefit any parsers using parse \ 
actions.

- Added early testing support for Python 3.13 with JIT enabled.