Diffstat (limited to 'src/lexer.rs')
-rw-r--r--src/lexer.rs27
1 files changed, 24 insertions, 3 deletions
diff --git a/src/lexer.rs b/src/lexer.rs
index faacab6..241a007 100644
--- a/src/lexer.rs
+++ b/src/lexer.rs
@@ -52,7 +52,7 @@ macro_rules! tokens {
}
tokens! {
- "λ" => Lamba,
+ "λ" => Lambda,
"←" => Place,
"→" => Ret,
"=" => Eq,
@@ -86,6 +86,8 @@ tokens! {
"⏭️" => Each,
"➡️" => Reduce,
"↘️" => ReduceStack,
+ "🐋" => If,
+ "🐳" => Else,
}
@@ -115,8 +117,27 @@ impl<'s> Iterator for Lexer<'s> {
#[test]
fn lexer() {
- let mut lex = lex(r#""#);
- // while let Some(x) = lex.next() { print!("{x} "); }
+ let mut lex = lex(r#""1abc25hriwm4"
+ / { str → int } /
+ line ← λ (
+ '0'>🔎'9'<🔎
+ '9'-
+ / modifiers are placed in front /
+ 🐘⬅➡
+ 10×+
+ )
+
+ 🐢≠'\n'🚧
+ / run function on all values, pushing to the stack /
+ ⏭️line
+ / reduce the stack /
+ ↘️+
+
+ true 🐋 (+ 🐳 -)
+ / if true { + } else { - } /"#);
+ while let Some((x, _)) = lex.next() {
+ print!("{x:?} ");
+ }
macro_rules! test {
($($tok:ident$(($var:literal))?)+) => {{
$(assert_eq!(lex.next().map(|(x,_)|x), Some(Token::$tok$(($var.into()))?));)+