diff --git a/src/ast.rs b/src/ast.rs new file mode 100644 index 0000000..3933d84 --- /dev/null +++ b/src/ast.rs @@ -0,0 +1,41 @@ +#[derive(Debug, Clone)] +pub enum Statement { + Assign { + target: Location, + source: Box, + }, + Call { + callee: String, + args: Vec, + }, +} + +#[derive(Debug, Clone)] +pub enum Location { + Variable { + name: String, + }, + Field { + table: Box, + index: Box, + }, +} + +#[derive(Debug, Clone)] +pub enum Expression { + Constant(Constant), + Variable(Location), + Call { + callee: String, + args: Vec, + }, +} + +#[derive(Debug, Clone, Default)] +pub enum Constant { + #[default] + Nil, + Boolean(bool), + Number(i64), + String(String), +} diff --git a/src/lib.rs b/src/lib.rs index 85ce649..040ece4 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,2 +1,3 @@ +pub mod ast; pub mod scope; pub mod types;