def p_d_expression_binop(t):
	'''d_expression : d_expression PLUS d_expression
		| d_expression MINUS d_expression
		| d_expression TIMES d_expression
		| i_expression D i_expression
		| i_expression Q i_expression'''
	try:
		if t[2] == '+'  : t[0] = t[1] + t[3]
		elif t[2] == '-'  : t[0] = t[1] - t[3]
		elif t[2] == '*': t[0] = t[1] * t[3]
		elif t[2] == 'd': t[0] = t[1] ** d(t[3])
		elif t[2] == 'q': t[0] = t[1] ** q(t[3])
	except TypeError as te:
		error_expression_invalid(threading.currentThread().expr,MSG_ERROR_PLY_TYPE + "(%s)" % str(te))
def p_expression_ud(t):
	'd_expression : D i_expression %prec UD'
	t[0] = d(t[2])