All pastes #294684 Raw Edit

Miscellany

public text v1 · immutable
#294684 ·published 2006-12-28 19:01 UTC
rendered paste body
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