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 }