summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock2
-rw-r--r--axis-rt/Cargo.toml2
-rw-r--r--axisc/src/lexer.rs22
-rw-r--r--axisc/src/main.rs8
-rw-r--r--axisc/src/reader.rs4
5 files changed, 29 insertions, 9 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 40bae0a..9bbd091 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -52,7 +52,7 @@ dependencies = [
[[package]]
name = "axis-rt"
-version = "0.1.0"
+version = "0.0.1"
dependencies = [
"clap",
]
diff --git a/axis-rt/Cargo.toml b/axis-rt/Cargo.toml
index 0d81c85..03c5358 100644
--- a/axis-rt/Cargo.toml
+++ b/axis-rt/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "axis-rt"
-version = "0.1.0"
+version = "0.0.1"
edition = "2021"
description = "A runtime for the Axis programming language."
authors = ["Raindrops", "ryze312"]
diff --git a/axisc/src/lexer.rs b/axisc/src/lexer.rs
index 3c6b30b..ae45497 100644
--- a/axisc/src/lexer.rs
+++ b/axisc/src/lexer.rs
@@ -1,3 +1,5 @@
+use crate::reader::TokenScanner;
+
#[derive(Debug)]
pub enum Token {
Identifier(String),
@@ -16,9 +18,9 @@ pub enum Token {
Add,
Subtract,
LineFeed,
- Quote,
}
+#[derive(Debug)]
pub enum Literal {
String(String),
Number(f64),
@@ -26,9 +28,27 @@ pub enum Literal {
Array(Array)
}
+#[derive(Debug)]
pub enum Array {
StringArray(Vec<String>),
NumberArray(Vec<f64>),
BooleanArray(Vec<bool>),
MultiDimensionalArray(Vec<Array>)
}
+
+impl Literal {
+ pub fn string_literal_from_scanner(token_scanner: &mut TokenScanner) -> Literal {
+ token_scanner.advance(1);
+ let mut string = String::new();
+
+ loop {
+ match token_scanner.advance(1) {
+ Some('"') => break,
+ Some(c) => string.push(c),
+ None => todo!("Reached EOF before end of string")
+ }
+ }
+
+ Literal::String(string)
+ }
+}
diff --git a/axisc/src/main.rs b/axisc/src/main.rs
index 9bf48cc..9d358e8 100644
--- a/axisc/src/main.rs
+++ b/axisc/src/main.rs
@@ -3,6 +3,7 @@ use clap::Parser;
use reader::read_file;
use reader::TokenScanner;
use lexer::Token;
+use crate::lexer::Literal;
mod cli;
mod reader;
@@ -70,14 +71,13 @@ fn main() {
scanner.advance(1);
tokens.push(Token::Dollar)
},
- Some('"') => {
- scanner.advance(1);
- tokens.push(Token::Quote)
- },
Some('\n') => {
scanner.advance(1);
tokens.push(Token::LineFeed)
},
+ Some('"') => {
+ tokens.push(Token::Literal(Literal::string_literal_from_scanner(&mut scanner)))
+ }
Some(_) => tokens.push(Token::Identifier(scanner.advance_word()))
}
}
diff --git a/axisc/src/reader.rs b/axisc/src/reader.rs
index 1764f2b..b75649a 100644
--- a/axisc/src/reader.rs
+++ b/axisc/src/reader.rs
@@ -30,12 +30,12 @@ pub fn read_file(source: &PathBuf) -> String {
}
pub struct TokenScanner<'a> {
- chars: Peekable<Chars<'a>>
+ pub chars: Peekable<Chars<'a>>
}
impl <'a> TokenScanner<'a> {
pub fn advance(&mut self, num: usize) -> Option<char> {
- self.chars.nth(num)
+ self.chars.nth(num - 1)
}
pub fn peek(&mut self) -> Option<&char> {