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