The compiler
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

73 lines
1.9 KiB

operator = @{ "operator" } // TODO
operand = @{ "operand" } // TODO
variable =@{ ASCII_ALPHA
~ (ASCII_ALPHANUMERIC | " ")*
}
char =_{ "\"" ~ ANY ~ "\"" }
decNum =_{ ASCII_DIGIT+ }
hexNum =_{ "0x" ~ ASCII_HEX_DIGIT+ }
num =_{ hexNum | decNum }
constant = { char | num }
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" }
instruction =_{ var
| delvar
| point
| pointm
| add
| addb
| addv
| sub
| subb
| subv
| copy
| setz
| getchr
| print
| 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}