wordSeperator =_{ " " | "-" | "_" } variable =@{ ASCII_ALPHA ~ (ASCII_ALPHANUMERIC | wordSeperator)* ~ "?"? } char =_{ "\"" ~ ANY ~ "\"" } decNum =_{ ASCII_DIGIT+ } hexNum =_{ "0x" ~ ASCII_HEX_DIGIT+ } num =_{ hexNum | decNum } constant = { char | num } path = { "\"" ~ (!"\"" ~ ANY)+ ~ "\"" } include =@{ "#include" ~ spacing+ ~ path } var =@{ "var" ~ spacing+ ~ variable } delvar =@{ "delvar" ~ spacing+ ~ variable } point =@{ "point" ~ spacing+ ~ variable } pointm =@{ "pointm" ~ spacing+ ~ variable } add =@{ "add" ~ spacing+ ~ constant } addb =@{ "addb" ~ spacing+ ~ constant } addv =@{ "addv" ~ spacing+ ~ variable } sub =@{ "sub" ~ spacing+ ~ constant } subb =@{ "subb" ~ spacing+ ~ constant } subv =@{ "subv" ~ spacing+ ~ variable } copy =@{ "copy" ~ spacing+ ~ variable } setz =@{ "setz" } getchr =@{ "getchr" } print =@{ "print" } macaroo =_{ include } instruction =_{ macaroo | var | delvar | point | pointm | add | addb | addv | sub | subb | subv | copy | setz | getchr | print } loopBlockStart = { "[" ~ NEWLINE } loopBlockEnd = { "]" } loopBlock = { loopBlockStart ~ statements ~ spacing* ~ loopBlockEnd } statement =_{ spacing* ~ (instruction | loopBlock) } statements =_{ (statement | NEWLINE)* } spacing =_{ " " | "\t" } COMMENT =_{ ";;" ~ (!NEWLINE ~ ANY)* ~ NEWLINE+ } file = { SOI ~ (statement ~ NEWLINE+)* ~ EOI }