diff options
Diffstat (limited to 'src/ast/mod.rs')
| -rw-r--r-- | src/ast/mod.rs | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/ast/mod.rs b/src/ast/mod.rs new file mode 100644 index 0000000..73e73b3 --- /dev/null +++ b/src/ast/mod.rs @@ -0,0 +1,55 @@ +#![allow(dead_code)] + +pub mod display; + +use crate::lexer::Token; + +#[derive(Clone)] +pub enum Statement<'a> { + Val { + identifier: &'a Token<'a>, + initializer: &'a Expression<'a>, + }, + Var { + identifier: &'a Token<'a>, + initializer: &'a Expression<'a>, + }, + Expression { + expr: &'a Expression<'a>, + }, +} + +#[derive(Clone)] +pub enum Expression<'a> { + // Basic + Literal(Value), + Unary { + operation: Operation, + expr: &'a Expression<'a>, + }, + Binary { + operation: Operation, + lhs: &'a Expression<'a>, + rhs: &'a Expression<'a>, + }, + // Grouping +} + +#[derive(Clone)] +pub enum Operation { + Add, + Subtract, +} + +#[derive(Clone)] +pub struct Value(pub i32); + +#[test] +fn test() { + let right = Expression::Literal(Value(7)); + let _ = Expression::Binary { + operation: Operation::Add, + lhs: &Expression::Literal(Value(5)), + rhs: &right, + }; +} |
