operator = @{ "operator" } // TODO operand = @{ "operand" } // TODO 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 | operator ~ (spacing+ ~ operand)? } 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}