language math(Expression) data result rules charset digit('0'..'9') token number(digit {digit} ['.' digit {digit}]) // Expression production Expression(Term {('+' | '-') Term}) begin Expression = resolve(token.0) if token.1 = '+' then Expression = Expression + resolve(token.2) else Expression = Expression - resolve(token.2) result = Expression end // Term production Term(Factor {('*' | '/') Factor}) begin Term = resolve(token.0) if token.1 = '*' then Term = Term * resolve(token.2) else Term = Term / resolve(token.2) end // Factor, mathematical 'atom' (mathom?) production Factor('(' Expression ')' | number) begin if token.0 = '(' then Factor = resolve(token.1) else Factor = resolve(token.0) end code source(stdin) if parse(Expression) then print('Result of evaluation: ', result, '\n') end