A tree-sitter grammar for gram notation.
Gram is a subject-based notation for structured data.
If this is an object:
{
"name":"Andreas",
"roles":["author"]
}
Implicitly the object is a person. To become a subject, the implicit information can be explicit.
As a subject:
(:Person {
name: "Andreas",
roles: ["author"]
})
Gram files support comments using // syntax for line-based and end-of-line comments:
// This is a line comment
(hello)-->(world) // End-of-line comment
Learn more about gram at the gram-data github org notation.
This repository includes editor integrations for syntax highlighting and language support:
- Zed Editor - Full syntax highlighting and language support
- More editors coming soon! Contributions welcome.
See editors/README.md for installation instructions and available features.
Tree-sitter bindings are available for multiple languages:
- Node.js:
npm install @gram-data/tree-sitter-gram - Rust: Available via
Cargo.toml - Python: Install via
pip install . - Go: Import from this repository
- Swift: Available via Swift Package Manager
- C: Build with included Makefile
Generate the parser after grammar changes:
npx tree-sitter generate
npx tree-sitter testRun language binding tests:
npm test # Node.js bindings
cargo test # Rust bindings
python -m pytest # Python bindings
make test # C bindingsSee DEVELOP.md for detailed development guidelines.