factcircuit
FactCircuit: an auditable claim-and-evidence verification loop with immutable provenance, staged checks, bounded retrieval, and reproducible evaluation.
A collection of grammars, made as accessible as possible
Translation pending
DataPython · ShellGitHub @delph-inOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
The DELPH-IN Grammary: a Curated Repository of Grammars and Treebanks
A collection of grammars, made as accessible as possible.
The grammars are processed with the Linguistic Type Data-Base (LTDB) and can be accessed here:, where you can browse the grammar and interactively parse (and for some grammars generate).
Gathered together and revived by Francis Bond and Dan Flickinger.
See docs/grammary.md for a list of all the grammar repositories (made from grammary.toml).Read the full README ↗A collection of grammars, made as accessible as possible.
The grammars are processed with the Linguistic Type Data-Base (LTDB)</> and can be accessed here: https://compling.upol.cz/ltdb, where you can browse the grammar and interactively parse (and for some grammars generate).
Gathered together and revived by Francis Bond and Dan Flickinger.
See docs/grammary.md for a list of all the grammar repositories (made from grammary.toml).
See docs/summary.md for a list of all the grammars, with their sizes and links to the compiled ltdb (db) and ace (dat) files.
Francis Bond and Dan Flickinger (2026). The DELPH-IN Grammary: a Curated Repository of Grammars and Treebanks. In 15th International Conference on Language Resources and Evaluation (LREC 2026)
Francis Bond and Dan Flickinger (2026). The DELPH-IN Grammary: a Curated Repository of Grammars and Treebanks (2026.03.15) [Data set]. Zenodo. https://doi.org/10.5281/zenodo.19040902
Release tags are date-based: YYYY.MM (monthly) or YYYY.MM.DD (daily).
Pushing a tag triggers the release workflow, which:
compile.sh to download all grammars and build the ltdb databases.build/ (e.g. build/burger.7z)
before creating the snapshot — so they are not included in the archive.grammary-{tag}.tar.xz (xz-compressed for better ratio than gz)
containing the source code and all compiled databases in build/DBS/.*.db file individually for selective download.summary-{tag}.md — a Markdown table of grammar statistics.git tag 2026.03.15
git push origin 2026.03.15
After the release you should add grammary-{tag}.tar.xz to Zenodo by hand.
The build is slow (~hours) because all grammars are downloaded and compiled from scratch. Re-running the workflow for the same tag is safe: old archives on the release are replaced before uploading.
To generate a summary locally:
python scripts/make_summary.py --db-dir build/DBS --tag 2026.03
Install system prerequisites first, then compile:
bash setup.sh # installs git, svn, wget, rsync, uv on Ubuntu/Debian
bash setup.sh --grew-match # also installs opam + grew for structural search
bash compile.sh
setup.sh installs:
git, subversion, curl, wget, rsync, build-essential (via apt)uv (Python package manager, user-level)--grew-match: opam + an OCaml switch with grew and duneACE (the grammar compiler) is downloaded automatically by compile.sh via
scripts/setup_ace.py — no manual installation needed.
$ python scripts/download_grammars.py grammary.toml build
scripts/check_grammar_updates.py resolves the current upstream revision of
every grammar in grammary.toml (git commit, SVN revision, or HTTP
ETag/Last-Modified) and compares it against the committed baseline in
grammar_versions.json.
uv run python scripts/check_grammar_updates.py # report any drift
uv run python scripts/check_grammar_updates.py --update # refresh the baseline
The baseline records the revision each grammar was last built at; run
--update and commit grammar_versions.json after rebuilding. The
check-updates workflow runs this weekly
and opens a tracking issue when an upstream grammar has moved ahead of the
baseline.
$ bash scripts/build-ltdb.sh build
ACE is downloaded automatically on first run. Both .db and .dat files are
written to build/DBS/ and copied to etc/ltdb/web/db/.
The GitHub Pages fallback is generated under docs/ltdb/ from the compiled
databases in build/DBS/. The static pages contain grammar/type metadata; type
examples are loaded lazily in the browser from compact per-grammar SQLite files.
cd etc/ltdb
uv run python ../../scripts/freeze_ltdb.py --destination ../../docs
cd ../..
python scripts/build_ltdb_example_dbs.py --db-dir build/DBS
To test the mirror locally:
python -m http.server -d docs 8000
The mirror does not support live parse/generate, full corpus search, or the full example inventory. Unsupported operations link back to the live LTDB.
Grammars are listed in the file grammary.toml
vcs — how to download the grammar: git clone, svn co, or a direct URLtrb — separate treebank archive (wget <url>), extracted to tsdb/trb_gold — directory name within the treebank archive to link as tsdb/gold
(needed when the archive contains multiple top-level directories, as with SRG)parent — grammar that this one must live inside; cloned to
build/<parent>/<name>/ so relative TDL ../ paths resolve correctly
(e.g. singlish-sg lives inside erg/)A project will be used to make as many grammars as it has METADATA files.
Grammars that set parent are cloned into build/<parent>/<name>/ so that
relative paths in their config files can reach the parent grammar's resources.
Very rough distinctions so that people can have a general idea about how big the grammar is. More detail can be gotten from the ltdb.
After compilation, the gold treebanks are exported as grew JSON corpora under
build/DBS/. The following grammars currently export treebank corpora:
| Grammar | Trees | Notes |
|---|---|---|
| ERG | 97,650 | main ERG Redwoods treebank |
| erg-dict | 1,508 | ERG dictionary variant |
| erg-singlish | 44 | Singlish sub-grammar of the ERG |
| SRG | 2,677 | Spanish; separate trb archive in grammary.toml |
| Jacy | 8,797 | Japanese Hinoki treebank |
| INDRA | 2,861 | Indonesian (JATI + Cendana) |
| KRG | 22 | Korean |
| NorSource | 1,202 | Norwegian |
| wambaya_aux | 718 | Wambaya aux+vc grammar |
| wambaya_cmp | 717 | Wambaya arg-comp grammar |
| zhong-zhs | 681 | Mandarin Chinese (Simplified) |
To start grew-match alongside the LTDB (requires --grew-match setup above):
cd etc/ltdb
bash run.sh --grew-match
Each grammar corpus gets its own snippet pane loaded from
grew_snippets/<SHORT_GRAMMAR_NAME>.html (stored in grammary root, synced
into etc/ltdb/etc/grew_snippets/ by compile.sh), with example queries
tailored to that grammar's rule and predicate names. The generic fallback is
_default.html.
For full setup instructions see etc/ltdb/doc/grew-match.md.
Some grammars delegate tokenization or morphology to an external analyzer and
cannot be parsed from raw orthographic text. The LTDB parse demo runs a
per-grammar analyzer on the input before handing it to ACE
(etc/ltdb/web/preprocess.py, hooked into the /parse route). The grammar is
matched by its ISO_CODE (falling back to SHORT_GRAMMAR_NAME):
| Grammar | ISO | Analyzer | Install | Config | ACE input |
|---|---|---|---|---|---|
| Jacy (Japanese) | jpn | MeCab -O wakati | apt install mecab | MECAB_BIN | segmented text |
| Zhong (Chinese) | cmn | jieba | uv pip install jieba | — | segmented text |
| SRG (Spanish) | spa | FreeLing 4.2 | bash scripts/install_freeling.sh | SRG_YY_CMD | YY lattice (-y --yy-rules) |
| kal-hpsg (Kalaallisut) | kal | KARMA (in-process) | uv pip install git+https://github.com/alexhsu-nlp/karma.git | — | segmented text (morpheme -/= boundaries) |
Everything is optional and degrades gracefully: grammars with tokenization
compiled into the .dat (e.g. the ERG) are untouched, and if an analyzer's tool
is not installed the demo still parses already-segmented input and shows a hint.
Install the light analyzers (MeCab, jieba, KARMA) with bash setup.sh --analyzers; FreeLing is heavier and installed by bash scripts/install_freeling.sh. Restrict which analyzers run with
LTDB_ANALYZERS (comma-separated ISO codes); the "Analyze" checkbox in the demo
lets a user bypass preprocessing to paste already-segmented input.
SRG_YY_CMD names a command that reads a sentence on stdin and prints a YY
lattice on stdout; the SRG ships exactly such a FreeLing→YY wrapper at
build/srg/util/analyze-wrappers/srg-yy.sh (and the FreeLing API under
build/srg/util/freeling_api/). KARMA is a pure-Python package imported
directly — no command needed; it emits morpheme-segmented text with -/=
boundaries, which is what kal-hpsg's morphological rules expect.
Upstream note:
etc/ltdb/is a vendored copy of https://github.com/fcbond/ltdb. The analyzer hook (preprocess.py, the/parsechange, the demo toggle) is upstream (merged PR #61), so a freshetc/ltdbclone already includes it.