Starting to do if statement parsing
This commit is contained in:
parent
169e662049
commit
edf100b583
@ -11,7 +11,8 @@ pub enum AST {
|
|||||||
Number(f64),
|
Number(f64),
|
||||||
BinOp(Box<AST>, Box<AST>, Box<AST>),
|
BinOp(Box<AST>, Box<AST>, Box<AST>),
|
||||||
Binding(String, Box<AST>),
|
Binding(String, Box<AST>),
|
||||||
Statements(Vec<AST>)
|
Statements(Vec<AST>),
|
||||||
|
IfStatement(Box<AST>, Box<AST>, Option<Box<AST>>)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub enum ParseResult {
|
pub enum ParseResult {
|
||||||
@ -120,9 +121,28 @@ fn let_expression(input: &mut Tokens) -> ParseResult {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn expression(input: &mut Tokens) -> ParseResult {
|
fn expression(input: &mut Tokens) -> ParseResult {
|
||||||
ParseResult::Err("dame".to_string())
|
let lookahead = input.peek().map(|i| i.clone());
|
||||||
|
println!("{:?}", lookahead);
|
||||||
|
match lookahead {
|
||||||
|
Some(&Keyword(Kw::If)) => {
|
||||||
|
input.next();
|
||||||
|
ParseResult::Ok( AST::IfStatement(
|
||||||
|
Box::new(AST::Number(1.0)),
|
||||||
|
Box::new(AST::Number(2.0)),
|
||||||
|
None))
|
||||||
|
},
|
||||||
|
|
||||||
|
_ => ParseResult::Err("error in expression()".to_string())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
fn if_expression(input: &mut Tokens) -> ParseResult {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
fn rhs(input: &mut Tokens) -> ParseResult {
|
fn rhs(input: &mut Tokens) -> ParseResult {
|
||||||
let next = input.next();
|
let next = input.next();
|
||||||
if let Some(&Identifier(ref value)) = next {
|
if let Some(&Identifier(ref value)) = next {
|
||||||
|
@ -92,9 +92,9 @@ pub fn tokenize(input: &str) -> Vec<Token> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn handle_identifier(identifier: String) -> Token {
|
fn handle_identifier(identifier: String) -> Token {
|
||||||
if identifier == "let" {
|
match &identifier[..] {
|
||||||
return Token::Keyword(Kw::Let);
|
"let" => Token::Keyword(Kw::Let),
|
||||||
|
"if" => Token::Keyword(Kw::If),
|
||||||
|
_ => Token::Identifier(identifier)
|
||||||
}
|
}
|
||||||
|
|
||||||
return Token::Identifier(identifier);
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user