ometa ExpParser { dig = char:c ?('0' <= c && c <= '9') -> c, num = num:n dig:d -> (n + d) | dig, fac = fac:x '*' num:y -> (parseInt(x) * parseInt(y)) | fac:x '/' num:y -> (parseInt(x) / parseInt(y)) | num, exp = exp:x '+' fac:y -> (parseInt(x) + parseInt(y)) | exp:x '-' fac:y -> (parseInt(x) - parseInt(y)) | fac }; a = ExpParser.matchAll('12*2+12/3', 'exp'); alert(a);