ometa Calc <: Parser { var = letter:x -> x, num = num:n digit:d -> (n * 10 + d.digitValue()) | digit:d -> d.digitValue(), priExpr = spaces var:x -> self.vars[x] | spaces num:n -> n | "(" expr:r ")" -> r, mulExpr = mulExpr:x "*" priExpr:y -> (x * y) | mulExpr:x "/" priExpr:y -> (x / y) | priExpr, addExpr = addExpr:x "+" mulExpr:y -> (x + y) | addExpr:x "-" mulExpr:y -> (x - y) | mulExpr, expr = var:x "=" expr:r -> (self.vars[x] = r) | addExpr, doit = (expr:r)* spaces end -> r } Calc.initialize = function() { this.vars = {}; }