operator = @{ "operator" } // TODO operand = @{ "operand" } // TODO variable =@{ ASCII_ALPHA ~ (ASCII_ALPHANUMERIC | " ")* } decNum =_{ ASCII_DIGIT+ } hexNum =_{ "0x" ~ ASCII_HEX_DIGIT+ } num = { hexNum | decNum } var =@{ "var" ~ spacing+ ~ variable } delvar =@{ "delvar" ~ spacing+ ~ variable } point =@{ "point" ~ spacing+ ~ variable } pointm =@{ "pointm" ~ spacing+ ~ variable } add =@{ "add" ~ spacing+ ~ num } addb =@{ "addb" ~ spacing+ ~ num } addv =@{ "addv" ~ spacing+ ~ variable } sub =@{ "sub" ~ spacing+ ~ num } subb =@{ "subb" ~ spacing+ ~ num } subv =@{ "subv" ~ spacing+ ~ variable } copy =@{ "copy" ~ spacing+ ~ variable } instruction =_{ var | delvar | point | pointm | add | addb | addv | sub | subb | subv | copy | operator ~ (spacing+ ~ operand)? } loopBlockStart = { "[" ~ NEWLINE } loopBlockEnd = { "]" } loopBlock = { loopBlockStart ~ statements ~ loopBlockEnd } statement = _{ spacing* ~ (instruction | loopBlock) } statements = _{ (statement | NEWLINE)* } spacing = _{ " " | "\t" } COMMENT = _{ ";;" ~ (!NEWLINE ~ ANY)* ~ NEWLINE} file = {SOI ~ (statement ~ NEWLINE+)* ~ EOI}