Grammar Reference
Formal grammar specification for JOEL.
EBNF Grammar
Program = Header? Statement*
Header = "[Compiled]" | "[Interpreted]"
| "[target" Identifier "]"
Statement = LetDecl | FnDecl | IfStmt | WhileStmt | ForStmt
| ReturnStmt | ExprStmt | Block
LetDecl = "let" Identifier (":" Type)? "=" Expr
FnDecl = "fn" Identifier "(" Params? ")" ("->" Type)? Block
Params = Param ("," Param)*
Param = Identifier (":" Type)?
Expr = BinaryExpr | UnaryExpr | CallExpr | PrimaryExpr
BinaryExpr = Expr BinaryOp Expr
BinaryOp = "+" | "-" | "*" | "/" | "%"
| "==" | "!=" | "<" | ">" | "<=" | ">="
| "&&" | "||"
UnaryExpr = UnaryOp Expr
UnaryOp = "!" | "-"
CallExpr = Identifier "(" Args? ")"
Args = Expr ("," Expr)*
PrimaryExpr = Number | String | Boolean | Identifier
| "(" Expr ")" | List | Map
Type = "i32" | "i64" | "f32" | "f64" | "str" | "bool"
| "list" "[" Type "]"
| "map" "[" Type "," Type "]"Operator Precedence
- Parentheses
() - Member access
.,[] - Unary
!,- - Multiplicative
*,/,% - Additive
+,- - Comparison
==,!=,<,>,<=,>= - Logical AND
&& - Logical OR
|| - Assignment
=,+=,-=, etc.