From 338bffe40ffea3f7cec94e8da8d96813b7f844ff Mon Sep 17 00:00:00 2001 From: Mel Date: Mon, 18 Oct 2021 00:28:31 +0200 Subject: Parsing expressions scaffold --- src/main.rs | 7 ++++--- src/parse/ast.rs | 16 ++++++++++++++++ src/parse/mod.rs | 10 ++++++++++ 3 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 src/parse/ast.rs create mode 100644 src/parse/mod.rs diff --git a/src/main.rs b/src/main.rs index 3b23d8e..2dab78d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,12 +1,13 @@ mod lex; +mod parse; use lex::lexer::Lexer; +use crate::parse::parse; + fn main() { let source = "1 + 2"; let lexer = Lexer::new(source); - for token in lexer { - println!("{:?}", token); - } + println!("{:?}", parse(lexer.peekable())); } diff --git a/src/parse/ast.rs b/src/parse/ast.rs new file mode 100644 index 0000000..2f30eaf --- /dev/null +++ b/src/parse/ast.rs @@ -0,0 +1,16 @@ +use crate::lex::token::Token; + +#[derive(Debug)] +pub enum Expression { + Binary { + left: Box, + op: Token, + right: Box, + }, + Unary { + op: Token, + right: Box, + }, + Group(Box), + Literal(Token), +} diff --git a/src/parse/mod.rs b/src/parse/mod.rs new file mode 100644 index 0000000..2938131 --- /dev/null +++ b/src/parse/mod.rs @@ -0,0 +1,10 @@ +pub mod ast; + +use crate::parse::ast::Expression; +use std::iter::Peekable; + +use crate::lex::token::Token; + +pub fn parse(tokens: Peekable>) -> Expression { + todo!() +} -- cgit 1.4.1