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}