#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 括弧を理解する電卓パーザで演算の木を作る
import tpg
class Calc(tpg.Parser):
r"""
separator space '\s+';
token real '\d+\.\d*|\.?\d+' float
token add '[+-]';
token mul '[*/]';
START/e -> EXPR/e ;
EXPR/e ->
TERM/e
( add/a TERM/t $ e = [ e, a, t]
)*
;
TERM/t ->
FACT/t
( mul/m FACT/f $ t = [ t, m, f]
)*
;
FACT/f ->
real/f $ f = [[], f, []]
| '\(' EXPR/f '\)'
;
"""
calc = Calc()
while 1:
expr = raw_input('calc: ')
if not expr:
break
try:
result = calc(expr)
print expr, "=>", result
except Exception, e:
print expr, ":", e