import java.io.*;
import java.util.*;
import analysis.*;
import node.*;
import parser.*;
import lexer.*;


class Compute extends DepthFirstAdapter {

	private int value;

	public int getValue() {
		return value;
	}

	public void caseAAddAdditive(AAddAdditive node) {
		int left;
		node.getLeft().apply(this);
		left = value;
		node.getRight().apply(this);
		value = left + value;
	}

	public void caseASubAdditive(ASubAdditive node) {
		int left;
		node.getLeft().apply(this);
		left = value;
		node.getRight().apply(this);
		value = left - value;
	}

	public void caseAMulMultiplicative(AMulMultiplicative node) {
		int left;
		node.getLeft().apply(this);
		left = value;
		node.getRight().apply(this);
		value = left * value;
	}

	public void caseADivMultiplicative(ADivMultiplicative node) {
		int left;
		node.getLeft().apply(this);
		left = value;
		node.getRight().apply(this);
		value = left / value;
	}

	public void caseTNumber(TNumber node) {
		value = Integer.parseInt(node.getText());
	}

	public static void main(String[] args) throws Exception {
		Lexer lexer = new Lexer(
		                 new PushbackReader(
		                    new BufferedReader(
		                       new InputStreamReader(System.in))));
		Parser parser = new Parser(lexer);
		Start start = parser.parse();
		Compute visitor = new Compute();
		start.apply(visitor);
		System.out.println(visitor.getValue());
	}
}
