From 25f5188d8c02f1c29501f2f2aaaf162992a14895 Mon Sep 17 00:00:00 2001 From: greg Date: Wed, 22 Jul 2015 03:45:42 -0700 Subject: [PATCH] Move definition around --- src/parser.rs | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/parser.rs b/src/parser.rs index 66c0e05..bdc1d0d 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -20,24 +20,13 @@ pub enum ParseResult { type Tokens<'a> = Peekable>; +/* expect calls .next() and thus advances the token list */ macro_rules! expect { ($tok:expr, $tokens:expr) => ( if !expect_token($tok, $tokens) { return ParseResult::Err(format!("Expected {:?}", $tok)); }) } -pub fn parse(input: Vec) -> ParseResult { - - let mut tokens: Tokens = input.iter().peekable(); - - if let ParseResult::Ok(ast) = let_expression(&mut tokens) { - expect!(EOF, &mut tokens); - return ParseResult::Ok(ast); - } - - return ParseResult::Err("Bad parse".to_string()); -} - fn expect_token(tok: Token, tokens: &mut Tokens) -> bool { if let Some(n) = tokens.next() { let next = (*n).clone(); @@ -54,9 +43,22 @@ fn expect_token(tok: Token, tokens: &mut Tokens) -> bool { } } - return false; + false } +pub fn parse(input: Vec) -> ParseResult { + + let mut tokens: Tokens = input.iter().peekable(); + + if let ParseResult::Ok(ast) = let_expression(&mut tokens) { + expect!(EOF, &mut tokens); + return ParseResult::Ok(ast); + } + + return ParseResult::Err("Bad parse".to_string()); +} + + fn let_expression(input: &mut Tokens) -> ParseResult { expect!(Identifier("let".to_string()), input); if let Some(&Identifier(ref name)) = input.next() {