diff --git a/Cargo.lock b/Cargo.lock index bdd4e6a..6f3b4cd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,7 +1,7 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] -name = "deimos-lang" +name = "deimos" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index a91763c..951ab70 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,10 @@ [package] -name = "deimos-lang" +name = "deimos" version = "0.1.0" edition = "2021" +[[bin]] +name = "dmc" +path = "src/bin/compiler" + [dependencies] diff --git a/src/bin/compiler/main.rs b/src/bin/compiler/main.rs new file mode 100644 index 0000000..0661eb6 --- /dev/null +++ b/src/bin/compiler/main.rs @@ -0,0 +1,13 @@ +use deimos::lexer::tokenize; +use std::process::exit; + +fn main() { + let src = String::from("print 'Hello, World!'"); + let r = tokenize(&src); + if let Err(e) = r { + eprintln!("{}", e); + exit(1); + } + let tokens = r.unwrap(); + println!("{:?}", tokens); +} \ No newline at end of file diff --git a/src/lexer/mod.rs b/src/lexer/mod.rs index 3c32844..be86a3d 100644 --- a/src/lexer/mod.rs +++ b/src/lexer/mod.rs @@ -31,7 +31,7 @@ pub enum Token { Abstract, } -pub fn tokenize(input: &String) -> Result, &'static str> { +pub fn tokenize(input: &String) -> Result, String> { let mut tokens: Vec = Vec::new(); let mut peekable = input.chars().peekable(); while let Some(c) = peekable.next() { @@ -72,12 +72,14 @@ pub fn tokenize(input: &String) -> Result, &'static str> { match count { 1 => tokens.push(Token::Dot), 3 => tokens.push(Token::Ellipsis), - _ => return Err("Unexpected number of tokens after '.'"), + _ => return Err(String::from("Unexpected number of tokens after '.'")), } } _ => { if let Some(token) = match_identifier_or_keyword(c, &mut peekable) { tokens.push(token); + } else { + return Err(String::from(format!("Unexpected token: {}", c))); } } } diff --git a/src/lib.rs b/src/lib.rs index e38af6e..d273cf0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,2 +1,2 @@ -mod lexer; -mod vm; +pub mod lexer; +pub mod vm;