Compare commits

...

4 Commits

Author SHA1 Message Date
f2b0e38464 Audit other files for desired features 2024-11-18 21:42:17 -06:00
1e2c107c1b Remove no longer desired features from example 2024-11-18 21:36:24 -06:00
c29d463adf Clippy pass 2024-11-18 21:25:06 -06:00
5f57c5aed3 Saner munging 2024-11-18 21:21:25 -06:00
4 changed files with 10 additions and 25 deletions

View File

@ -2,7 +2,6 @@ fun <- ->
do-something() do-something()
do-something-else() do-something-else()
foo <- -> foo <- ->
bar <- -> bar <- ->
baz <- -> baz <- ->
@ -11,8 +10,7 @@ foo <- ->
foo() ## Inside foo but not in baz or bar foo() ## Inside foo but not in baz or bar
add <- x -> y -> add <- x -> y -> x + y ## Multivariable functions by currying
return x + y ## Multivariable functions by currying
add(x) ## Returns a _function_ add(x) ## Returns a _function_
add(x, y) ## This is equivalent to add(x)(y) add(x, y) ## This is equivalent to add(x)(y)

View File

@ -1,24 +1,11 @@
## By the end of the book I want to have an interpreter
## for this little language, maybe a compiler too
print(1 + 1) ## 2 print(1 + 1) ## 2
print("Hello world!") ## Hello world print("Hello world!") ## Hello world
name <- read()
print("Hi there $name") ## Hi there <name>
have <- 10 have <- 10
want <- 11 want <- 11
need <- have - want ## This is subtraction need <- have - want ## This is subtraction
have-want <- 1 ## This is a variable named "have-want" have-want <- 1 ## This is a variable named "have-want"
print(HaVe-WAnt) ## 1 (case doesn't matter)
%%option meaningful-casing
Apples <- 1
print(apples) ## <undef> (or maybe it does)
print("one fish"); print("two fish") ## Two statements on the same line
say-hi <- -> print("Hi from inside a function") say-hi <- -> print("Hi from inside a function")
say-hi() ## Hi from inside a function say-hi() ## Hi from inside a function
@ -31,8 +18,8 @@ duck <- {
eats? <- food -> food = "bread" eats? <- food -> food = "bread"
} ## Objects created on the fly } ## Objects created on the fly
print duck.eats?("bread") ## true print(duck.eats?("bread")) ## true
print duck.eats?("corn") ## false print(duck.eats?("corn")) ## false
cow <- { cow <- {
talk <- print("Moo") talk <- print("Moo")
@ -43,11 +30,11 @@ human <- {
eats? <- _ -> true eats? <- _ -> true
} }
print cow.eats?("grass") ## true print(cow.eats?("grass")) ## true
print cow.eats?("corn") ## true print(cow.eats?("corn")) ## true
talk-or-pass-wind <- character -> talk-or-pass-wind <- character ->
if character has talk then if character has talk
character.talk() character.talk()
else else
print("*Fart*") print("*Fart*")

View File

@ -4,7 +4,7 @@ use std::collections::HashSet;
use crate::parser; use crate::parser;
fn munge(s: &str) -> String { fn munge(s: &str) -> String {
s.replace("?", "_INT_").replace("-", "_DASH_") s.replace("?", "p").replace("-", "_")
} }
pub struct LexicalContext<'a> { pub struct LexicalContext<'a> {

View File

@ -218,7 +218,7 @@ impl fmt::Display for Stmt {
} }
if let Some(block) = else_block { if let Some(block) = else_block {
write!(f, "else")?; write!(f, "else")?;
write_block(f, &block)?; write_block(f, block)?;
} }
Ok(()) Ok(())
} }