Skip to main content

scarf_parser/parser/
mod.rs

1// =======================================================================
2// mod.rs
3// =======================================================================
4// The top-level interface for the parser
5
6pub(crate) mod behavioral_statements;
7pub(crate) mod combinators;
8pub(crate) mod declarations;
9pub(crate) mod expressions;
10pub(crate) mod general;
11pub(crate) mod instantiations;
12pub(crate) mod pratt;
13pub(crate) mod primitive_instances;
14pub(crate) mod source_text;
15pub(crate) mod spanned_token;
16pub(crate) mod specify_section;
17pub(crate) mod udp_declaration_and_instantiation;
18pub(crate) mod utils;
19use crate::*;
20pub(crate) use behavioral_statements::*;
21pub(crate) use combinators::*;
22pub(crate) use declarations::*;
23pub(crate) use expressions::*;
24pub(crate) use general::*;
25pub(crate) use instantiations::*;
26pub(crate) use pratt::*;
27pub(crate) use primitive_instances::*;
28use scarf_syntax::*;
29pub(crate) use source_text::*;
30pub use spanned_token::*;
31pub(crate) use specify_section::*;
32pub(crate) use udp_declaration_and_instantiation::*;
33pub(crate) use utils::*;
34use winnow::error::{ErrMode, ParserError};
35
36pub fn parse<'s>(
37    input: &'s [SpannedToken<'s>],
38) -> Result<SourceText<'s>, VerboseError<'s>> {
39    let mut stateful_input = Tokens {
40        input: TokenSlice::new(input),
41        state: None,
42    };
43    match source_text_parser.parse_next(&mut stateful_input) {
44        Ok(source_text) => Ok(source_text),
45        Err(ErrMode::Backtrack(err)) => Err(match stateful_input.state {
46            None => err,
47            Some(prev_err) => err.or(prev_err),
48        }),
49        Err(ErrMode::Cut(err)) => Err(err),
50        Err(ErrMode::Incomplete(_)) => {
51            panic!("Produced 'incomplete', an unsupported error")
52        }
53    }
54}