コード例 #1
0
def eval_if(lists,final,count):
	"""Evaluates the predicate of the 'if' condition"""
	if count==0 and len(final) != 0:
		expr,move=eval_expr(final),0
		for i in func_dict:
			if i in func_dict[i]:
				move=1
		if move==1:
			if expr==0:
				lists=if_cons_alt(ops.rest1(lists),[],0)
		else:lists=if_cons_alt(ops.rest1(lists),[],0)
		if expr==1:return lists[0],1
		else:return lists[1],0
	if ops.first(lists).isalpha():
		final=ops.append(final,[local_dict[ops.first(lists)]])
		return eval_if(ops.rest(lists),final,count)

	if ops.first(lists)=='(':
		count+=1
		return eval_if(ops.rest(lists),ops.append(final,[ops.first(lists)]),count)
	
	elif ops.first(lists)==')':
		    count=count-1
		    return eval_if(ops.rest(lists),ops.append(final,[ops.first(lists)]),count)
	else:return eval_if(ops.rest(lists),ops.append(final,[ops.first(lists)]),count)
コード例 #2
0
def evaluate(lists,final):
	"""Performs arithmetic and logical operations"""
	if ops.null(lists):return final[0]
	elif ops.first(lists)=='(':return evaluate(ops.rest(lists),final)
	elif ops.first(lists).isdigit():return evaluate(ops.rest(lists),ops.append(final,[int(ops.first(lists))]))
	elif ops.first(lists)==')':
		op=opdet(final)
		if op=='+':f=add
		elif op=='*':f=mul
		elif op=='/':f=div
		elif op=='-':f=sub
		elif op=='%':f=mod
		elif op=='>':f=gt
		elif op=='and':f=and_
		elif op=='<':f=lt
		elif op=='=':f=eq
		result=ops.last(final)
		final=ops.rest1(final)
		while type(ops.last(final))==int:
			result=int(f(ops.last(final),result))
			final=ops.rest1(final)
		final=ops.rest1(final)
		return evaluate(ops.rest(lists),ops.append(final,[result]))
	else:return  evaluate(ops.rest(lists),ops.append(final,[ops.first(lists)]))
コード例 #3
0
def opdet(dummy):
	"""Determines the operator"""
	if type(ops.last(dummy))==int:return opdet(ops.rest1(dummy))
	else:return ops.last(dummy)
コード例 #4
0
def gravity(lists):
	"""Initial function for checking the current input"""
	if lists[1]=='if':return if_begin_eval(lists)
	elif lists[1]=='define' and lists[2]=='(':
			eval_define(ops.rest(ops.rest(lists)))
			return 'Environement created'
	elif lists[1]=='define':
			create_env(ops.rest(ops.rest(lists)))
			return 'Environement created '
	elif lists[1].isalpha() and lists[1] in func_dict:return exec_call(lists[1],ops.rest(ops.rest1(lists)))
	else:
			lists=from_env(lists)
			return evaluate(lists,[])
コード例 #5
0
def create_localenv(lists):
	"""Creates the environement for the function"""
	func_dict[ops.first(ops.rest(lists))]=ops.rest(ops.rest(ops.rest1(ops.rest1(lists))))