Universal grammar engine with bidirectional parsing and generation for 31+ formats
Project description
xwsyntax
One bidirectional grammar engine. Parse text to AST, generate back, or convert between syntaxes (e.g. JSON to SQL). 100+ grammars (328+ files) for query, data, and code. Powers xwquery and editors; use it to create new syntaxes or bridge formats.
Company: eXonware.com · Author: eXonware Backend Team · Email: connect@exonware.com
Version: version.py (__version__, __date__)
Install
pip install exonware-xwsyntax
# Optional: full extras
pip install exonware-xwsyntax[full]
Depends on xwsystem. See docs/GUIDE_01_USAGE.md for details.
Quick start
from exonware.xwsyntax import BidirectionalGrammar
grammar = BidirectionalGrammar.load('json')
ast = grammar.parse('{"name": "Alice", "age": 30}')
json_str = grammar.generate(ast)
# Convert between syntaxes
sql_grammar = BidirectionalGrammar.load('sql')
sql = sql_grammar.generate(ast)
# Same AST, different format
Facade: XWSyntax().parse(text, format_name) or validate(text, format_name).
List grammars: list_grammars_quick(), load_grammar_quick(name).
Key code: REF_14_DX · API: REF_15_API.
Examples
Parse and validate with the facade
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 grammars and load by name
from exonware.xwsyntax import list_grammars_quick, load_grammar_quick
names = list_grammars_quick()
grammar = load_grammar_quick(names[0])
Convert JSON to SQL by reusing the 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 | Description |
|---|---|
| Grammar read/write | Parse input to native objects or tree; generate from AST. Grammar-driven; no hardcoded format maps. |
| Bidirectional | Parse to AST, generate back; convert between syntaxes (e.g. JSON to SQL) by swapping grammars. |
| 100+ grammars | Query (SQL, Cypher, GraphQL, xwqueryscript, …), data/config, programming, markup, storage. 328+ grammar files (.lark + .json). |
| xwquery and IDE | Parsing and syntax for query languages; Monaco export and codec integration with xwsystem. |
Current phase: Alpha. M1–M2 done; xwquery consumption next. Status: REF_22_PROJECT.
Docs and tests
- Start: docs/INDEX.md
- Usage: docs/GUIDE_01_USAGE.md
- Requirements and status: REF_01_REQ, REF_22_PROJECT
- API and design: REF_15_API, REF_13_ARCH, REF_14_DX
- Tests: REF_51_TEST. Run from project root:
python tests/runner.py.
License and links
MIT — LICENSE.
Homepage: https://exonware.com · Repository: https://github.com/exonware/xwsyntax
Contributing → CONTRIBUTING.md · Security → SECURITY.md (when present).
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.9.tar.gz.
File metadata
- Download URL: exonware_xwsyntax-0.6.0.9.tar.gz
- Upload date:
- Size: 216.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 |
112aabae3796a3464105a22ad3d9f31f638ded2818c21d5e83e7d71268017a3e
|
|
| MD5 |
84b71a32cdab3f38a19bc5ddd2e6284a
|
|
| BLAKE2b-256 |
56360f65a5cdfbdc9ef6122bad2254424f7ec5710da70e52ad54a5d9fdb33460
|
File details
Details for the file exonware_xwsyntax-0.6.0.9-py3-none-any.whl.
File metadata
- Download URL: exonware_xwsyntax-0.6.0.9-py3-none-any.whl
- Upload date:
- Size: 339.5 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 |
b010e36ae19f54e9494309e0c39b87e803f35b07ed746cf81592e5ce64c3d8a9
|
|
| MD5 |
74509b9cc9ad3dcad0802b062e2e31b6
|
|
| BLAKE2b-256 |
9365e9cb2a40be7333f6810a78d833bd22f4bbeb0e8e3497e0c8a20905677dd2
|