Skip to content

Commit 40b04c2

Browse files
committed
chore: add dump tree util for debug
1 parent 04a09b7 commit 40b04c2

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

src/icfp/parser.rs

+35
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,41 @@ pub enum Node {
1212
Lambda(usize, Box<Node>),
1313
}
1414

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+
1550
pub struct Parser<'a> {
1651
tokens: &'a [Token],
1752
position: usize,

0 commit comments

Comments
 (0)