website/content/projects/flox.md

49 lines
1.4 KiB
Markdown
Raw Normal View History

2024-08-25 12:13:07 +02:00
---
title: Flox
date: 2024-08-25T09:59:41Z
desc: >
Small functional language written in Rust and compiled to WebAssembly
---
## Grammar
```
Program ::= Sequence "EOF"
Sequence ::= Expression? (";" Expression)*
Expression ::= Data
| Match
| Let
| If
| While
| Return
| Block
| Assignment
Data ::= "data" IDENTIFIER ("|" IDENTIFIER (IDENTIFIER)*)*
Match ::= "match" Expression ( "|" Expression IDENTIFIER* "->" Expression )*
Let ::= "let" IDENTIFIER (IDENTIFIER)* "=" Expression
If ::= "if" Expression Expression ("else" Expression)?
While ::= "while" Expression Expression
Return ::= "return" Expression?
Block ::= "{" Sequence "}"
Assignment ::= Call ("=" Assignment)?
Call ::= Index (Index)*
Index ::= Primary ("." IDENTIFIER)?
Primary ::= IDENTIFIER
| NUMBER
| STRING
| "true"
| "false"
| "nil"
| Lambda
| Parenthesized
| Array
Lambda ::= "fn" IDENTIFIER+ "->" Expression
Parenthesized ::= "(" (Expression ("," Expression)*)? ")"
Array ::= "[" (Expression ("," Expression)*)? "]"
Arguments ::= "(" (Expression ("," Expression)*)? ")"
```