diff --git a/src/schala_lang/autoparser.rs b/src/schala_lang/autoparser.rs index b71ea17..da1c27c 100644 --- a/src/schala_lang/autoparser.rs +++ b/src/schala_lang/autoparser.rs @@ -5,6 +5,8 @@ use schala_lang::{tokenizing, parsing}; use self::tokenizing::*; use self::parsing::*; +use schala_lang::tokenizing::TokenType::*; + struct AutoParser { tokens: Vec, } @@ -32,11 +34,27 @@ impl AutoParser { self.tokens.pop().map(|t| { t.token_type }).unwrap_or(TokenType::EOF) } fn parse(&mut self) -> (Result, Vec) { - let err = ParseError { msg: format!("Not yet implemented") }; - (Err(err), vec![]) + let ast = self.program(); + (ast, vec![]) } } +impl AutoParser { + fn program(&mut self) -> ParseResult { + let etype = self.literal()?; + Ok(AST(vec![Statement::ExpressionStatement(Expression(etype, None))])) + } + + fn literal(&mut self) -> ParseResult { + Ok(match self.next() { + Keyword(Kw::True) => ExpressionType::BoolLiteral(true), + Keyword(Kw::False) => ExpressionType::BoolLiteral(false), + _ => return ParseError::new("bad!") + }) + } +} + + pub struct Schala { } impl Schala { diff --git a/src/schala_lang/parsing.rs b/src/schala_lang/parsing.rs index 1b53dd6..5feab2e 100644 --- a/src/schala_lang/parsing.rs +++ b/src/schala_lang/parsing.rs @@ -101,7 +101,7 @@ pub struct ParseError { } impl ParseError { - fn new(msg: &str) -> ParseResult { + pub fn new(msg: &str) -> ParseResult { Err(ParseError { msg: msg.to_string() }) } }