private VariableType simple_expression() {
		TokenType[] op = new TokenType[]{
				TokenType.SPLUS, TokenType.SMINUS, TokenType.SOR};
		VariableType ltype, rtype = VariableType.VOID;
		
		if(whenToken(new TokenType[]{TokenType.SPLUS, TokenType.SMINUS}) ){
			int linum = getLineNumber();
			ltype = term();
			if(ltype != VariableType.INTEGER) 
				throw new RuntimeException("Line\t\t\t\t" + linum + " : type error at" + "\n"
					+ "\t actual : " + ltype + "\n"
					+ "\t expected : " + VariableType.INTEGER);
		} else {
			ltype = term();
		}
		while(testToken(op)) {
			int linum = getLineNumber();
			if(whenToken(new TokenType[]{TokenType.SPLUS, TokenType.SMINUS})) {
				rtype = term();
				if(ltype != VariableType.INTEGER || rtype != VariableType.INTEGER)
					throw new RuntimeException("Line\t\t\t\t" + linum + " : type mismatch" + "\n"
							+ "\t left : " + ltype + "\n"
							+ "\t right : " + rtype + "\n"
							+ "\t expected : " + VariableType.INTEGER);
			} else if(whenToken(TokenType.SOR)) {
				rtype = term();
				if(ltype != VariableType.BOOLEAN || rtype != VariableType.BOOLEAN)
					throw new RuntimeException("Line\t\t\t\t" + linum + " : type mismatch" + "\n"
							+ "\t left : " + ltype + "\n"
							+ "\t right : " + rtype + "\n"
							+ "\t expected : " + VariableType.BOOLEAN);
			} else {
				new RuntimeException("Line\t\t\t\t" + "unknown error at" + linum);
			}
			ltype = rtype;
		}
		return ltype;
	}