57 lines
967 B
Rexx
57 lines
967 B
Rexx
class CX86
|
|
macro
|
|
BLANK [\ \t\n]+
|
|
rule
|
|
int {[:TYPE,:INT]}
|
|
\( {[:OPEN_PAREN,"("]}
|
|
\) {[:CLOSE_PAREN,")"]}
|
|
\{ {[:OPEN_CURLY,"{"]}
|
|
\} {[:CLOSE_CURLY,"}"]}
|
|
; {[:SEMICOLON,";"]}
|
|
- {[:MINUS,"-"]}
|
|
~ {[:COMP,"~"]}
|
|
! {[:LNEG,"!"]}
|
|
\+= {[:SETEQ,:plus]}
|
|
\-\= {[:SETEQ,:minus]}
|
|
\/\= {[:SETEQ,:mul]}
|
|
\*\= {[:SETEQ,:div]}
|
|
\%\= {[:SETEQ,:mod]}
|
|
\<\<\= {[:SETEQ,:shl]}
|
|
\>\>\= {[:SETEQ,:shr]}
|
|
\&\= {[:SETEQ,:and]}
|
|
\|\= {[:SETEQ,:or]}
|
|
\^\= {[:SETEQ,:xor]}
|
|
\+ {[:PLUS,"+"]}
|
|
\* {[:MUL,"*"]}
|
|
\/ {[:DIV,"/"]}
|
|
% {[:MOD,"%"]}
|
|
\& {[:AND,"&"]}
|
|
\| {[:OR,"|"]}
|
|
\^ {[:XOR,"^"]}
|
|
<< {[:SHL,"<<"]}
|
|
>> {[:SHR,">>"]}
|
|
\&\& {[:LAND,"&&"]}
|
|
\|\| {[:LOR,"||"]}
|
|
\=\= {[:EQ,"=="]}
|
|
\!\= {[:NE,"!="]}
|
|
\< {[:LT,"<"]}
|
|
\<\= {[:LE,"<="]}
|
|
\> {[:GT,">"]}
|
|
\>\= {[:GE,">="]}
|
|
= {[:EQUALS,"="]}
|
|
, {[:COMMA,","]}
|
|
return {[:RETURN,"return"]}
|
|
\d+ {[:NUM,text.to_i]}
|
|
\w+ {[:IDENT,text]}
|
|
{BLANK} {}
|
|
inner
|
|
def tokenize(code)
|
|
scan_setup(code)
|
|
tokens = []
|
|
while token = next_token
|
|
tokens << token
|
|
end
|
|
tokens
|
|
end
|
|
end
|