Attempt to write tree printing for the parse tree

I have _no_ idea if this will work or not.
This commit is contained in:
Eryn Wells 2016-12-29 15:14:56 -05:00
parent 7f6ef1ac1e
commit a7c6caec95
2 changed files with 30 additions and 8 deletions

View file

@ -9,16 +9,32 @@ pub use self::constant::Constant;
mod constant;
mod program;
use self::constant::ConstantValue;
trait Expression {}
impl fmt::Debug for Expression {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "Expression")
}
}
impl TreeDebug for Expression {}
impl<T: constant::ConstantValue> Expression for Constant<T> {}
/// Conveniently print out a node in the tree
trait TreeDebug: fmt::Debug {
fn tree_indent(indent: u8) -> String {
(0..10).fold(String::new(), |mut acc, i| {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
self.tree_fmt(f, 0)
}
fn tree_indent(&self, indent: u8) -> String {
(0..10).fold(String::new(), |mut acc, _| {
acc.push(' ');
acc
})
}
fn tree_fmt(&self, f: &mut fmt::Formatter, indent: u8) -> fmt::Result {
write!(f, "{}{:?}", self.tree_indent(indent), self)
let spaces: String = self.tree_indent(indent);
write!(f, "{}{:?}", spaces, self)
}
}

View file

@ -5,17 +5,23 @@
use std::fmt;
use super::TreeDebug;
use super::Constant;
use super::Expression;
pub struct Program {
forms: Vec<Constant>,
forms: Vec<Box<Expression>>,
}
impl fmt::Debug for Program {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
self.tree_fmt(f, 0)
}
}
impl TreeDebug for Program {
fn tree_fmt(&self, f: fmt::Formatter, indent: u8) -> fmt::Result {
fn tree_fmt(&self, f: &mut fmt::Formatter, indent: u8) -> fmt::Result {
let spaces = self.tree_indent(indent);
let mut result = write!(f, "{}Program", spaces);
for form in self.forms {
for form in self.forms.iter() {
if result.is_err() {
break;
}