Skip to main content

amaru_uplc/syn/
mod.rs

1use chumsky::{extra::SimpleState, prelude::*, ParseResult, Parser};
2
3mod constant;
4mod data;
5mod program;
6mod term;
7mod typ;
8mod types;
9mod utils;
10mod version;
11
12use crate::{
13    arena::Arena, binder::DeBruijn, constant::Constant, data::PlutusData, program::Program,
14    term::Term,
15};
16
17pub fn parse_program<'a>(
18    arena: &'a Arena,
19    input: &'a str,
20) -> ParseResult<&'a Program<'a, DeBruijn>, Rich<'a, char>> {
21    let mut initial_state = SimpleState(types::State::new(arena));
22
23    program::parser().parse_with_state(input, &mut initial_state)
24}
25
26pub fn parse_term<'a>(
27    arena: &'a Arena,
28    input: &'a str,
29) -> ParseResult<&'a Term<'a, DeBruijn>, Rich<'a, char>> {
30    let mut initial_state = SimpleState(types::State::new(arena));
31
32    term::parser().parse_with_state(input, &mut initial_state)
33}
34
35pub fn parse_constant<'a>(
36    arena: &'a Arena,
37    input: &'a str,
38) -> ParseResult<&'a Constant<'a>, Rich<'a, char>> {
39    let mut initial_state = SimpleState(types::State::new(arena));
40
41    constant::parser().parse_with_state(input, &mut initial_state)
42}
43
44pub fn parse_data<'a>(
45    arena: &'a Arena,
46    input: &'a str,
47) -> ParseResult<&'a PlutusData<'a>, Rich<'a, char>> {
48    let mut initial_state = SimpleState(types::State::new(arena));
49
50    data::parser().parse_with_state(input, &mut initial_state)
51}