arena-terms-parser

Crates.ioarena-terms-parser
lib.rsarena-terms-parser
version0.4.0
created_at2025-10-02 05:34:07.427426+00
updated_at2025-10-23 10:17:48.32296+00
descriptionParser for arena-backed, lightweight representations of Prolog-like terms
homepage
repositoryhttps://github.com/ikhomyakov/arena-terms.git
max_upload_size
id1863900
size161,670
Igor Y. Khomyakov (ikhomyakov)

documentation

README

Arena Terms Parser

Crates.io Documentation License: LGPL-3.0-or-later Rust

Parser for arena-backed, Prolog-like terms.

This crate provides a lexer, parser, and operator handling for Prolog-style terms. It depends on the arena_terms crate to store terms efficiently in an arena and is built on top of the parlex core library.

Features

  • Lexer Tokenizes atoms, variables, numbers, strings, dates, and symbols.

  • Parser An SLR(1) parser (generated by parlex-gen) that produces arena_terms::Term values.

  • Operators Dynamically handles operator fixity, associativity, and precedence rules.

  • Arena-backed Terms are stored compactly in arenas for efficient allocation and traversal.

Usage

Parsing a string into arena terms:

use arena_terms::Arena;
use arena_terms_parser::{TermParser, define_opers};
use try_next::{IterInput, TryNextWithContext};

const DEFS: &str = "[
    op('+'(x,y), infix, 380, left),
    op('*'(x,y), infix, 400, left),
]";

const TERMS: &str = "
    likes(mary, pizza).
    2 + 2 * 3 = 8 .
";

fn main() {
    let mut arena = Arena::try_with_default_opers().unwrap();
    define_opers(&mut arena, IterInput::from(DEFS.bytes())).unwrap();
    let mut parser = TermParser::try_new(IterInput::from(TERMS.bytes())).unwrap();

    while let Some(term) = parser.try_next_with_context(&mut arena).unwrap() {
        println!("{}", term.display(&arena));
    }
}

CLI

Build the binary with:

cargo build --release --bin arena-terms-parser

Then run:

./target/release/parser --terms input.ax

Documentation

For detailed API documentation, visit docs.rs/arena-terms-parser.

License

Copyright (c) 2005–2025 IKH Software, Inc.

Released under the terms of the GNU Lesser General Public License, version 3.0 or (at your option) any later version (LGPL-3.0-or-later).

See Also

  • parlex - Parlex core core library
  • parlex-gen - Lexer and parser generation tools (alex and aslr)
  • arena-terms - Arena-backed Prolog-like terms
Commit count: 0

cargo fmt