Start work on property sheet compilation

This commit is contained in:
Max Brunsfeld 2019-01-09 18:09:55 -08:00
parent c0fad8b3c4
commit 6bd550ca87
7 changed files with 532 additions and 48 deletions

View file

@ -13,6 +13,7 @@ mod grammars;
mod nfa;
mod parse_grammar;
mod prepare_grammar;
mod properties;
mod render;
mod rules;
mod tables;
@ -21,30 +22,34 @@ pub fn generate_parser_for_grammar(
repo_path: &PathBuf,
minimize: bool,
state_ids_to_log: Vec<usize>,
properties_only: bool,
) -> 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)?;
let (parse_table, main_lex_table, keyword_lex_table, keyword_capture_token) = build_tables(
&syntax_grammar,
&lexical_grammar,
&simple_aliases,
&inlines,
minimize,
state_ids_to_log,
)?;
let c_code = render_c_code(
&input_grammar.name,
parse_table,
main_lex_table,
keyword_lex_table,
keyword_capture_token,
syntax_grammar,
lexical_grammar,
simple_aliases,
);
fs::write(repo_path.join("src").join("parser.c"), c_code)?;
if !properties_only {
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)?;
let (parse_table, main_lex_table, keyword_lex_table, keyword_capture_token) = build_tables(
&syntax_grammar,
&lexical_grammar,
&simple_aliases,
&inlines,
minimize,
state_ids_to_log,
)?;
let c_code = render_c_code(
&input_grammar.name,
parse_table,
main_lex_table,
keyword_lex_table,
keyword_capture_token,
syntax_grammar,
lexical_grammar,
simple_aliases,
);
fs::write(repo_path.join("src").join("parser.c"), c_code)?;
}
properties::generate_property_sheets(repo_path)?;
Ok(())
}