syn_grammar_macros/
lib.rs1#![doc = include_str!("../README.md")]
2
3extern crate proc_macro;
4
5use proc_macro::TokenStream;
6use quote::quote;
7use syn_grammar_model::parse_grammar;
8
9mod backend;
11mod codegen;
12mod monomorphize;
13
14use backend::SynBackend;
15
16#[proc_macro]
32pub fn grammar(input: TokenStream) -> TokenStream {
33 let mut m_ast = match parse_grammar::<SynBackend>(input.into()) {
36 Ok(ast) => ast,
37 Err(e) => return e.to_compile_error().into(),
38 };
39
40 let monomorphizer = monomorphize::Monomorphizer::new(m_ast.rules);
42 m_ast.rules = monomorphizer.process();
43
44 match codegen::generate_rust(m_ast) {
46 Ok(stream) => stream.into(), Err(e) => e.to_compile_error().into(), }
49}
50
51#[doc(hidden)]
52#[proc_macro]
53pub fn include_grammar(_input: TokenStream) -> TokenStream {
54 quote! {
55 compile_error!("External files are removed in v0.2.0. Please move your grammar inline into grammar! { ... }.");
56 }.into()
57}