1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
use crate::err::Error;
use crate::module::*;

#[macro_use]
mod parser_err;
mod tokens;

#[cfg(not(test))]
#[macro_use]
mod parser;
#[cfg(test)]
#[macro_use]
pub mod parser;

#[cfg(not(test))]
mod expr_parser;
#[cfg(test)]
pub mod expr_parser;

#[cfg(test)]
mod parser_tests;

pub fn parse_module(input: UnparsedModule) -> Result<ParsedModule, Error> {
    let (module, source) = (input.module, input.source);
    let tokenizer = tokens::Tokenizer::new(&module);
    let mut tokenizer = tokens::BufferedTokenizer::new(tokenizer);

    let module = parser::module(&mut tokenizer).map_err(|e| Error::ParseErr(e.to_string()))?;
    Ok(ParsedModule::new(module, source))
}

#[cfg(test)]
pub fn buffer_input(input: &str) -> tokens::BufferedTokenizer {
    let tokenizer = tokens::Tokenizer::new(input);
    tokens::BufferedTokenizer::new(tokenizer)
}