nodespeak 0.2.1

A JIT-ish compiler for number-crunching applications.
Documentation
WHITESPACE = _{ " " | "\t" | "\n" | "\r\n" }

dec_int = @{ "-"? ~ (ASCII_DIGIT | "_")+ }
bin_int = @{ "-"? ~ "0b" ~ (ASCII_BIN_DIGIT | "_")+ }
oct_int = @{ "-"? ~ "0o" ~ (ASCII_OCT_DIGIT | "_")+ }
hex_int = @{ "-"? ~ "0x" ~ (ASCII_HEX_DIGIT | "_")+ }
legacy_oct_int = @{ "-"? ~ "0" ~ (ASCII_OCT_DIGIT | "_")+ }

int = _{ bin_int | hex_int | oct_int | legacy_oct_int | dec_int }
dec_digit = _{ ASCII_DIGIT | "_" }
float = @{
    (dec_digit* ~ "." ~ dec_digit+ ~ ("e" ~ ("+" | "-")? ~ dec_digit+)?)
    | (dec_digit+ ~ "." ~ ("e" ~ ("+" | "-")? ~ dec_digit+)?)
    | (dec_digit+ ~ "e" ~ ("+" | "-")? ~ dec_digit+)
}
neg_int = { "-" ~ int }
neg_float = { "-" ~ float }

bool_true = @{ "true" }
bool_false = @{ "false" }

literal = _{ neg_float | neg_int | float | int | bool_true | bool_false | array_literal }

array_literal = { "[" ~ (literal~ ("," ~ literal)*)? ~ "]" }

root = { SOI ~ literal ~ EOI }