Skip to main content

A very simple S-expression parser that tries to make as little fuss as possible.

Project description

S-Expression Parser

A very simple S-expression parser that tries to make as little fuss as possible.

Example

This module provides a single iterator

def read(file_like, coords=(1, 1), delims=DEFAULT_DELIMS, comment_char=';', atom_handler=lambda x: x)

that reads all S-expressions in the file_like. Reading

(a b c (123 e f () x))

returns a Sequence object that corresponds to this nesting:

['a', 'b', 'c', ['123', 'e', 'f', [], 'x']]

The sequence object has a field range that is a pair of row/col pairs that give the coordinates of the S-expression in the input. Furthermore, it has a tuple item_ranges that gives the coordinates of the i-th item of the S-expression.

Atoms

a, b, c in the above example are called atoms. Atoms are parsed using two different rules:

  1. Every sequence that does not contain a whitespace, opening of closing parenthesis or the comment character is an atom.
  2. Every sequence that starts and ends with a delimiter is an atom. The default delimiters are " for strings with the usual escape characters (\n, \t, \", \\, ...) and | without escape characters. Using the delims parameter, you can customize the delimiters and their escape sequences.

Details

The parameters of read are:

  1. file_like: An object that is file like i.e. provides a read method.
  2. delims: A map of delimiters used to surround atoms that contain spaces. Commonly these are double-quotes to represent strings as in "Hello" or vertical bars to allow for symbols that contain spaces as in |some symbol|. The map DEFAULT_DELIMS specifies delimiters for strings and symbols.
  3. comment_char: The character that starts a single line comment. The default value is ;.
  4. atom_handler: A function that is called when an atom is parsed. This function is passed a string that consists of the text of the parsed atom. The function can convert this string into something else and the returned value is used to construct the S-expression. For example, this allows for converting digit sequences into ints.

Testing

To run the tests, execute uv run pytest.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tinysexpr-1.6.0.tar.gz (3.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tinysexpr-1.6.0-py3-none-any.whl (4.1 kB view details)

Uploaded Python 3

File details

Details for the file tinysexpr-1.6.0.tar.gz.

File metadata

  • Download URL: tinysexpr-1.6.0.tar.gz
  • Upload date:
  • Size: 3.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for tinysexpr-1.6.0.tar.gz
Algorithm Hash digest
SHA256 bc5ce0f313a1545f9b16b8ed9f66b90caf27a916cfd6721d382ce45108d23222
MD5 1744e3985807a1d4e11a7a77f3deb54e
BLAKE2b-256 adab6b4e665909934dd757d74cfdfacf4c80ac9b95fd80460147443e75cd54f9

See more details on using hashes here.

File details

Details for the file tinysexpr-1.6.0-py3-none-any.whl.

File metadata

  • Download URL: tinysexpr-1.6.0-py3-none-any.whl
  • Upload date:
  • Size: 4.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for tinysexpr-1.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3bf9ca29394a2208f7115c3757f3d6fd81f8e898fc6fee618df34ba03a90a312
MD5 4090d1a3c641fbb96344d8733f50ff3f
BLAKE2b-256 5d36a35ea5d71bbe3f9b21f5460d9e4dfb5427354dbd28491e9f5a452857db9c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page