Added argument parsing

This commit is contained in:
2026-07-10 02:41:16 -05:00
parent cf3e14c9e7
commit c07af077f3
3 changed files with 91 additions and 5 deletions
Generated
+58
View File
@@ -2,6 +2,64 @@
# It is not intended for manual editing. # It is not intended for manual editing.
version = 4 version = 4
[[package]]
name = "gumdrop"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5bc700f989d2f6f0248546222d9b4258f5b02a171a431f8285a81c08142629e3"
dependencies = [
"gumdrop_derive",
]
[[package]]
name = "gumdrop_derive"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "729f9bd3449d77e7831a18abfb7ba2f99ee813dfd15b8c2167c9a54ba20aa99d"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]] [[package]]
name = "matcha" name = "matcha"
version = "0.1.0" version = "0.1.0"
dependencies = [
"gumdrop",
]
[[package]]
name = "proc-macro2"
version = "1.0.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quote"
version = "1.0.46"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368"
dependencies = [
"proc-macro2",
]
[[package]]
name = "syn"
version = "1.0.109"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "unicode-ident"
version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
+1
View File
@@ -4,3 +4,4 @@ version = "0.1.0"
edition = "2024" edition = "2024"
[dependencies] [dependencies]
gumdrop = "0.8.1"
+32 -5
View File
@@ -1,5 +1,8 @@
use std::env::args; use std::env::args;
use std::fs::read_to_string;
use gumdrop::Options;
#[macro_use] #[macro_use]
mod lex; mod lex;
@@ -9,10 +12,34 @@ use parse::parse;
mod interpret; mod interpret;
use interpret::interpret; use interpret::interpret;
#[derive(Debug, Options)]
struct Opts {
#[options(help = "print help message")]
help: bool,
#[options(free, help = "matcha file")]
filename: Option<String>,
#[options(help = "raw matcha code to execute")]
execute: Option<String>,
}
fn main() { fn main() {
println!("\n"); // makes output easier to visually parse when run with cargo run let opt = Opts::parse_args_default_or_exit();
let args: String = args().skip(1).collect::<Vec<_>>().join(" "); let code = if let Some(code) = opt.execute {
let k = match lex_tokens(&args) { code
} else {
let args: Vec<_> = args().collect();
let filename = opt.filename.unwrap_or_else(|| {
eprintln!("{}: filename or -e option required", args[0]);
std::process::exit(1);
});
read_to_string(&filename).unwrap_or_else(|e| {
eprintln!("{}: unable to read file {filename}\n{e}", args[0]);
std::process::exit(1);
})
};
let k = match lex_tokens(&code) {
Ok(a) => a, Ok(a) => a,
Err((_, a)) => panic!("{a:?}"), Err((_, a)) => panic!("{a:?}"),
}; };
@@ -20,9 +47,9 @@ fn main() {
Ok(a) => a, Ok(a) => a,
Err(a) => panic!("{:?}", a.description), Err(a) => panic!("{:?}", a.description),
}; };
let stack = match interpret(p) { let _ = match interpret(p) {
Ok(a) => a, Ok(a) => a,
Err(a) => panic!("{:?}", a.description), Err(a) => panic!("{:?}", a.description),
}; };
println!("\nreturn: {stack:?}\n"); //println!("\nreturn: {stack:?}");
} }