// reverse polish

mtype = { operator, value }

chan f = [12] of { mtype, int }

proctype calc(chan you)
{	int s, lft, rgt
	chan me = [0] of { int }

	if
	:: f?operator(s)
		run calc(me); me?lft
		run calc(me); me?rgt
		if
		:: s == '+' -> you!(lft+rgt)
		fi
	:: f?value(s) -> you!s
	fi
}