titan_ast_runtime_lib/
lib.rs

1mod ast_automata;
2mod ast_automata_builder;
3mod automata_data;
4mod automata_tmp_ast;
5mod backtracking_bottom_up_ast_automata;
6mod backtracking_bottom_up_branch;
7mod byte_buffer;
8mod byte_buffered_input_stream;
9mod dfa_token_automata;
10mod error;
11mod fa;
12mod follow_filter_backtracking_bottom_up_ast_automata;
13mod key_word_automata;
14mod key_word_dfa_token_automata;
15mod persistent_data;
16mod persistent_object;
17mod reducing_symbol;
18mod super_backtracking_bottom_up_ast_automata;
19mod super_dfa_token_automata;
20mod syntax_dfa;
21mod token_automata;
22mod token_automata_builder;
23mod token_dfa;
24mod token_reducing_symbol_input_stream;
25
26pub mod ast;
27pub mod ast_application;
28
29#[cfg(test)]
30mod tests_in_lib {
31    use std::collections::BTreeSet;
32
33    use crate::{ast_application::RuntimeAutomataAstApplication, token_automata::TokenBuilder};
34
35    #[test]
36    fn build_json_ast() {
37        let automata_file_path =
38            "D:/github-pro/titan/titan-ast/test/json/automata.data".to_string();
39        let source_file_path =
40            "D://github-pro/titan/titan-ast/test/json/titanLanguageConfig.json".to_string();
41        build_ast(&automata_file_path, &source_file_path);
42    }
43
44    #[test]
45    fn build_c_ast() {
46        let automata_file_path = "D:/github-pro/titan/titan-ast/test/c/automata.data".to_string();
47        let source_file_path = "D://github-pro/titan/titan-ast/test/c/helloworld.c".to_string();
48        build_ast(&automata_file_path, &source_file_path);
49    }
50
51    fn build_ast(automata_file_path: &String, source_file_path: &String) {
52        let mut app = RuntimeAutomataAstApplication::default();
53
54        let set_context_result = app.set_context(automata_file_path);
55        if set_context_result.is_err() {
56            println!("{}", set_context_result.err().unwrap());
57            return;
58        }
59
60        let build_ast_result = app.build_ast(source_file_path);
61
62        match build_ast_result {
63            Ok(ast) => println!("{:#?}", ast),
64            Err(err) => println!("{err}"),
65        }
66    }
67
68    #[test]
69    fn build_c_token() {
70        let mut app = RuntimeAutomataAstApplication::default();
71
72        let automata_file_path = String::from("D:/github-pro/titan/titan-ast/test/c/automata.data");
73        let set_context_result = app.set_context(&automata_file_path);
74        if set_context_result.is_err() {
75            println!("{}", set_context_result.err().unwrap());
76            return;
77        }
78
79        let source_code_file_path =
80            String::from("D://github-pro/titan/titan-ast/test/c/helloworld.c");
81
82        let tokens = app.token_automata.build_token(&source_code_file_path);
83
84        match tokens {
85            Ok(t) => {
86                for i in 0..t.len() {
87                    let grammar_name = match &t[i].terminal {
88                        crate::ast::Grammar::TerminalGrammar(terminal) => terminal.name.clone(),
89                        crate::ast::Grammar::NonterminalGrammar(nonterminal) => {
90                            nonterminal.name.clone()
91                        }
92                    };
93                    println!(
94                        "$-->>>>>{}-{}<<<<<--$",
95                        String::from_utf8_lossy(&(t[i].text.data)).to_string(),
96                        grammar_name
97                    );
98                }
99            }
100            Err(err) => println!("{err}"),
101        };
102    }
103
104    #[test]
105    fn simple_test() {
106        let mut tree_set = BTreeSet::from([1, 2, 3, 4, 5, 99, 87, 6, 9]);
107        print!("{:?}", tree_set);
108
109        let reducing_symbol = 0;
110    }
111}