Universal grammar engine: bidirectional parsing and generation for 100+ syntax formats (328+ grammar files)
Project description
xwsyntax
Bidirectional grammars: parse text to an AST, emit text again, or hop formats by reusing the same tree (for example JSON in, SQL out). 100+ grammars (300+ files) covering query languages, data formats, and code. Used by xwquery and editor/Monaco flows.
Company: eXonware.com · Author: eXonware Backend Team · Email: connect@exonware.com
📦 Install
pip install exonware-xwsyntax
pip install exonware-xwsyntax[lazy]
pip install exonware-xwsyntax[full]
Runtime deps are declared in pyproject.toml (lark, exonware-xwsystem, exonware-xwnode, exonware-xwlazy wiring). See docs/GUIDE_01_USAGE.md for modes and troubleshooting.
🚀 Quick start
from exonware.xwsyntax import BidirectionalGrammar
grammar = BidirectionalGrammar.load('json')
ast = grammar.parse('{"name": "Alice", "age": 30}')
json_str = grammar.generate(ast)
sql_grammar = BidirectionalGrammar.load('sql')
sql = sql_grammar.generate(ast)
Facade: XWSyntax().parse(text, format_name) or validate(text, format_name).
Discovery: list_grammars_quick(), load_grammar_quick(name).
More code paths: REF_14_DX, API: REF_15_API.
📄 Examples
Facade parse/validate
from exonware.xwsyntax import XWSyntax
engine = XWSyntax()
ast = engine.parse("a = 1 + 2", format_name="python")
is_valid = engine.validate("a = 1 + 2", format_name="python")
List and load grammars
from exonware.xwsyntax import list_grammars_quick, load_grammar_quick
names = list_grammars_quick()
grammar = load_grammar_quick(names[0])
JSON to SQL via shared AST
from exonware.xwsyntax import BidirectionalGrammar
ast = BidirectionalGrammar.load("json").parse('{"name": "Alice", "age": 30}')
sql = BidirectionalGrammar.load("sql").generate(ast)
✨ What you get
| Area | Contents |
|---|---|
| Read/write | Grammar-driven parse and generate; avoid hand-maintained per-format maps. |
| Bidirectional | Round-trip or cross-syntax by swapping grammars on the same AST. |
| Large grammar set | SQL, Cypher, GraphQL, xwqueryscript, configs, programming languages, markup, storage dialects; 300+ .lark / .json assets. |
| Downstream | xwquery parsing; Monaco export and codec hooks via xwsystem. |
Phase: Alpha. Milestones: REF_22_PROJECT.
📖 Docs and tests
- Start: docs/INDEX.md
- Usage: docs/GUIDE_01_USAGE.md
- Requirements / status: REF_01_REQ, REF_22_PROJECT
- API / design: REF_15_API, REF_13_ARCH, REF_14_DX
- Tests: REF_51_TEST. Run:
python tests/runner.pyfrom repo root.
📜 License and links
MIT - LICENSE.
Homepage: https://exonware.com · Repository: https://github.com/exonware/xwsyntax
⏱️ Async Support
- xwsyntax is primarily synchronous in its current implementation.
- Source validation: 0 async def definitions and 0 await usages under src/.
- This module still composes with async-capable xw libraries at integration boundaries when needed.
Version: 0.6.0.27 | Updated: 13-Apr-2026
Built with ❤️ by eXonware.com - Revolutionizing Python Development Since 2025
Project details
Release history Release notifications | RSS feed
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 exonware_xwsyntax-0.6.0.27.tar.gz.
File metadata
- Download URL: exonware_xwsyntax-0.6.0.27.tar.gz
- Upload date:
- Size: 217.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7d0e1acb813c023d78af3135272000f9fe64fc6aaeee4f0166eb140d64cd3239
|
|
| MD5 |
8abacd6da4743b705812f4a988f77a11
|
|
| BLAKE2b-256 |
1355b3e0234b6865801b243fb8ad9f6487e64719f3c1cdbb728908ea0127a401
|
File details
Details for the file exonware_xwsyntax-0.6.0.27-py3-none-any.whl.
File metadata
- Download URL: exonware_xwsyntax-0.6.0.27-py3-none-any.whl
- Upload date:
- Size: 343.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cb28e8a537b8db711e955fde6b4d59060466546770c55f786accde84be819abc
|
|
| MD5 |
651da2a0fc392691cf885b596d90c89a
|
|
| BLAKE2b-256 |
fe6032587df75fd729953bc3d828957e993012178759321724ff03c3bedc8997
|