arborium-prolog 2.5.0

Prolog grammar for arborium (tree-sitter bindings)
Documentation
# arborium-prolog

[![Part of Arborium](https://img.shields.io/badge/🌳_Arborium-grammar_collection-228B22)](https://github.com/bearcove/arborium)
[![crates.io](https://img.shields.io/crates/v/arborium-prolog.svg)](https://crates.io/crates/arborium-prolog)
[![docs.rs](https://img.shields.io/docsrs/arborium-prolog)](https://docs.rs/arborium-prolog)
[![license](https://img.shields.io/crates/l/arborium-prolog.svg)](https://github.com/bearcove/arborium)

[Prolog](https://en.wikipedia.org/wiki/Prolog) grammar for [tree-sitter](https://tree-sitter.github.io/).

> Logic programming language for AI and computational linguistics; early definition in Colmerauer's 1972 Marseille reports.


| | |
|---|---|
| **Inventor** | Alain Colmerauer and Philippe Roussel |
| **Year** | 1972 |

## Usage

```rust,ignore
use arborium_prolog::language;
use tree_sitter_patched_arborium::Parser;

let mut parser = Parser::new();
parser.set_language(&language()).expect("Error loading prolog grammar");

let source_code = "/* your prolog code here */";
let tree = parser.parse(source_code, None).unwrap();
println!("{}", tree.root_node().to_sexp());
```

For most use cases, prefer the main [arborium](https://crates.io/crates/arborium) crate:

```toml
[dependencies]
arborium = { version = "*", features = ["prolog"] }
```

Or use this crate directly:

```toml
[dependencies]
arborium-prolog = "*"
```

## About Arborium

This crate is part of [**Arborium**](https://github.com/bearcove/arborium), a collection of tree-sitter grammars packaged as Rust crates, maintained by [Amos Wenger](https://fasterthanli.me).

This crate packages a `parser.c` file generated by the [tree-sitter CLI](https://tree-sitter.github.io/tree-sitter/creating-parsers#generating-the-parser). It exports a `language()` function returning the tree-sitter `Language` for **prolog**.

**Why separate crates?** Tree-sitter parsers can be large (some exceed 1MB of generated C). Splitting languages into separate crates means you only compile what you need, and parallel/incremental builds are more effective.

## Build Requirements

- **Rust**: MSRV is 1.85.0 (Rust 2024 edition)
- **C compiler**: This crate compiles C code via the [`cc`]https://crates.io/crates/cc crate

### Supported Targets

- All major platforms: Linux, macOS, Windows
- WebAssembly: `wasm32-unknown-unknown` (with custom sysroot)

## Upstream Grammar

| | |
|---|---|
| **Repository** | [https://codeberg.org/foxy/tree-sitter-prolog]https://codeberg.org/foxy/tree-sitter-prolog |
| **Commit** | `d8d415f6a1cf80ca138524bcc395810b176d40fa` |
| **License** | MIT |

To regenerate after upstream updates:

```sh
cargo xtask gen --name prolog
```

**Found a grammar bug?** Please report it to the [upstream repository](https://codeberg.org/foxy/tree-sitter-prolog/issues).

## Safety

This crate uses `unsafe` for FFI bindings to the tree-sitter C library. The unsafe surface is minimal and limited to what tree-sitter requires. The generated parser code is produced by tree-sitter's own code generator.

## Versioning

Crate versions track Arborium releases, not upstream grammar versions. The upstream commit is recorded above. A major version bump occurs when grammar changes affect node names or structure (breaking for query consumers).

## License

- **Generated parser code** (`parser.c`): **MIT** (from upstream grammar)
- **Arborium glue code**: **MIT OR Apache-2.0**

## Contributing

- Issues: [github.com/bearcove/arborium/issues]https://github.com/bearcove/arborium/issues
- Repository: [github.com/bearcove/arborium]https://github.com/bearcove/arborium