mirror of
https://github.com/azur1s/bobbylisp.git
synced 2024-10-16 02:37:40 -05:00
92 lines
1.9 KiB
Markdown
92 lines
1.9 KiB
Markdown
|
# Syntax
|
||
|
> This language is still in development, the syntax can be changed at anytime.
|
||
|
|
||
|
Hazure is a [free-form](https://en.wikipedia.org/wiki/Free-form_language) syntax style, so the indentation is purely for readability.
|
||
|
|
||
|
```sml
|
||
|
fun main: void = do
|
||
|
@write("Hello, World!");
|
||
|
end;
|
||
|
```
|
||
|
|
||
|
is the same as
|
||
|
|
||
|
```sml
|
||
|
fun main: void = do @write("Hello, World!"); end;
|
||
|
```
|
||
|
|
||
|
Hazure is also [expression-oriented](https://en.wikipedia.org/wiki/Expression-oriented_programming_language) like OCaml. There are currently 10 expressions:
|
||
|
|
||
|
1) Comment
|
||
|
```
|
||
|
-- Comment!
|
||
|
-{ Block Comment }-
|
||
|
```
|
||
|
2) Values / Types
|
||
|
```sml
|
||
|
1
|
||
|
true
|
||
|
"string"
|
||
|
variable
|
||
|
```
|
||
|
3) Unary and Binary
|
||
|
```sml
|
||
|
1 + 2
|
||
|
!true
|
||
|
```
|
||
|
4) Call and Intrinsic. Intrinsic starts with a `@`
|
||
|
```sml
|
||
|
@write("Hello")
|
||
|
foo("bar")
|
||
|
```
|
||
|
5) Pipeline
|
||
|
```sml
|
||
|
"Hello, World" |> @write(_)
|
||
|
```
|
||
|
6) Variable declaration
|
||
|
```sml
|
||
|
let foo: int = 727;
|
||
|
let bar: string = "Hi";
|
||
|
let baz: boolean = true;
|
||
|
```
|
||
|
7) Function declaration
|
||
|
```sml
|
||
|
fun foo: void = @write("void returns nothing");
|
||
|
fun bar (x: int): int = x + 1;
|
||
|
fun baz (x: int) (y: int): int = x + y;
|
||
|
```
|
||
|
8) If conditions
|
||
|
```sml
|
||
|
let cond: bool = true;
|
||
|
if cond then
|
||
|
@write("True");
|
||
|
else
|
||
|
do
|
||
|
@write("False");
|
||
|
end;
|
||
|
end;
|
||
|
```
|
||
|
9) Case matching
|
||
|
```sml
|
||
|
case 1 + 1 of
|
||
|
| 2 -> @write("Yes");
|
||
|
\ @write("How?");
|
||
|
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.
|
||
|
```sml
|
||
|
do
|
||
|
@write("Hello, World");
|
||
|
foo(bar);
|
||
|
let baz: int = 6 + 10;
|
||
|
end;
|
||
|
```
|
||
|
|
||
|
Hazure isn't a scripting language, so, you will need a main function.
|
||
|
|
||
|
```sml
|
||
|
fun main: void = do
|
||
|
@write("Hello, World");
|
||
|
@write(34 + 35);
|
||
|
end;
|
||
|
```
|