#!/usr/bin/env python # -*- coding: utf-8 -*- # 括弧を理解する電卓パーザで rpn2.py 用入力ファイルに変換 import sys 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() def rtrav(p): if p[0]: rtrav(p[0]) if p[2]: rtrav(p[2]) print p[1], for s in sys.stdin.readlines(): expr = s.strip() if not expr: break try: result = calc(expr) rtrav(result) print except Exception, e: print >> sys.stderr, expr, ":", e