refactor: remove unused rule convert

上级 02f4bdad
......@@ -225,14 +225,13 @@ impl Grammar {
anchor_position: i32,
) {
let mut rule = stack.get_rule(self);
println!("start compile: {:?}", rule.clone().type_of());
rule.compile(
let compiled_rule = rule.compile(
self,
stack.end_rule,
is_first_line,
line_pos == anchor_position,
);
println!("{:?}", rule.type_of());
println!("{:?}", compiled_rule);
}
pub fn tokenize_line(&mut self, line_text: String, prev_state: Option<StackElement>) {
......
pub mod rule_convert;
pub mod rule_factory;
pub mod abstract_rule;
......
use crate::rule::{
AbstractRule, BeginEndRule, BeginWhileRule, CaptureRule, IncludeOnlyRule, MatchRule,
};
use std::collections::BTreeMap as Map;
#[derive(Serialize, Debug)]
pub struct RuleList {
#[serde(flatten)]
match_rule: Option<MatchRule>,
#[serde(flatten)]
include_only_rule: Option<IncludeOnlyRule>,
#[serde(flatten)]
capture: Option<CaptureRule>,
#[serde(flatten)]
begin_while_rule: Option<BeginWhileRule>,
#[serde(flatten)]
begin_end_rule: Option<BeginEndRule>,
}
// todo: Convert generic trait T back to struct
// https://users.rust-lang.org/t/convert-generic-trait-t-back-to-struct/11581
fn abstract_rule_to_json(map: Map<i32, Box<dyn AbstractRule>>) {
let mut rule_list: Vec<RuleList> = vec![];
// for (key, value) in map {
// if value.type_of() == "BeginEndRule" {
// rule_list.push(RuleList {
// match_rule: None,
// include_only_rule: None,
// capture: None,
// begin_while_rule: None,
// begin_end_rule: Some(*value as BeginEndRule),
// })
// } else if value.type_of() == "BeginWhileRule" {
// rule_list.push(RuleList {
// match_rule: None,
// include_only_rule: None,
// capture: None,
// begin_end_rule: None,
// begin_while_rule: Some(*value as BeginWhileRule),
// })
// }
// }
let j = serde_json::to_string(&rule_list).unwrap();
println!("{:?}", j);
}
#[cfg(test)]
mod tests {
use crate::grammar::Grammar;
use crate::inter::IRawGrammar;
use crate::rule::rule_convert::abstract_rule_to_json;
use std::fs::File;
use std::io::Read;
use std::path::Path;
#[test]
fn should_build_text_grammar() {
let code = "
GitHub 漫游指南
";
let grammar = to_grammar("test-cases/first-mate/fixtures/text.json", code);
abstract_rule_to_json(grammar.rule_id2desc);
}
fn to_grammar(grammar_path: &str, code: &str) -> Grammar {
let path = Path::new(grammar_path);
let mut file = File::open(path).unwrap();
let mut data = String::new();
file.read_to_string(&mut data).unwrap();
let g: IRawGrammar = serde_json::from_str(&data).unwrap();
let mut grammar = Grammar::new(g);
let c_code = String::from(code);
for line in c_code.lines() {
grammar.tokenize_line(String::from(line), None)
}
grammar
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册