1mod build;
2mod builder;
3
4pub use builder::*;
5use smallvec::SmallVec;
6
7#[derive(Debug)]
8pub struct TreeMap<Output, ExtendConversion, TokenDef, TreeExtra> {
9 tokens: Vec<TokenDef>,
10 trees: Vec<Tree<Output, ExtendConversion, TreeExtra>>,
11}
12
13impl<Output, ExtendConversion, TokenDef, TreeExtra>
14 TreeMap<Output, ExtendConversion, TokenDef, TreeExtra>
15{
16 pub fn builder<TokenName, TreeName, TreeLabel>(
17 ) -> TreeMapBuilder<TokenName, TreeName, Output, ExtendConversion, TokenDef, TreeLabel, TreeExtra>
18 {
19 TreeMapBuilder::default()
20 }
21}
22
23#[derive(Debug)]
24struct Tree<Output, ExtendConversion, TreeExtra> {
25 delta: Vec<TreeDelta<Output, ExtendConversion, TreeExtra>>,
26 extends: SmallVec<[(TreePath, ExtendConversion); 1]>,
27 default: Output,
28 extra: TreeExtra,
29}
30
31#[derive(Debug)]
32struct TreePath {
33 tree: usize,
34 path: SmallVec<[usize; 2]>,
35}
36
37#[derive(Debug)]
38enum TreeDelta<Output, ExtendConversion, TreeExtra> {
39 Output(Output),
40 Goto(TreePath, Output),
41 Retry(TreePath),
42 Branch(Branch<Output, ExtendConversion, TreeExtra>),
43}
44
45#[derive(Debug)]
46struct Branch<Output, ExtendConversion, TreeExtra> {
47 out: Output,
48 tree: Tree<Output, ExtendConversion, TreeExtra>,
49}