/* Hi Amit, I fixed a bug in your code: you had dig = (charRange '0' '9'), (which means "invoke charRange, then match the character '0', then match the character '9'), but you actually meant dig = charRange('0', '9') -Alex */ ometa Calc { charRange x y = char:c ?(c >= x) ?(c <= y) -> c, dig = charRange('0', '9'), num = dig+, fac = fac:x '*' num:y -> (x * y) | fac:x '/' num:y -> (x / y) | num, exp = exp:x '+' fac:y -> (x + y) | exp:x '-' fac:y -> (x - y) | fac } a = (((4 / 5))*6) b = a * 4.4 b * 2