mirror of
https://github.com/azur1s/bobbylisp.git
synced 2024-10-16 02:37:40 -05:00
change case syntax
This commit is contained in:
parent
09ea710580
commit
990ee95372
|
@ -70,7 +70,7 @@ Hazure is also [expression-oriented](https://en.wikipedia.org/wiki/Expression-or
|
||||||
```sml
|
```sml
|
||||||
case 1 + 1 of
|
case 1 + 1 of
|
||||||
| 2 -> @write("Yes");
|
| 2 -> @write("Yes");
|
||||||
\ @write("How?");
|
| else @write("How?");
|
||||||
end;
|
end;
|
||||||
```
|
```
|
||||||
10) Do notation. It allows you to have multiple expression because something like right hand side of the function declaration `fun a: int = ...` can only have 1 expression. Do allows you to bypass that.
|
10) Do notation. It allows you to have multiple expression because something like right hand side of the function declaration `fun a: int = ...` can only have 1 expression. Do allows you to bypass that.
|
||||||
|
|
|
@ -70,7 +70,7 @@ impl std::fmt::Display for IRKind {
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
IRKind::Fun { ref public, ref name, ref return_type_hint, ref args, ref body } => {
|
IRKind::Fun { ref public, ref name, ref return_type_hint, ref args, ref body } => {
|
||||||
write!(f, "(fun{} {} {} {} {})",
|
write!(f, "(fun{} {} :{} [{}] {})",
|
||||||
if *public { " export" } else { "" },
|
if *public { " export" } else { "" },
|
||||||
name,
|
name,
|
||||||
return_type_hint,
|
return_type_hint,
|
||||||
|
|
|
@ -16,7 +16,7 @@ pub enum Token {
|
||||||
|
|
||||||
// Operators
|
// Operators
|
||||||
Plus, Minus, Multiply, Divide, Modulus,
|
Plus, Minus, Multiply, Divide, Modulus,
|
||||||
Pipe, EndPipe,
|
Pipe,
|
||||||
Not, Equal, NotEqual, Less, Greater,
|
Not, Equal, NotEqual, Less, Greater,
|
||||||
Pipeline, Arrow,
|
Pipeline, Arrow,
|
||||||
|
|
||||||
|
@ -62,7 +62,6 @@ impl std::fmt::Display for Token {
|
||||||
Token::Greater => write!(f, ">"),
|
Token::Greater => write!(f, ">"),
|
||||||
Token::Pipeline => write!(f, "|>"),
|
Token::Pipeline => write!(f, "|>"),
|
||||||
Token::Pipe => write!(f, "|"),
|
Token::Pipe => write!(f, "|"),
|
||||||
Token::EndPipe => write!(f, "\\"),
|
|
||||||
Token::Arrow => write!(f, "->"),
|
Token::Arrow => write!(f, "->"),
|
||||||
|
|
||||||
Token::Assign => write!(f, "="),
|
Token::Assign => write!(f, "="),
|
||||||
|
@ -102,7 +101,6 @@ pub fn lexer() -> impl Parser<char, Vec<(Token, Span)>, Error = Simple<char>> {
|
||||||
|
|
||||||
just("|>").to(Token::Pipeline),
|
just("|>").to(Token::Pipeline),
|
||||||
just("|").to(Token::Pipe),
|
just("|").to(Token::Pipe),
|
||||||
just("\\").to(Token::EndPipe),
|
|
||||||
|
|
||||||
just('<').to(Token::Less),
|
just('<').to(Token::Less),
|
||||||
just('>').to(Token::Greater),
|
just('>').to(Token::Greater),
|
||||||
|
|
|
@ -317,7 +317,8 @@ fn expr_parser() -> impl Parser<Token, Vec<Spanned<Expr>>, Error = Simple<Token>
|
||||||
.repeated()
|
.repeated()
|
||||||
)
|
)
|
||||||
.then(
|
.then(
|
||||||
just(Token::EndPipe)
|
just(Token::Pipe)
|
||||||
|
.ignore_then(just(Token::KwElse))
|
||||||
.ignore_then(expr.clone())
|
.ignore_then(expr.clone())
|
||||||
.then_ignore(just(Token::SemiColon))
|
.then_ignore(just(Token::SemiColon))
|
||||||
)
|
)
|
||||||
|
|
|
@ -7,6 +7,6 @@ fun main: void = do
|
||||||
| 3 -> do
|
| 3 -> do
|
||||||
@write("Three");
|
@write("Three");
|
||||||
end;
|
end;
|
||||||
\ @write("idk");
|
| else @write("idk");
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
|
@ -1,7 +1,7 @@
|
||||||
fun factorial (n: int): int = do
|
fun factorial (n: int): int = do
|
||||||
case n of
|
case n of
|
||||||
| 0 -> return 1;
|
| 0 -> return 1;
|
||||||
\ return n * factorial(n - 1);
|
| else return n * factorial(n - 1);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue