Added argument parsing
This commit is contained in:
Generated
+58
@@ -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"
|
||||||
|
|||||||
@@ -4,3 +4,4 @@ version = "0.1.0"
|
|||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
gumdrop = "0.8.1"
|
||||||
|
|||||||
+32
-5
@@ -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:?}");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user