From a4980b8dbf1394c2b302f1de7c72d2264426b86e Mon Sep 17 00:00:00 2001 From: Mel Date: Wed, 20 Oct 2021 22:15:08 +0200 Subject: Statement parsing. --- src/parse/ast/statement.rs | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/parse/ast/statement.rs (limited to 'src/parse/ast/statement.rs') diff --git a/src/parse/ast/statement.rs b/src/parse/ast/statement.rs new file mode 100644 index 0000000..eec589e --- /dev/null +++ b/src/parse/ast/statement.rs @@ -0,0 +1,39 @@ +use std::fmt::Display; + +use super::expression::Expression; + +#[derive(Debug)] +pub enum Statement { + Expression(Expression), + Print(Expression), + Return(Expression), +} + +impl Display for Statement { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + self.nested_fmt(f, 0) + } +} + +impl Statement { + pub(crate) fn nested_fmt( + &self, + f: &mut std::fmt::Formatter<'_>, + depth: usize, + ) -> std::fmt::Result { + let pad = " ".repeat(depth); + match self { + Statement::Expression(expression) => expression.nested_fmt(f, depth)?, + Statement::Print(expression) => { + writeln!(f, "{}Print:", pad)?; + expression.nested_fmt(f, depth + 1)?; + } + Statement::Return(expression) => { + writeln!(f, "{}Return:", pad)?; + expression.nested_fmt(f, depth + 1)?; + } + } + + Ok(()) + } +} -- cgit 1.4.1