+1
-2
@@ -26,5 +26,4 @@ target
|
|||||||
|
|
||||||
/target
|
/target
|
||||||
|
|
||||||
/mist-test/build
|
**/build
|
||||||
/mist-test/output.json
|
|
||||||
|
|||||||
Generated
+2
-2
@@ -109,7 +109,7 @@ checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "mist-lang"
|
name = "mist-lang"
|
||||||
version = "0.0.3-alpha3"
|
version = "0.0.3-alpha4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cargo_metadata",
|
"cargo_metadata",
|
||||||
"mist-parser",
|
"mist-parser",
|
||||||
@@ -119,7 +119,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "mist-parser"
|
name = "mist-parser"
|
||||||
version = "0.1.3"
|
version = "0.1.4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"pest",
|
"pest",
|
||||||
"pest_derive",
|
"pest_derive",
|
||||||
|
|||||||
+9
-3
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "mist-lang"
|
name = "mist-lang"
|
||||||
version = "0.0.3-alpha3"
|
version = "0.0.3-alpha4"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
description = "The Mist programming language compiler"
|
description = "The Mist programming language compiler"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
@@ -8,13 +8,19 @@ repository = "https://github.com/mist-go/mist"
|
|||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
keywords = ["compiler", "language", "mist"]
|
keywords = ["compiler", "language", "mist"]
|
||||||
categories = ["compilers"]
|
categories = ["compilers"]
|
||||||
|
default-run = "mist"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
serde = { version = "1.0.228", features = ["serde_derive"] }
|
serde = { version = "1.0.228", features = ["serde_derive"] }
|
||||||
serde_json = "1.0.149"
|
serde_json = "1.0.149"
|
||||||
mist-parser = { path = "./parser", version = "0.1.3"}
|
mist-parser = { path = "./parser", version = "0.1.4"}
|
||||||
cargo_metadata = "0.23.1"
|
cargo_metadata = "0.23.1"
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
name = "mist"
|
name = "mist"
|
||||||
path = "src/main.rs"
|
path = "build/main.rs"
|
||||||
|
|
||||||
|
|
||||||
|
[[bin]]
|
||||||
|
name = "mist-lang"
|
||||||
|
path = "src/_header.rs"
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "mist-parser"
|
name = "mist-parser"
|
||||||
version = "0.1.3"
|
version = "0.1.4"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
description = "The Mist programming language parser"
|
description = "The Mist programming language parser"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ pub enum Statement {
|
|||||||
iterator: Expression,
|
iterator: Expression,
|
||||||
body: Box<Statement>,
|
body: Box<Statement>,
|
||||||
},
|
},
|
||||||
Match(Expression, Vec<(Pattern, Block)>),
|
Match(Expression, Vec<(Vec<Pattern>, Block)>),
|
||||||
|
|
||||||
Return(Option<Expression>),
|
Return(Option<Expression>),
|
||||||
Break,
|
Break,
|
||||||
|
|||||||
@@ -143,7 +143,7 @@ literal = {
|
|||||||
// ======================================================
|
// ======================================================
|
||||||
|
|
||||||
tuple_pattern = {
|
tuple_pattern = {
|
||||||
"(" ~ (identifier ~ ("," ~ identifier)*)? ~ ")"
|
"(" ~ (identifier ~ ("," ~ identifier)*) ~ ")"
|
||||||
}
|
}
|
||||||
|
|
||||||
named_tuple_pattern = {
|
named_tuple_pattern = {
|
||||||
@@ -446,8 +446,10 @@ for_stmt = {
|
|||||||
// MATCH
|
// MATCH
|
||||||
// ------------------------------------------------------
|
// ------------------------------------------------------
|
||||||
|
|
||||||
|
pattern_list = { pattern ~ ("|" ~ pattern)* }
|
||||||
|
|
||||||
match_item = {
|
match_item = {
|
||||||
pattern ~ "=>" ~ block
|
pattern_list ~ "=>" ~ block
|
||||||
}
|
}
|
||||||
|
|
||||||
match_stmt = {
|
match_stmt = {
|
||||||
@@ -477,7 +479,8 @@ array = {
|
|||||||
// ------------------------------------------------------
|
// ------------------------------------------------------
|
||||||
|
|
||||||
macro_inner_v = {
|
macro_inner_v = {
|
||||||
"(" ~ macro_inner_v* ~ ")"
|
string_lit
|
||||||
|
| ("(" ~ macro_inner_v* ~ ")")
|
||||||
| (!("(" | ")") ~ ANY)
|
| (!("(" | ")") ~ ANY)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ impl<'a> TryFrom<pest::iterators::Pair<'a, Rule>> for Statement {
|
|||||||
.map(|match_itms| {
|
.map(|match_itms| {
|
||||||
let mut match_inner = match_itms.into_inner();
|
let mut match_inner = match_itms.into_inner();
|
||||||
Ok((
|
Ok((
|
||||||
Pattern::try_from(match_inner.next().unwrap()).get()?,
|
collect_recovered(match_inner.next().unwrap().into_inner()).get()?,
|
||||||
Block::try_from(match_inner.next().unwrap()).get()?,
|
Block::try_from(match_inner.next().unwrap()).get()?,
|
||||||
))
|
))
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
pub mod builder;
|
||||||
|
pub mod codegen;
|
||||||
|
pub mod transpiler;
|
||||||
|
|
||||||
|
fn main() {}
|
||||||
+8
-1
@@ -646,7 +646,14 @@ impl ToRust for Statement {
|
|||||||
cg.indent += 1;
|
cg.indent += 1;
|
||||||
|
|
||||||
for itm in match_items {
|
for itm in match_items {
|
||||||
cg.add_indentedln(&format!("{} =>", itm.0.get_rust()));
|
cg.add_indentedln(&format!(
|
||||||
|
"{} =>",
|
||||||
|
itm.0
|
||||||
|
.into_iter()
|
||||||
|
.map(Pattern::get_rust)
|
||||||
|
.collect::<Vec<_>>()
|
||||||
|
.join(" | ")
|
||||||
|
));
|
||||||
cg.add_indentedln("{");
|
cg.add_indentedln("{");
|
||||||
cg.indent += 1;
|
cg.indent += 1;
|
||||||
itm.1.to_rust(cg);
|
itm.1.to_rust(cg);
|
||||||
|
|||||||
@@ -1,22 +1,23 @@
|
|||||||
use std::process::{self};
|
use <std::process>;
|
||||||
|
use <std::env>;
|
||||||
|
|
||||||
pub mod builder;
|
pub mod builder;
|
||||||
pub mod codegen;
|
pub mod codegen;
|
||||||
pub mod transpiler;
|
pub mod transpiler;
|
||||||
|
|
||||||
fn main() {
|
void main() {
|
||||||
let args: Vec<String> = std::env::args().collect();
|
Vec<String> args = env::args().collect();
|
||||||
|
|
||||||
if args.len() < 2 {
|
if (args.len() < 2) {
|
||||||
print_usage();
|
print_usage();
|
||||||
process::exit(1);
|
process::exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
match args[1].as_str() {
|
match (args[1].as_str()) {
|
||||||
"run" | "build" | "check" | "r" | "b" | "c" => {
|
"run" | "build" | "check" | "r" | "b" | "c" => {
|
||||||
let (config, root) = transpiler::build();
|
var (config, root) = transpiler::build();
|
||||||
println!("");
|
println!("");
|
||||||
if builder::build(args, config, root) {
|
if (builder::build(args, config, root)) {
|
||||||
println!("\x1b[32m\nBuild successful\x1b[0m");
|
println!("\x1b[32m\nBuild successful\x1b[0m");
|
||||||
} else {
|
} else {
|
||||||
println!("\x1b[31m\nBuild failed\x1b[0m");
|
println!("\x1b[31m\nBuild failed\x1b[0m");
|
||||||
@@ -39,7 +40,7 @@ fn main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn print_usage() {
|
void print_usage() {
|
||||||
println!("Mist - the mist compiler\n");
|
println!("Mist - the mist compiler\n");
|
||||||
println!(" View our documentation! \x1b[35mhttps://mist.selimaj.dev\x1b[0m");
|
println!(" View our documentation! \x1b[35mhttps://mist.selimaj.dev\x1b[0m");
|
||||||
println!(" Follow us on github! \x1b[35mhttps://github.com/mist-go\x1b[0m\n");
|
println!(" Follow us on github! \x1b[35mhttps://github.com/mist-go\x1b[0m\n");
|
||||||
Reference in New Issue
Block a user