Write parser.c in generate command
This commit is contained in:
parent
2e8b2ab8fb
commit
c0fad8b3c4
2 changed files with 7 additions and 9 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue