From ed8e20f0dbe792f658c42c23ecbc6cf53b9998f9 Mon Sep 17 00:00:00 2001 From: august kline Date: Tue, 3 Sep 2024 17:57:28 -0400 Subject: [PATCH] Initial commit --- .gitignore | 1 + Cargo.lock | 271 ++++++++++++++++++++++++++ Cargo.toml | 15 ++ README.md | 31 +++ fuzzy.jpeg | Bin 0 -> 165692 bytes macro.inc | 62 ++++++ routines.asm | 174 +++++++++++++++++ src/ast.rs | 168 ++++++++++++++++ src/bin/main.rs | 11 ++ src/lib.rs | 7 + src/parser/mod.rs | 483 ++++++++++++++++++++++++++++++++++++++++++++++ src/typecheck.rs | 84 ++++++++ 12 files changed, 1307 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 README.md create mode 100644 fuzzy.jpeg create mode 100644 macro.inc create mode 100644 routines.asm create mode 100644 src/ast.rs create mode 100644 src/bin/main.rs create mode 100644 src/lib.rs create mode 100644 src/parser/mod.rs create mode 100644 src/typecheck.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..eb6139b --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,271 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "allocator-api2" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" + +[[package]] +name = "cc" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "324c74f2155653c90b04f25b2a47a8a631360cb908f92a772695f430c7e31052" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chumsky" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eebd66744a15ded14960ab4ccdbfb51ad3b81f51f3f04a80adac98c985396c9" +dependencies = [ + "hashbrown", + "stacker", +] + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "fuzzy" +version = "0.1.0" +dependencies = [ + "chumsky", + "indextree", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", + "allocator-api2", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "indextree" +version = "4.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6f1b8dbc8f1e5a0f45e05b9293c42cbab79086baeb3e914d3936f8149edc4f" +dependencies = [ + "indextree-macros", +] + +[[package]] +name = "indextree-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357230c23ee6024223892ce0de19888a04139ca5bb94f5becb04d38b75a4bccf" +dependencies = [ + "either", + "itertools", + "proc-macro2", + "quote", + "strum", + "syn", + "thiserror", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "libc" +version = "0.2.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "proc-macro2" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "psm" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" +dependencies = [ + "cc", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rustversion" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" + +[[package]] +name = "stacker" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c886bd4480155fd3ef527d45e9ac8dd7118a898a46530b7b94c3e21866259fce" +dependencies = [ + "cc", + "cfg-if", + "libc", + "psm", + "winapi", +] + +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn", +] + +[[package]] +name = "syn" +version = "2.0.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b146dcf730474b4bcd16c311627b31ede9ab149045db4d6088b3becaea046462" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "thiserror" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..7e02987 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "fuzzy" +version = "0.1.0" +edition = "2021" + +[dependencies] +chumsky = { version = "0.9.3"} +indextree = "4.7.2" + +[lib] + +crate-type = ["lib"] + +[[bin]] +name = "main" diff --git a/README.md b/README.md new file mode 100644 index 0000000..a6b08fa --- /dev/null +++ b/README.md @@ -0,0 +1,31 @@ +# fuzzy + + + +a concatenative stack based programming language for [george](https://git.augustkline.com/august/george) <3 + +## design principles + +#### lightweight + +fuzzy runs on a 65\(c\)02 and nothing else + +#### antiportable + +fuzzy is part of george, and shouldn't run anywhere else. + +#### low-level + +(most of) fuzzy could be made with assembler macros, but that's no fun + +#### reliable + +if fuzzy says it can run, george can run it + +## feature progress + +- [x] parser + - roughly complete, but want to finish the whole pipeline before adding things to the parser +- [x] typechecker + - generates a "type stack" from parsed input and checks that word definition types match their body +- [ ] code generation diff --git a/fuzzy.jpeg b/fuzzy.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..60e4dcdeefca9f17eaea6ab35551aecd98a54265 GIT binary patch literal 165692 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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

q1epF98($N+U1 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 u+}Z-IDj5hTDi{-t3dyzBu5T}{E$$ x & x - y? ) +; - [ ] int (pos/neg 2s complement numbers) (lots of the above applies) +; - [ ] * mult +; - [ ] / div +; - [ ] + add +; - [ ] - sub +; - [ ] bool +; - [ ] & and +; - [ ] | or +; +; literals (these will be macros here, meaning when i implement them in the compiler they will depend on what literals r being pushed) +; - [ ] bool +; - [ ] num +; - [ ] str +; - [ ] char +; +; i/o +; - [ ] write (pop off an address and some data and store it) +; - [ ] read (pop off an address and push the data at that address onto the stack) +; - [ ] key (stealing algo from forth: pause execution until there's a key pressed, then push that key on the stack, i don't think this breaks anything, this could probably be written easily in fuzzy w/ write and read words) +; +; control flow +; - [ ] if (pop off a bool and jump to word, this will also depend on compiler, so writing as macro) + +; for example +; a is nat: 5 +; b is nat: 3 +; c bool is nat: if[a | b] *we'll figure out syntax later* +; true c +; +; (assuming c gets inlined since it's only referenced in the body) +; compiles to +; a: +; lda 5 +; dex +; dex +; sta 0, x +; rts +; +; b: +; lda 3 +; dex +; dex +; sta 0, x +; rts +; +; main: +; lda #1 +; dex +; dex +; sta 0, x +; stz 1,x +; lda #1 +; inx +; inx +; bit 2, x +; beq .falsy +; jsr a +; .falsy: +; jsr b +; stp ; or whatever here + + +; literals - the important thing is what the actual value is, each of these functions/macros are the same for any type, since the val is always just a 16 bit number + +.macro lit, val + lda val + dex + dex + sta 0, x + stz 1, x +.endm + +; control flow + +.macro if, bool, addr ; condition, where to jump if true; pops a bool off the stack + lda #1 + ; in either case we pop a cell off the top + inx + inx + ; but still need to check the bool on top + ; TODO: make sure this works + bit 2, x + beq .falsy + ; TODO: words will be defined as subroutines ig, + ; and will be returned from after execution + jsr addr + .falsy: +.endm + +; ops +nat_plus: + clc + lda 0, x + adc 2, x + sta 2, x + lda 1, x + adc 3, x + sta 3, x + inx + inx + rts + +nat_mult_2: + asl 0, x + rol 1, x + rts + +; after a silly escapade plotting u16 overflow charts +; i am making the executive decision that the vast majority +; of results (those that overflow 2 bytes) will be wrong :) +; for the sake of all results being 1 cell wide :) +; see this plot: ./overflow.png +; algo here: https://www.llx.com/Neil/a2/mult.html +nat_mult: + result = $200 + lda #0 ; initialize result to 0 + sta result+2 + ldy #16 ; 16 bits in NUM2 + .1: + lsr 0, x ; low byte of first number + ror 1, x + bcc .2 ; 0 or 1? + phy ; some register shuffling so we don't lose x stack pointer + tay + clc + lda 2, x ; low byte of second number + adc result + 2 ; add it to low byte of result + sta result + 2 + tya + ply + adc 3, x ; + .2: + ror + ror result + 2 + ror result + 1 + ror result + dey + bne .1 + sta result + 3 + dex + dex + ; TODO: double check endianness of result + lda result + 3 ; store high byte of result + sta 0, x + lda result + 2 ; store low byte of result + sta 1, x + rts + +; i/o +read: + lda (0, x) + sta 0, x + stz 1, x + rts + +write: + lda 0, x + sta (2, x) + inx + inx + inx + inx + rts + +key: + ;TODO + + diff --git a/src/ast.rs b/src/ast.rs new file mode 100644 index 0000000..d4e93df --- /dev/null +++ b/src/ast.rs @@ -0,0 +1,168 @@ +use core::panic; +use std::{any::Any, fmt::Display}; + +use crate::{ + typecheck::{self, Checkable, TypeStack}, + Symtab, +}; + +#[derive(PartialEq, Eq, Debug, Clone)] +// enum values are parser values, not compiler values, +// e.g. for `Str(String)` the `String` value will be put somewhere in memory +// and a pointer to it will be put on the stack +pub enum Value { + Nat(u16), // 16-bit natural number + Int(i16), // 16-bit twos-complement integer + Bool(bool), + Op(String), + Char(char), // 8-bit georgescii character padded with leading zeros (might change later) + Str(String), // 16-bit pointer to a string + Word(String), // 16-bit pointer to a word +} + +#[derive(PartialEq, Eq, Debug, Clone, PartialOrd, Ord)] +pub enum VType { + Nat, + Int, + Bool, + Char, + Str, +} + +#[derive(Eq, PartialEq, Debug, Clone)] +pub struct WType { + pub pop: Vec, + pub push: Vec, +} + +impl WType { + pub fn new() -> Self { + WType { + pop: vec![], + push: vec![], + } + } + + // Adds a `push` type + pub fn push(mut self, mut t: Vec) -> Self { + self.push.append(&mut t); + self + } + + // Adds a `pop` type (Note: does not actually pop anything) + pub fn pop(mut self, mut t: Vec) -> Self { + self.pop.append(&mut t); + self + } +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum Effect { + Paint, + Sing, + Store, + Do, +} + +#[derive(Debug, Eq, PartialEq, Clone)] +pub struct WordDef { + pub name: String, + pub values: Vec, + pub r#type: WType, + pub effects: Vec, +} + +impl WordDef { + pub fn new(name: S, values: Vec, r#type: WType, effects: Vec) -> Self + where + S: Into, + { + WordDef { + name: name.into(), + values, + r#type, + effects, + } + } + + fn flatten_values(&self, symtab: &Symtab) -> Vec { + let mut vals = vec![]; + for value in self.values.iter() { + if let Value::Word(string) = value { + let symbol = symtab.get(string); + let mut child_vals = symbol.flatten_values(symtab); + vals.append(&mut child_vals); + } else { + vals.push(value.clone()); + } + } + vals + } + + pub fn flatten(&self, symtab: &Symtab) -> WordDef { + let values = self.flatten_values(symtab); + WordDef::new( + self.name.clone(), + values, + self.r#type.clone(), + self.effects.clone(), + ) + } +} + +impl Display for WordDef { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + writeln!(f, "{:#?}", self)?; + Ok(()) + } +} + +impl Checkable for WordDef { + fn check(&mut self, mut stack: TypeStack) -> Result, String> { + for value in self.values.iter() { + println!( + "WORDDEF: checking value {:?} in word {:?}, current stack is {:?}", + value, self.name, stack + ); + if let Value::Word(_) = value { + panic!("Don't typecheck on an unflattened word!"); + } + match value { + Value::Op(op) => { + if stack.len() < 2 { + return Err(format!( + "Checking def {:?}, stack is {:?}, expected a stack with 2 elements, got only {:?}", + self.name, + stack, + stack.len() + )); + } else { + match op.as_str() { + "+" | "*" => { + println!("WORDDEF: checking Op"); + stack = stack.test_consume( + TypeStack::new().push(VType::Nat).push(VType::Nat), + )?; + stack = stack.push(VType::Nat); + } + "&" | "||" => { + stack = stack.test_consume( + TypeStack::new().push(VType::Bool).push(VType::Bool), + )?; + stack = stack.pop().pop().push(VType::Bool); + } + _ => return Err(format!("unknown opcode {:?}", op)), + } + } + } + &Value::Nat(_) => stack = stack.push(VType::Nat), + &Value::Int(_) => stack = stack.push(VType::Int), + &Value::Bool(_) => stack = stack.push(VType::Int), + &Value::Str(_) => stack = stack.push(VType::Str), + &Value::Char(_) => stack = stack.push(VType::Char), + &Value::Word(_) => unreachable!(), + }; + } + Ok(stack) + } +} diff --git a/src/bin/main.rs b/src/bin/main.rs new file mode 100644 index 0000000..24197c8 --- /dev/null +++ b/src/bin/main.rs @@ -0,0 +1,11 @@ +use fuzzy::{ + ast::VType, + parse, + typecheck::{Checkable, TypeStack}, +}; + +fn main() { + let input = "test is: 5 9 *\n\nexample int nat is ~paint ~sing:\n 5 \"lol\" test \"c\" \n\narrest int nat is ~paint ~sing: 5 \"lol\" \"a\" example\n\n5 6 * arrest example arrest"; + let mut program = parse(input).unwrap(); + println!("{:?}", program.check(TypeStack::new())); +} diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..5a29d41 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,7 @@ +pub mod ast; +pub mod compiler; +pub mod parser; +pub mod typecheck; + +pub use compiler::*; +pub use parser::*; diff --git a/src/parser/mod.rs b/src/parser/mod.rs new file mode 100644 index 0000000..c360b81 --- /dev/null +++ b/src/parser/mod.rs @@ -0,0 +1,483 @@ +use std::collections::HashMap; + +// TODO: +// - add error types and error handling +// - figure out if we can use a single ast or should make a second ast for compilation, then +// convert to that after parsing/do another parsing step but on the ast made the first time +// (i also don't really know what i'm doing so maybe u never do that or always do that or +// something i don't understand yet) +// - improve whitespace parsing +// - think more about language rules: +// - what types actually need to be exposed to the "user" (me) and what types can be internal +// to the compiler (e.g. char vs str, where a str of length 1 could be treated as a char +// internally (put on the stack as a value instead of put somewhere in memory)) + +use chumsky::{ + prelude::*, + text::{ident, keyword}, +}; + +use crate::{ + ast::*, + typecheck::{Checkable, TypeStack}, +}; + +#[derive(PartialEq, Debug, Clone)] +pub struct Symtab(HashMap); + +impl Symtab { + fn new() -> Self { + Symtab(HashMap::new()) + } + + pub fn get(&self, string: &String) -> &WordDef { + self.0.get(string).unwrap() + } + + pub fn add_def(&mut self, def: WordDef) { + let key = def.name.clone(); + self.0.insert(key, def); + } + + pub fn flatten_refs(&mut self) { + let mut new_symtab = Symtab::new(); + for (_string, def) in self.0.iter() { + new_symtab.add_def(def.flatten(self)); + } + // this is an abomination, there must be a better way + self.0.clear(); + self.0.extend(new_symtab.0); + } +} + +impl From> for Symtab { + fn from(value: Vec) -> Self { + let symtab: HashMap = value + .iter() + .map(|x| (x.name.to_owned(), x.to_owned())) + .collect(); + Symtab(symtab) + } +} + +#[derive(Debug, PartialEq)] +pub struct Program { + symtab: Symtab, + body: Vec, +} + +impl Program { + fn new(defs: Vec, body: Vec) -> Self { + let symtab = Symtab::from(defs); + Program { symtab, body } + } + + fn reduce_body(&mut self) { + let mut vals = vec![]; + for value in self.body.iter() { + if let Value::Word(string) = value { + let symbol = self.symtab.get(string); + let mut child_vals = symbol.flatten(&self.symtab).values; + vals.append(&mut child_vals); + } else { + vals.push(value.clone()); + } + } + self.body = vals; + } +} + +impl<'a> Checkable for Program { + fn check( + &mut self, + mut stack: crate::typecheck::TypeStack, + ) -> Result, String> { + //TODO: https://trykv.medium.com/algorithms-on-graphs-directed-graphs-and-cycle-detection-3982dfbd11f5 + fn cyclic_graph_check(symtab: &Symtab) -> Result<(), String> { + let mut visited: Vec<&WordDef> = vec![]; + let mut rec_stack: Vec<&WordDef> = vec![]; + for (_, def) in symtab.0.iter() { + if !visited.contains(&def) { + dfs_cycle_check(def, &mut visited, &mut rec_stack, symtab)?; + } + } + Ok(()) + } + fn dfs_cycle_check<'a>( + def: &'a WordDef, + visited: &mut Vec<&'a WordDef>, + rec_stack: &mut Vec<&'a WordDef>, + symtab: &'a Symtab, + ) -> Result<(), String> { + visited.push(def); + rec_stack.push(def); + + for val in def.values.iter() { + if let Value::Word(name) = val { + let next_def = symtab.get(name); + if !visited.contains(&next_def) { + dfs_cycle_check(next_def, visited, rec_stack, symtab)?; + } else if rec_stack.contains(&next_def) { + return Err(format!( + "illegal recursion detected! definitions {}create a reference cycle", + rec_stack + .iter() + .map(|def| { + let mut name = def.name.clone(); + name.insert(0, '"'); + name.push_str("\" "); + name + }) + .collect::() + )); + } + } + } + + rec_stack.pop(); + Ok(()) + } + + cyclic_graph_check(&self.symtab)?; + + self.symtab.flatten_refs(); + + println!( + "we have flattened refs, here's the symtab: {:#?}\n", + self.symtab + ); + + // then check that all symtab defs are sound + // at this point they shouldn't have any references, + // and if they do we will panic (see the Checkable impl for WordDef) + for (name, def) in self.symtab.0.iter_mut() { + let local_stack: TypeStack = def.r#type.pop.clone().into(); + println!( + "PARSED: checking {:?}\ncurrent stack: {local_stack:?}\nword: {:?}", + name, def + ); + let result_stack = def.check(local_stack)?; + if let Err(error) = result_stack.test(&def.r#type.push.clone().into()) { + println!("{error:?}"); + return Err(error); + } + } + + self.reduce_body(); + + // then we'll check that the body is sound with the given stack + // maybe in the future i'll change this trait so there isn't a stack + // param and the implementer picks what stack to check against + // + // TODO: this block also is shared behavior between basically all checkables but potentially with + // different internal types for T, will have to figure out how to dedup this later + for value in self.body.iter() { + match value { + Value::Op(op) => { + if stack.len() < 2 { + return Err(format!( + "expected a stack with 2 elements, got only {:?}", + stack.len() + )); + } else { + match op.as_str() { + "+" | "*" => { + stack = stack.test_consume( + TypeStack::new().push(VType::Nat).push(VType::Nat), + )?; + stack = stack.pop().pop().push(VType::Nat); + } + "&" | "||" => { + stack = stack.test_consume( + TypeStack::new().push(VType::Bool).push(VType::Bool), + )?; + stack = stack.pop().pop().push(VType::Bool); + } + _ => return Err(format!("unknown opcode {:?}", op)), + } + } + } + &Value::Nat(_) => stack = stack.push(VType::Nat), + &Value::Int(_) => stack = stack.push(VType::Int), + &Value::Bool(_) => stack = stack.push(VType::Bool), + &Value::Str(_) => stack = stack.push(VType::Str), + &Value::Char(_) => stack = stack.push(VType::Char), + &Value::Word(_) => unreachable!(), + }; + } + Ok(stack) + } +} + +pub fn parse(input: S) -> Result>> +where + S: ToString, +{ + let parsed = match parser().parse(input.to_string()) { + Ok(parsed) => parsed, + Err(error) => return Err(error), + }; + + Ok(parsed) +} + +pub fn parser() -> impl Parser> { + let name = ident().labelled("word_name"); + let value = { + // nats will be coerced to ints at compile time depending on word type + let nat = text::int(10).map(|s: String| Value::Nat(s.parse().unwrap())); + + // vice versa for non-negative ints + let int = just("-").ignore_then( + text::int::>(10).map(|s: String| Value::Int(s.parse().unwrap())), + ); + + let op = one_of::>("*+-/&|<>").map(|s| Value::Op(s.to_string())); + + let str_or_char = just::>('"') + .ignore_then(none_of('"').repeated()) + .then_ignore(just('"')) + .map(|s: Vec| match s.len() { + 1 => Value::Char(s[0]), + _ => Value::Str(s.into_iter().collect::()), + }); + + let word = name.map(|n: String| Value::Word(n)); + + let bool = keyword::<_, _, Simple>("true") + .map(|_| Value::Bool(true)) + .or(keyword("false").map(|_| Value::Bool(false))); + + nat.or(int).or(bool).or(str_or_char).or(word).or(op) + }; + let value_seperator = text::newline() + .repeated() + .at_least(2) + .not() + .rewind() + .then_ignore( + // TODO: figure out if this could be simplified + choice(( + just(" ") + .repeated() + .then_ignore(just("\n").repeated().exactly(1).or_not()), + just("\n") + .repeated() + .exactly(1) + .then_ignore(just(" ").repeated().or_not()), + )) + .then_ignore(just(" ").repeated()), + ); + + let body = value_seperator + .or_not() + .ignored() + .then(value) + .map(|(_, v)| v) + .repeated() + .then_ignore( + just(" ") + .repeated() + .ignored() + .then(text::newline().repeated().at_least(2).or_not()), + ); + let word_def = { + let pop_types = { + let pop_type = keyword("nat") + .to(VType::Nat) + .or(keyword("int").to(VType::Int)) + .or(keyword("bool").to(VType::Bool)) + .or(keyword("char").to(VType::Char)) + .or(keyword("str").to(VType::Str)); + + pop_type + .padded() + .repeated() + .collect::>() + .labelled("pop_types") + .boxed() + }; + + let push_types = { + let push_type = keyword("nat") + .to(VType::Nat) + .or(keyword("int").to(VType::Int)) + .or(keyword("char").to(VType::Char)) + .or(keyword("str").to(VType::Str)); + push_type + .padded() + .repeated() + .collect::>() + .labelled("push_types") + .boxed() + }; + + let effects = { + let effect_keyword = keyword("paint") + .to(Effect::Paint) + .or(keyword("sing").to(Effect::Sing)) + .or(keyword("store").to(Effect::Store)) + .or(keyword("do").to(Effect::Do)); + + let effect = just("~").ignore_then(effect_keyword).labelled("effect"); + + effect.padded().repeated().labelled("effects").boxed() + }; + + let definition = text::whitespace() + .ignore_then(name) + .then_ignore(just(" ")) + .then(pop_types) + .then_ignore(keyword("is").or(keyword("are")).padded()) + .then(push_types) + .then(effects) + .then_ignore(just(":")) + .map(|(((name, pop_types), push_types), effects)| { + (name, pop_types, push_types, effects) + }); + + definition + .then(body.clone()) + .map(|((name, pop_types, push_types, effects), body)| { + WordDef::new( + name, + body, + WType::new().push(push_types).pop(pop_types), + effects, + ) + }) + }; + word_def + .repeated() + .then(body) + .map(|(defs, body): (Vec, Vec)| Program::new(defs, body)) +} + +#[cfg(test)] +mod tests { + use crate::typecheck::TypeStack; + + use super::*; + + #[test] + fn test_parser() { + let input = " + a is nat: 5 7 * + + b is nat: + 5 a * + + a + "; + + let ast = vec![ + WordDef::new( + "a", + vec![Value::Nat(5), Value::Nat(7), Value::Op("*".to_string())], + WType::new().push(vec![VType::Nat]), + vec![], + ), + WordDef::new( + "b", + vec![ + Value::Nat(5), + Value::Word("a".to_string()), + Value::Op("*".to_string()), + ], + WType::new().push(vec![VType::Nat]), + vec![], + ), + ]; + let body: Vec = vec![Value::Word("a".to_string())]; + println!("sound: {:?}\n", parser().parse(input).unwrap()); + assert_eq!(parser().parse(input).unwrap(), Program::new(ast, body)); + } + + #[test] + fn test_typecheck() { + let sound = " + a is nat: 5 7 * + + b nat nat is nat: + a * + + a 5 * + "; + + let unsound_defs = " + a is nat nat: 5 7 * + + b nat is nat: + a * + + a 5 * + "; + + let unsound_body = " + a is nat: 5 7 * + + b nat is nat: + a * + + a 5 * * + "; + + let unsound_body_and_defs = " + a is nat nat: 5 7 * + + b nat is nat: + a * + + a 5 * * + "; + + fn typecheck(input: &str, sound: bool) { + let mut parsed = parse(input).unwrap(); + parsed.symtab.flatten_refs(); + parsed.reduce_body(); + + let stack = TypeStack::new(); + if sound { + assert!(parsed.check(stack).is_ok()); + } else { + assert!(parsed.check(stack).is_err()); + } + } + + typecheck(sound, true); + typecheck(unsound_defs, false); + typecheck(unsound_body, false); + typecheck(unsound_body_and_defs, false); + } + + #[test] + fn test_illegal_recursion() { + let illegal = " + a is: b + + b is: a + + a + "; + + let illegal_multilevel = " + a is: b + + b is: c + + c is: a + + a + "; + + fn typecheck(input: &str) { + let mut parsed = parse(input).unwrap(); + let stack = TypeStack::new(); + println!("{:?}", parsed.check(TypeStack::new())); + assert!(parsed.check(stack).is_err()); + } + + typecheck(illegal); + typecheck(illegal_multilevel); + } +} diff --git a/src/typecheck.rs b/src/typecheck.rs new file mode 100644 index 0000000..e5fcc1e --- /dev/null +++ b/src/typecheck.rs @@ -0,0 +1,84 @@ +use std::fmt::Debug; + +use chumsky::chain::Chain; + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct TypeStack(Vec); + +impl TypeStack { + pub fn new() -> Self { + TypeStack(vec![]) + } + pub fn len(&self) -> usize { + self.0.len() + } + pub fn is_empty(&self) -> bool { + self.0.is_empty() + } + pub fn pop(mut self) -> TypeStack { + let _ = self.0.pop(); + self + } + pub fn push(mut self, t: T) -> TypeStack { + self.0.push(t); + self + } + + /// tests if ts matches the top of the stack + pub fn test_consume(mut self, ts: TypeStack) -> Result, String> { + if ts.len() > self.len() { + Err(format!("error during test: {ts:?} is bigger than {self:?}")) + } else { + for (index, t) in ts.0.iter().rev().enumerate() { + let val = self.0.pop().unwrap(); + if val != *t { + return Err(format!("type mismatch between {self:?} and {ts:?}\n{t:?} doesn't match {val:?} at stack depth {index:?}")); + } + } + Ok(self) + } + } + + /// tests if ts matches the top of the stack + pub fn test(&self, ts: &TypeStack) -> Result<(), String> { + if ts.len() > self.len() { + Err(format!("error during test: {ts:?} is bigger than {self:?}")) + } else { + for (index, t) in ts.0.iter().rev().enumerate() { + let val = &self.0[self.0.len() - 1]; + if val != t { + return Err(format!("type mismatch between {self:?} and {ts:?}\n{t:?} doesn't match {val:?} at stack depth {index:?}")); + } + } + Ok(()) + } + } + + // pub fn test_many(mut self, mut tss: Vec>) -> Result, String> { + // if tss.is_empty() { + // return Ok(TypeStack::new()); + // } + // for _i in 0..tss.len() { + // let ts = tss.pop().unwrap(); + // self = self.test(ts)?; + // if self.is_ok() { + // return self; + // } + // } + // Err("did not match any types".to_string()) + // } + + pub fn append(&mut self, t: &mut Vec) { + self.0.append(t); + } +} + +impl From> for TypeStack { + fn from(value: Vec) -> Self { + TypeStack(value) + } +} + +pub trait Checkable { + fn check(&mut self, stack: TypeStack) -> Result, String>; +}