@@ -12,6 +12,41 @@ pub enum Node {
12
12
Lambda ( usize , Box < Node > ) ,
13
13
}
14
14
15
+ impl Node {
16
+ pub fn dump_tree ( & self , indent : usize ) {
17
+ match self {
18
+ Node :: Integer ( value) => println ! ( "{:indent$}Integer({})" , "" , value, indent = indent) ,
19
+ Node :: String ( value) => println ! ( "{:indent$}String({})" , "" , value, indent = indent) ,
20
+ Node :: Boolean ( value) => println ! ( "{:indent$}Boolean({})" , "" , value, indent = indent) ,
21
+ Node :: Variable ( value) => println ! ( "{:indent$}Variable({})" , "" , value, indent = indent) ,
22
+ Node :: UnaryOperator ( operator, operand) => {
23
+ println ! ( "{:indent$}UnaryOperator({})" , "" , operator, indent = indent) ;
24
+ operand. dump_tree ( indent + 2 ) ;
25
+ }
26
+ Node :: BinaryOperator ( operator, left, right) => {
27
+ println ! (
28
+ "{:indent$}BinaryOperator({})" ,
29
+ "" ,
30
+ operator,
31
+ indent = indent
32
+ ) ;
33
+ left. dump_tree ( indent + 2 ) ;
34
+ right. dump_tree ( indent + 2 ) ;
35
+ }
36
+ Node :: If ( condition, then_branch, else_branch) => {
37
+ println ! ( "{:indent$}If" , "" , indent = indent) ;
38
+ condition. dump_tree ( indent + 2 ) ;
39
+ then_branch. dump_tree ( indent + 2 ) ;
40
+ else_branch. dump_tree ( indent + 2 ) ;
41
+ }
42
+ Node :: Lambda ( arity, body) => {
43
+ println ! ( "{:indent$}Lambda({})" , "" , arity, indent = indent) ;
44
+ body. dump_tree ( indent + 2 ) ;
45
+ }
46
+ }
47
+ }
48
+ }
49
+
15
50
pub struct Parser < ' a > {
16
51
tokens : & ' a [ Token ] ,
17
52
position : usize ,
0 commit comments