This commit is contained in:
publicmatt 2025-01-03 10:59:21 -08:00
parent 7dc82743c7
commit 8bb55d110a
3 changed files with 48 additions and 31 deletions

17
Justfile Normal file
View File

@ -0,0 +1,17 @@
test:
cargo test
build:
cargo build
scan-file FILENAME:
cargo run -- scan --file {{ FILENAME }}
scan COMMANDS:
cargo run -- scan "{{ COMMANDS }}"
compile COMMANDS:
cargo run -- run "{{ COMMANDS }}"
compile-file FILENAME:
cargo run -- run --file {{ FILENAME }}

View File

@ -14,7 +14,7 @@ pub struct Compiler<'a> {
}
impl<'a> Compiler<'a> {
pub fn from_source(source: &'a String) -> Self {
pub fn from_source(source: &'a str) -> Self {
Compiler {
scanner: Scanner::new(source),
chunk: None,
@ -31,23 +31,17 @@ impl<'a> Compiler<'a> {
self.expression();
//self.consume(TokenType::TokenEof, "Expect end of expression");
self.emit_return();
return !self.had_error;
!self.had_error
}
fn advance(&mut self) {
self.previous = self.current.clone();
while let Some(r) = self.scanner.next() {
match r {
Ok(token) => {
self.previous = self.current;
if let Some(Ok(token)) = self.scanner.next() {
self.current = Some(token);
break;
}
_ => {
} else {
self.error_at_current("error as current token");
}
}
}
}
fn expression(&mut self) {
()
@ -120,18 +114,18 @@ impl<'a> Compiler<'a> {
}
}
// use strum_macros::Display;
// #[derive(Display, PartialEq, Eq, PartialOrd, Ord)]
// enum Precedence {
// None,
// Assignment,
// Or,
// And,
// Equality,
// Comparison,
// Term,
// Factor,
// Unary,
// Call,
// Primary,
// }
use strum_macros::Display;
#[derive(Display, PartialEq, Eq, PartialOrd, Ord)]
enum Precedence {
None,
Assignment,
Or,
And,
Equality,
Comparison,
Term,
Factor,
Unary,
Call,
Primary,
}

View File

@ -101,9 +101,9 @@ fn scan_content(source: &str) {
fn run_content(source: &str) {
let mut _vm: VM = VM::new();
let owned = &source.to_owned();
// let mut compiler: Compiler = Compiler::from_source(owned);
// compiler.compile();
todo!("run_content is not hooked up yet");
let mut compiler: Compiler = Compiler::from_source(owned);
compiler.compile();
//todo!("run_content is not hooked up yet");
// let mut chunk: Chunk = compiler.compile();
// match vm.interpret(&mut chunk) {
// InterpretResult::InterpretOk => exit(0),
@ -111,3 +111,9 @@ fn run_content(source: &str) {
// InterpretResult::InterpretRuntimeError => exit(70),
// }
}
fn compile_content(source: &str) {
let mut _vm: VM = VM::new();
let owned = &source.to_owned();
let mut compiler: Compiler = Compiler::from_source(owned);
compiler.compile();
}