Write parser.c in generate command

This commit is contained in:
Max Brunsfeld 2019-01-09 14:43:49 -08:00
parent 2e8b2ab8fb
commit c0fad8b3c4
2 changed files with 7 additions and 9 deletions

View file

@ -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<usize>,
) -> Result<String> {
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 {

View file

@ -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(&current_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");