| Crates.io | sipha-parse |
| lib.rs | sipha-parse |
| version | 0.3.0 |
| created_at | 2025-11-19 17:48:16.091074+00 |
| updated_at | 2025-11-22 09:50:56.404281+00 |
| description | Parsing engine for sipha - grammar rules, parser state, and parsing logic |
| homepage | |
| repository | https://github.com/NyalephTheCat/sipha |
| max_upload_size | |
| id | 1940491 |
| size | 101,564 |
Core parsing engine for sipha - grammar evaluation, parser state, and error recovery.
sipha-parse provides the core parsing engine for sipha:
Add sipha-parse to your Cargo.toml:
[dependencies]
sipha-parse = "0.1.1"
use sipha_core::{span::Span, token::Token, traits::TokenKind};
use sipha_parse::{Parser, ParserState, helpers};
use sipha_tree::{NodeArena, RawNodeId};
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
enum Token { Ident, Plus }
impl TokenKind for Token { fn is_trivia(&self) -> bool { false } }
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
enum Rule { Expr }
let mut parser = Parser::create();
parser.register_rule(
Rule::Expr,
helpers::seq(vec![
helpers::token(Token::Ident),
helpers::token(Token::Plus),
helpers::token(Token::Ident),
]),
);
let tokens = vec![
Token::create(Token::Ident, Span::new(0, 1), "a", Vec::new(), Vec::new()),
Token::create(Token::Plus, Span::new(1, 2), "+", Vec::new(), Vec::new()),
Token::create(Token::Ident, Span::new(2, 3), "b", Vec::new(), Vec::new()),
];
let mut arena: NodeArena<Token, Rule, RawNodeId> = NodeArena::new();
let mut state = ParserState::new(&tokens, &mut arena, false, ());
match parser.parse_rule(Rule::Expr, &mut state) {
Ok(_) => println!("Parsed successfully!"),
Err(e) => eprintln!("Parse error: {:?}", e),
}
This project is licensed under the MIT License - see the LICENSE file for details.