LexCQL Query Grammar and Parser
Project description
LexCQL for Python
A query parser for LexCQL, the query language for lexical resources in the CLARIN Federated Content Search (FCS).
Installation
Install from PyPI:
pip install lexcql-parser
Or install from source:
git clone https://github.com/Querela/lexcql-python.git
cd lexcql-python
uv build
# built package
python3 -m pip install dist/lexcql_parser-<version>-py3-none-any.whl
# or
python3 -m pip install dist/lexcql_parser-<version>.tar.gz
# for local development
python3 -m pip install -e .
Usage
The high-level interface lexcql.parser.QueryParser wraps the ANTLR4 parse tree into a simplified query node tree that is easier to work with. The lexcql-parser exposes a simple parsing function with lexcql.parse(input: str, enableSourceLocations: bool = True) -> lexcql.parser.QueryNode:
import lexcql
## parsing a valid query into a query node tree
# our query input string
input = "Banane Or lemma =/lang=eng apple"
# parse into QueryNode tree
sc = lexcql.parse(input)
# print stringified tree
print(str(sc))
## handling possibly invalid queries
input = "broken query"
try:
lexcql.parse(input)
except lexcql.QueryParserException as ex:
print(f"Error: {ex}")
You can also use the more low-level ANTLR4 framework to parse the query string. A handy wrapper is provided with lexcql.antlr_parse(input: str) -> LexParser.QueryContext.
from antlr4 import CommonTokenStream, InputStream
from lexcql.parser import LexLexer, LexParser
input = "example"
input_stream = InputStream(input)
lexer = LexLexer(input_stream)
stream = CommonTokenStream(lexer)
parser = LexParser(stream)
tree: LexParser.QueryContext = parser.query()
Development
Fetch (or update) grammar files:
git clone https://github.com/clarin-eric/fcs-ql.git
cp fcs-ql/src/main/antlr4/eu/clarin/sru/fcs/qlparser/lex/*.g4 src/lexcql/
(Re-)Generate python parser code:
# setup environment
uv sync --extra antlr
# NOTE: you can activate the environment (if you do not want to prefix everything with `uv run`)
# NOTE: `uv` does not play nicely with `pyenv` - if you use `pyenv`, sourcing does NOT work!
source .venv/bin/activate
cd src/lexcql
uv run antlr4 -Dlanguage=Python3 *.g4
Run style checks:
# setup environment
uv sync --extra style
uv run black --check .
uv run flake8 . --show-source --statistics
uv run isort --check --diff .
Run tests:
# setup environment
uv sync --extra test
uv run pytest
Run check before publishing:
# setup environment
uv sync --extra build
# build the package
uv build
# run metadata check
uv run twine check --strict dist/*
# (manual) check of package contents
tar tvf dist/lexcql-*.tar.gz
See also
- clarin-eric/fcq-ql - FCS-QL/LexCQL Parser (Java)
- Querela/fcs-ql-python - FCS-QL Parser (Python)
- Specification on CLARIN FCS 2 - CLARIN FCS Overview
- Specification on LexFCS - Published LexFCS Specification
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lexcql_parser-1.0.0.tar.gz.
File metadata
- Download URL: lexcql_parser-1.0.0.tar.gz
- Upload date:
- Size: 18.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
27c8a18fb8816dd6eb8a6d5c82f95a9c7012348d09bc0e6a09d0dcc9617cae49
|
|
| MD5 |
21f5da3423742cd64618b579f26f5b51
|
|
| BLAKE2b-256 |
383514269280b5510210be80d781eb026eccfb3282d9ebfd8ebde39ea175d877
|
File details
Details for the file lexcql_parser-1.0.0-py3-none-any.whl.
File metadata
- Download URL: lexcql_parser-1.0.0-py3-none-any.whl
- Upload date:
- Size: 21.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8cf7b9e71c8e4f999094f4984b92248138c7fe1b7e3509fb76cac5af143223cb
|
|
| MD5 |
6fa0a684183ea1586401627659609acf
|
|
| BLAKE2b-256 |
aca034b9a95ed58cf3af5ff28d5c11c79fccb9d1d2523ecfabaec27c787060ec
|