Grammar

The grammar of Luna is very closue to modern languages like JavaScript and Rust

Atomic Tokens

The following is a list of atomic tokens and what their regex is:

name regex
null /null/
ident /[a-zA-Z_]([a-zA-Z_0-9]*)/
int /[0-9]+/
float /[0-9]+\./, /[0-9]+\.[0-9]+/
bool /true/, /false/
char /'\.'/
string /"[^"]*"/

Keywords

The following is a list of reserved keywords:

keyword description
let local variable definitions
fn function definitions
if conditional branches
else else conditional branches of if statements
while while loops
for for loops
in iterate over something in a for loop statement
return return from a call
break break out of a loop
continue skip to next iteration of a loop
null represents the null value
true represents the boolean value true
false represents the boolean value false

Symbols

The following is a list of reserved keywords:

symbol name
= equal
, comma
. dot
: colon
! exclamation
( paran left
) paran right
[ bracket left
] bracket right
{ brace left
} brace right
+ plus
- minus
* star
/ slash
% percent
^ exponent
+= plus equal
-= minus equal
*= star equal
/= slash equal
%= percent equal
^= exponent equal
== equal equal
!= exclamation equal
< less
> greater
<= less equal
>= greater equal
& ampersand
| pipe

Syntax Sugar

Luna has the same design philosophy as Lua. What that means is that certain syntax is only another way to write the same thing:

fn add(a, b) {
    return a + b
}

translates to

add = fn(a, b) {
    return a + b
}