diff --git a/cli/src/generate/mod.rs b/cli/src/generate/mod.rs index 7dfe5a4b..366d2495 100644 --- a/cli/src/generate/mod.rs +++ b/cli/src/generate/mod.rs @@ -3,6 +3,7 @@ use self::parse_grammar::parse_grammar; use self::prepare_grammar::prepare_grammar; use self::render::render_c_code; use crate::error::Result; +use std::fs; use std::io::Write; use std::path::PathBuf; use std::process::{Command, Stdio}; @@ -17,11 +18,11 @@ mod rules; mod tables; pub fn generate_parser_for_grammar( - grammar_path: &PathBuf, + repo_path: &PathBuf, minimize: bool, state_ids_to_log: Vec, -) -> Result { - let grammar_json = load_js_grammar_file(grammar_path); +) -> Result<()> { + let grammar_json = load_js_grammar_file(&repo_path.join("grammar.js")); let input_grammar = parse_grammar(&grammar_json)?; let (syntax_grammar, lexical_grammar, inlines, simple_aliases) = prepare_grammar(&input_grammar)?; @@ -43,7 +44,8 @@ pub fn generate_parser_for_grammar( lexical_grammar, simple_aliases, ); - Ok(c_code) + fs::write(repo_path.join("src").join("parser.c"), c_code)?; + Ok(()) } fn load_js_grammar_file(grammar_path: &PathBuf) -> String { diff --git a/cli/src/main.rs b/cli/src/main.rs index 8dbf345a..604d3068 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -83,11 +83,7 @@ fn run() -> error::Result<()> { ids.filter_map(|id| usize::from_str_radix(id, 10).ok()) .collect() }); - let grammar_path = current_dir.join("grammar.js"); - let code = - generate::generate_parser_for_grammar(&grammar_path, minimize, state_ids_to_log)?; - println!("{}", code); - return Ok(()); + generate::generate_parser_for_grammar(¤t_dir, minimize, state_ids_to_log)?; } else if let Some(matches) = matches.subcommand_matches("test") { let debug = matches.is_present("debug"); let debug_graph = matches.is_present("debug-graph");