summaryrefslogtreecommitdiff
path: root/axisc/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'axisc/src/main.rs')
-rw-r--r--axisc/src/main.rs57
1 files changed, 41 insertions, 16 deletions
diff --git a/axisc/src/main.rs b/axisc/src/main.rs
index 9d358e8..6b49b6f 100644
--- a/axisc/src/main.rs
+++ b/axisc/src/main.rs
@@ -1,9 +1,11 @@
+use std::num::ParseFloatError;
+use std::str::FromStr;
use cli::Cli;
use clap::Parser;
use reader::read_file;
use reader::TokenScanner;
use lexer::Token;
-use crate::lexer::Literal;
+use crate::lexer::{Keyword, Literal, SimpleToken};
mod cli;
mod reader;
@@ -21,64 +23,87 @@ fn main() {
None => break,
Some('#') => {
scanner.advance(1);
- tokens.push(Token::Pound)
+ tokens.push(Token::SimpleToken(SimpleToken::Pound))
},
Some('*') => {
scanner.advance(1);
- tokens.push(Token::Multiply)
+ tokens.push(Token::SimpleToken(SimpleToken::Multiply))
},
Some('-') => {
scanner.advance(1);
- tokens.push(Token::Subtract)
+ tokens.push(Token::SimpleToken(SimpleToken::Subtract))
},
Some('+') => {
scanner.advance(1);
- tokens.push(Token::Add)
+ tokens.push(Token::SimpleToken(SimpleToken::Add))
},
Some('<') => {
scanner.advance(1);
- tokens.push(Token::LessThan)
+ tokens.push(Token::SimpleToken(SimpleToken::LessThan))
},
Some('>') => {
scanner.advance(1);
- tokens.push(Token::GreaterThan)
+ tokens.push(Token::SimpleToken(SimpleToken::GreaterThan))
},
Some('=') => {
scanner.advance(1);
- tokens.push(Token::Equals)
+ tokens.push(Token::SimpleToken(SimpleToken::Equals))
},
Some(';') => {
scanner.advance(1);
- tokens.push(Token::Semicolon)
+ tokens.push(Token::SimpleToken(SimpleToken::Semicolon))
},
Some('/') => {
scanner.advance(1);
- tokens.push(Token::Divide)
+ tokens.push(Token::SimpleToken(SimpleToken::Divide))
},
Some('%') => {
scanner.advance(1);
- tokens.push(Token::Percent)
+ tokens.push(Token::SimpleToken(SimpleToken::Percent))
},
Some('^') => {
scanner.advance(1);
- tokens.push(Token::Caret)
+ tokens.push(Token::SimpleToken(SimpleToken::Caret))
},
Some(':') => {
scanner.advance(1);
- tokens.push(Token::Colon)
+ tokens.push(Token::SimpleToken(SimpleToken::Colon))
},
Some('$') => {
scanner.advance(1);
- tokens.push(Token::Dollar)
+ tokens.push(Token::SimpleToken(SimpleToken::Dollar))
},
Some('\n') => {
scanner.advance(1);
- tokens.push(Token::LineFeed)
+ tokens.push(Token::SimpleToken(SimpleToken::LineFeed))
},
Some('"') => {
tokens.push(Token::Literal(Literal::string_literal_from_scanner(&mut scanner)))
+ },
+ Some(' ' | '\n') => {
+ scanner.advance(1);
+ },
+ Some(_) => {
+ let word = scanner.advance_word();
+ let word_number: Result<f64, ParseFloatError> = f64::from_str(&word);
+
+ match word_number {
+ Ok(n) => tokens.push(Token::Literal(Literal::Number(n))),
+ Err(_) => match word.as_ref() {
+ "" => (),
+ "True" => tokens.push(Token::Literal(Literal::Boolean(true))),
+ "False" => tokens.push(Token::Literal(Literal::Boolean(false))),
+ "Into" => tokens.push(Token::Keyword(Keyword::Into)),
+ "Let" => tokens.push(Token::Keyword(Keyword::Let)),
+ "As" => tokens.push(Token::Keyword(Keyword::As)),
+ "String" => tokens.push(Token::Keyword(Keyword::String)),
+ "Number" => tokens.push(Token::Keyword(Keyword::Number)),
+ "Array" => tokens.push(Token::Keyword(Keyword::Array)),
+ "Boolean" => tokens.push(Token::Keyword(Keyword::Boolean)),
+ _ => tokens.push(Token::Identifier(word))
+ }
+ }
}
- Some(_) => tokens.push(Token::Identifier(scanner.advance_word()))
}
}