Skip to main content

stacked/
stacked.rs

1extern crate utf_railroad;
2
3use utf_railroad::{Diagram, Terminal, NonTerminal, Optional, Repeat, Sequence};
4
5fn main() {
6    let diagram = Diagram::default()
7        .push(Box::new(Terminal::new("CREATE")))
8        .push(Box::new(Terminal::new("VIRTUAL")))
9        .push(Box::new(Terminal::new("TABLE")))
10        .push(Box::new(
11            Optional::new(Box::new(
12                Sequence::default()
13                    .push(Box::new(Terminal::new("IF")))
14                    .push(Box::new(Terminal::new("NOT")))
15                    .push(Box::new(Terminal::new("EXISTS")))
16            ))
17        ))
18        .next_row()
19        .push(Box::new(
20            Optional::new(Box::new(
21                Sequence::default()
22                    .push(Box::new(NonTerminal::new("schema-name")))
23                    .push(Box::new(Terminal::new(".")))
24            ))
25        ))
26        .push(Box::new(NonTerminal::new("table-name")))
27        .next_row()
28        .push(Box::new(Terminal::new("USING")))
29        .push(Box::new(NonTerminal::new("module-name")))
30        .push(Box::new(
31            Optional::new(Box::new(
32                Sequence::default()
33                    .push(Box::new(Terminal::new("(")))
34                    .push(Box::new(
35                        Repeat::new(Box::new(
36                            NonTerminal::new("module-argument")
37                        ))
38                    ))
39                    .push(Box::new(Terminal::new(")")))
40            ))
41        ));
42    println!("{}", diagram);
43}