feat(tazjin/rlox): Wire up parser to the REPL
Change-Id: I940448c63ce105d53a0f281b6320ffb01378f207 Reviewed-on: https://cl.tvl.fyi/c/depot/+/2235 Reviewed-by: tazjin <mail@tazj.in> Tested-by: BuildkiteCI
This commit is contained in:
parent
4812fc2ee6
commit
1835b2be99
2 changed files with 21 additions and 7 deletions
|
|
@ -11,17 +11,17 @@ use crate::scanner::{Token, TokenKind};
|
|||
// AST
|
||||
|
||||
#[derive(Debug)]
|
||||
struct Binary<'a> {
|
||||
pub struct Binary<'a> {
|
||||
left: Box<Expr<'a>>,
|
||||
operator: Token<'a>,
|
||||
right: Box<Expr<'a>>,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct Grouping<'a>(Box<Expr<'a>>);
|
||||
pub struct Grouping<'a>(Box<Expr<'a>>);
|
||||
|
||||
#[derive(Debug)]
|
||||
enum Literal {
|
||||
pub enum Literal {
|
||||
Boolean(bool),
|
||||
Number(f64),
|
||||
String(String),
|
||||
|
|
@ -29,13 +29,13 @@ enum Literal {
|
|||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct Unary<'a> {
|
||||
pub struct Unary<'a> {
|
||||
operator: Token<'a>,
|
||||
right: Box<Expr<'a>>,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
enum Expr<'a> {
|
||||
pub enum Expr<'a> {
|
||||
Binary(Binary<'a>),
|
||||
Grouping(Grouping<'a>),
|
||||
Literal(Literal),
|
||||
|
|
@ -200,3 +200,9 @@ impl<'a> Parser<'a> {
|
|||
return Ok(expr);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn parse<'a>(tokens: Vec<Token<'a>>) -> ExprResult<'a> {
|
||||
let mut parser = Parser { tokens, current: 0 };
|
||||
|
||||
parser.expression()
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue