Skip to main content

A fast and simple enum/regex-based tokenizer with decent configurability

Project description

Crossandra

Crossandra is a fast and simple tokenization library for Python operating on enums and regular expressions, with a decent amount of configuration.

Installation

Crossandra is available on PyPI and can be installed with pip, or any other Python package manager:

$ pip install crossandra

(Some systems may require you to use pip3, python -m pip, or py -m pip instead)

License

Crossandra is licensed under the MIT License.

Documentation

Examples

from enum import Enum
from crossandra import Crossandra

class Brainfuck(Enum):
    ADD = "+"
    SUB = "-"
    LEFT = "<"
    RIGHT = ">"
    READ = ","
    WRITE = "."
    BEGIN_LOOP = "["
    END_LOOP = "]"

bf = Crossandra(Brainfuck, suppress_unknown=True)
print(*bf.tokenize("cat program: ,[.,]"), sep="\n")
# Brainfuck.READ
# Brainfuck.BEGIN_LOOP
# Brainfuck.WRITE
# Brainfuck.READ
# Brainfuck.END_LOOP
from crossandra import Crossandra, Rule, common

def hex2rgb(hex_color: str) -> tuple[int, int, int]:
    r, g, b = (int(hex_color[i:i+2], 16) for i in range(1, 6, 2))
    return r, g, b

t = Crossandra(
    ignore_whitespace=True,
    rules=[
        Rule(r"#[0-9a-fA-F]+", hex2rgb),
        common.WORD
    ]
)

text = "My favorite color is #facade"
print(t.tokenize(text))
# ['My', 'favorite', 'color', 'is', (250, 202, 222)]
# Supporting Samarium's numbers and arithmetic operators
from enum import Enum
from crossandra import Crossandra, Rule

def sm_int(string: str) -> int:
    return int(string.replace("/", "1").replace("\\", "0"), 2)

class Op(Enum):
    ADD = "+"
    SUB = "-"
    MUL = "++"
    DIV = "--"
    POW = "+++"
    MOD = "---"

sm = Crossandra(
    Op,
    ignore_whitespace=True,
    rules=[Rule(r"(?:\\|/)+", sm_int)]
)

print(*sm.tokenize(r"//\ ++ /\\/ --- /\/\/ - ///"))
# 6 Op.MUL 9 Op.MOD 21 Op.SUB 7

If you have any questions, or would like to get in touch, join my Discord server!

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

crossandra-2.1.0.tar.gz (10.3 kB view hashes)

Uploaded Source

Built Distributions

crossandra-2.1.0-cp312-cp312-win_amd64.whl (77.6 kB view hashes)

Uploaded CPython 3.12 Windows x86-64

crossandra-2.1.0-cp312-cp312-win32.whl (69.6 kB view hashes)

Uploaded CPython 3.12 Windows x86

crossandra-2.1.0-cp312-cp312-musllinux_1_1_x86_64.whl (169.7 kB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ x86-64

crossandra-2.1.0-cp312-cp312-musllinux_1_1_i686.whl (176.9 kB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ i686

crossandra-2.1.0-cp312-cp312-musllinux_1_1_aarch64.whl (166.4 kB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ ARM64

crossandra-2.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (174.8 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

crossandra-2.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (170.9 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

crossandra-2.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (181.9 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

crossandra-2.1.0-cp312-cp312-macosx_10_9_x86_64.whl (96.5 kB view hashes)

Uploaded CPython 3.12 macOS 10.9+ x86-64

crossandra-2.1.0-cp312-cp312-macosx_10_9_universal2.whl (178.7 kB view hashes)

Uploaded CPython 3.12 macOS 10.9+ universal2 (ARM64, x86-64)

crossandra-2.1.0-cp311-cp311-win_amd64.whl (77.2 kB view hashes)

Uploaded CPython 3.11 Windows x86-64

crossandra-2.1.0-cp311-cp311-win32.whl (68.6 kB view hashes)

Uploaded CPython 3.11 Windows x86

crossandra-2.1.0-cp311-cp311-musllinux_1_1_x86_64.whl (163.9 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

crossandra-2.1.0-cp311-cp311-musllinux_1_1_i686.whl (166.8 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ i686

crossandra-2.1.0-cp311-cp311-musllinux_1_1_aarch64.whl (162.3 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ ARM64

crossandra-2.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (170.0 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

crossandra-2.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (166.7 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

crossandra-2.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (172.6 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

crossandra-2.1.0-cp311-cp311-macosx_10_9_x86_64.whl (94.5 kB view hashes)

Uploaded CPython 3.11 macOS 10.9+ x86-64

crossandra-2.1.0-cp311-cp311-macosx_10_9_universal2.whl (176.1 kB view hashes)

Uploaded CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64)

crossandra-2.1.0-cp310-cp310-win_amd64.whl (77.6 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

crossandra-2.1.0-cp310-cp310-win32.whl (68.7 kB view hashes)

Uploaded CPython 3.10 Windows x86

crossandra-2.1.0-cp310-cp310-musllinux_1_1_x86_64.whl (165.2 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

crossandra-2.1.0-cp310-cp310-musllinux_1_1_i686.whl (168.9 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

crossandra-2.1.0-cp310-cp310-musllinux_1_1_aarch64.whl (164.3 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ ARM64

crossandra-2.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (171.0 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

crossandra-2.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (168.3 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

crossandra-2.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (174.6 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

crossandra-2.1.0-cp310-cp310-macosx_10_9_x86_64.whl (95.7 kB view hashes)

Uploaded CPython 3.10 macOS 10.9+ x86-64

crossandra-2.1.0-cp310-cp310-macosx_10_9_universal2.whl (178.7 kB view hashes)

Uploaded CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)

crossandra-2.1.0-cp39-cp39-win_amd64.whl (77.6 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

crossandra-2.1.0-cp39-cp39-win32.whl (68.7 kB view hashes)

Uploaded CPython 3.9 Windows x86

crossandra-2.1.0-cp39-cp39-musllinux_1_1_x86_64.whl (164.9 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

crossandra-2.1.0-cp39-cp39-musllinux_1_1_i686.whl (168.5 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

crossandra-2.1.0-cp39-cp39-musllinux_1_1_aarch64.whl (164.0 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ ARM64

crossandra-2.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (170.7 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

crossandra-2.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (168.0 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

crossandra-2.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (174.2 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

crossandra-2.1.0-cp39-cp39-macosx_10_9_x86_64.whl (95.7 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ x86-64

crossandra-2.1.0-cp39-cp39-macosx_10_9_universal2.whl (178.8 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64)

crossandra-2.1.0-cp38-cp38-win_amd64.whl (77.1 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

crossandra-2.1.0-cp38-cp38-win32.whl (68.3 kB view hashes)

Uploaded CPython 3.8 Windows x86

crossandra-2.1.0-cp38-cp38-musllinux_1_1_x86_64.whl (163.7 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

crossandra-2.1.0-cp38-cp38-musllinux_1_1_i686.whl (166.8 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

crossandra-2.1.0-cp38-cp38-musllinux_1_1_aarch64.whl (160.4 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ ARM64

crossandra-2.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (167.8 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

crossandra-2.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (164.4 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

crossandra-2.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (171.0 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

crossandra-2.1.0-cp38-cp38-macosx_10_9_x86_64.whl (94.4 kB view hashes)

Uploaded CPython 3.8 macOS 10.9+ x86-64

crossandra-2.1.0-cp38-cp38-macosx_10_9_universal2.whl (176.8 kB view hashes)

Uploaded CPython 3.8 macOS 10.9+ universal2 (ARM64, x86-64)

Supported by

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