- implement Source -> [Tokenizer] -> AST AST -> [codegen] -> IR IR -> [QBE/LLVM] -> ASM
- seperate keywords and identification as two
- recursive descent parser
- dynamically typed, while supporting types
x :: Integer = 9
y = 10
print x + y // 19
fn add x y -> return x + y
print add 9 10 // 19
print add add 9 10 10 // 29
num = 10
fn isodd num -> return num % 2
if isodd num > print "odd" || print "even"
num = 3
if num == 1 > print "one" || if num == 2 > print "two" || print "three"
if num == 1
> print "one"
|| if num == 2
> print "two"
|| print "three";
OR
num = 3
if num == 1 then print "one" else if num == 2 then print "two" else print "three"
if num == 1
then print "one"
else if num == 2
then print "two"
else print "three"
fi