Now things work nicely:
Code:
COMPILER Calculator
uses codegen;
var
gen: TCodeGenerator;
CHARACTERS
digit = "0123456789" .
hexdigit = digit + "ABCDEF" .
IGNORE CHR(1) .. CHR(31)
TOKENS
decNumber = digit { digit } .
hexNumber = "$" hexdigit { hexdigit } .
PRODUCTIONS
Calculator = { Expression "=" } (. gen.Emit(oWRITE); .)
(. gen.Emit(oRET); .)
.
Expression = Term { "+" Term (. gen.Emit(oAdd); .)
| "-" Term (. gen.Emit(oSub); .)
} (. .)
.
Term = Factor { "*" Factor (. gen.Emit(oMul); .)
| "/" Factor (. gen.Emit(oDiv); .)
} (. .)
.
Factor = decNumber (. gen.Emit(oCONST, StrToInt(LexString()) ); .)
| hexNumber (. gen.Emit(oCONST, StrToInt(LexString()) ); .)
| '(' Expression Factor ')'
.
END Calculator.
I now also can do (10 + 10) / 4 =
But i also get an error:
Code:
│ 1 (10 + 10) /4 =
│***** ^ invalid Factor
│
│ 1 error
It is complaining about the ) as it seems.
Though the end result seem to be right:
CONST 10
CONST 10
ADD
CONST 4
DIV
WRITE
RET
Bookmarks