aboutsummaryrefslogtreecommitdiff
path: root/src/ast/mod.rs
diff options
context:
space:
mode:
authorCody <cody@codyq.dev>2023-01-29 20:58:04 -0600
committerCody <cody@codyq.dev>2023-01-29 20:58:04 -0600
commita653a6602fe5ae5eb4739755db7b34bc92ecdadf (patch)
tree2d99c570ccd77767e1d5fcf9b098d45c79cbe6e4 /src/ast/mod.rs
parentb856e5c7226e71e500be5eff7079c5d3b0e9e2f4 (diff)
downloadsloth-a653a6602fe5ae5eb4739755db7b34bc92ecdadf.tar.gz
More stuffs
Diffstat (limited to 'src/ast/mod.rs')
-rw-r--r--src/ast/mod.rs55
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,
+ };
+}