1 pub use error::ErrorKind;
2 pub use parser::Token;
3 pub use token::TokenMetadata;
4
5 use crate::{FastHashMap, Module, ShaderStage};
6
7 mod lex;
8
9 mod ast;
10 use ast::Program;
11
12 mod error;
13 pub use error::ParseError;
14 mod constants;
15 mod functions;
16 mod parser;
17 #[cfg(test)]
18 mod parser_tests;
19 mod token;
20 mod types;
21 mod variables;
22
23 pub struct Options {
24 pub entry_points: FastHashMap<String, ShaderStage>,
25 pub defines: FastHashMap<String, String>,
26 }
27
parse_str(source: &str, options: &Options) -> Result<Module, ParseError>28 pub fn parse_str(source: &str, options: &Options) -> Result<Module, ParseError> {
29 let mut program = Program::new(&options.entry_points);
30
31 let lex = lex::Lexer::new(source, &options.defines);
32 let mut parser = parser::Parser::new(&mut program);
33 for token in lex {
34 parser.parse(token)?;
35 }
36 parser.end_of_input()?;
37
38 Ok(program.module)
39 }
40