From 921a7fe8342d208ae6162b7e4851720dd3aa356e Mon Sep 17 00:00:00 2001 From: Jesse Brault Date: Fri, 29 Nov 2024 19:13:59 -0600 Subject: [PATCH] Change crate name to 'deimos'; make compiler bin subproject. --- Cargo.lock | 4 ++-- Cargo.toml | 6 +++++- src/bin/compiler/main.rs | 13 +++++++++++++ src/lexer/mod.rs | 6 ++++-- src/lib.rs | 4 ++-- 5 files changed, 26 insertions(+), 7 deletions(-) create mode 100644 src/bin/compiler/main.rs 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;