diff options
| author | Mel <einebeere@gmail.com> | 2021-10-18 00:28:31 +0200 |
|---|---|---|
| committer | Mel <einebeere@gmail.com> | 2021-10-18 00:28:31 +0200 |
| commit | 338bffe40ffea3f7cec94e8da8d96813b7f844ff (patch) | |
| tree | e0905197244cc6b80eeb00758ec52553adf77702 /src | |
| parent | 690dfad4326293aef24c39db4be9abc19c8fb46e (diff) | |
| download | rabbithole-338bffe40ffea3f7cec94e8da8d96813b7f844ff.tar.zst rabbithole-338bffe40ffea3f7cec94e8da8d96813b7f844ff.zip | |
Parsing expressions scaffold
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.rs | 7 | ||||
| -rw-r--r-- | src/parse/ast.rs | 16 | ||||
| -rw-r--r-- | src/parse/mod.rs | 10 |
3 files changed, 30 insertions, 3 deletions
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<Expression>, + op: Token, + right: Box<Expression>, + }, + Unary { + op: Token, + right: Box<Expression>, + }, + Group(Box<Expression>), + 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<impl Iterator<Item = Token>>) -> Expression { + todo!() +} |
