284 for i
in range(len(split_expression)-3):
287 raise ValueError(
'Cannot Evaluate '+
' '.join(split_expression[i:i+3])+
' since both operators have same precedence!')
292 temp_split_expression=list()
295 for i
in range(len(split_expression)):
299 if ',' in split_expression[i]:
301 if split_expression[max(0,i-1)] !=
'=' and split_expression[min(i+1,len(split_expression)-1)] !=
'=':
302 raise ValueError(
'Can evaluate \',\' operator only in combination with \"=\" in subexpression ',
' '.join(split_expression[max(0,i-1):min(i+1,len(split_expression))]))
304 single_operands=split_expression[i].split(
',')
306 if split_expression[max(0,i-1)]==
'=':
308 raise ValueError(
'Cannot evaluate subexpression '+
' '.join(split_expression[max(0,i-1):min(i+1,len(split_expression))])+
' starting with an \'=\'')
309 main_operand=split_expression[i-2]
310 temp_split_expression.pop()
311 temp_split_expression.pop()
315 if i+2>len(split_expression)-1:
316 raise ValueError(
'Cannot evaluate subexpression '+
' '.join(split_expression[max(0,i-1):min(i+1,len(split_expression))])+
' ending with an \'=\'')
317 main_operand=split_expression[i+2]
320 temp_expression=list([
'('])
321 temp_expression+=
' or '.join([
'%s = %s'% (a,b)
for (a,b)
in zip(len(single_operands)*[main_operand],single_operands)]).split()
322 temp_expression.append(
')')
323 temp_split_expression+=temp_expression
326 temp_split_expression.append(split_expression[i])
328 split_expression=temp_split_expression
333 temp_split_expression=list()
336 for i
in range(len(split_expression)):
340 if ':' in split_expression[i]:
341 if split_expression[max(0,i-1)] !=
'=' and split_expression[min(i+1,len(split_expression)-1)] !=
'=':
342 raise ValueError(
'Can evaluate subexpression '+
' '.join(split_expression[max(0,i-1):min(i+1,len(split_expression))])+
' \':\' sign is only allowed in combination with \'=\'')
343 if len(split_expression[i].split(
':')) != 2:
344 raise ValueError(
'Can operate \':\' operator only on 2 operands in subexpression '+
' '.join(split_expression[max(0,i-1):min(i+1,len(split_expression))]))
346 lhs=split_expression[i].split(
':')[0]
347 rhs=split_expression[i].split(
':')[1]
349 template_expression=[
'(',
'',
'<=',
'',
'and',
'',
'<=',
'',
')']
351 if split_expression[max(0,i-1)] ==
'=':
353 raise ValueError(
'Cannot evaluate subexpression '+
' '.join(split_expression[max(0,i-1):min(i+1,len(split_expression))])+
' starting with an \'=\'')
354 temp_split_expression.pop()
355 temp_split_expression.pop()
356 template_expression[3]=split_expression[i-2]
357 template_expression[5]=split_expression[i-2]
361 if i+2>len(split_expression)-1:
362 raise ValueError(
'Cannot evaluate subexpression '+
' '.join(split_expression[max(0,i-1):min(i+1,len(split_expression))])+
' ending with an \'=\'')
363 template_expression[3]=split_expression[i+2]
364 template_expression[5]=split_expression[i+2]
367 template_expression[1]=lhs
368 template_expression[7]=rhs
369 temp_split_expression+=template_expression
372 temp_split_expression.append(split_expression[i])
374 split_expression=temp_split_expression
379 final_expression=list()
382 for item
in split_expression:
384 if self.
valid_operators[item][
'type']
in [
'boolean',
'left_bracket',
'right_bracket']:
385 if len(subexpression)>0:
389 final_expression.append(item)
391 subexpression.append(item)
393 if len(subexpression)>0:
396 return final_expression
404 split_expression=list()
411 if actual_position>=len(expression):
412 if len(eaten_stuff)>0:
413 split_expression.append(eaten_stuff)
414 return split_expression
416 token=expression[actual_position]
419 if len(eaten_stuff)>0:
420 split_expression.append(eaten_stuff)
429 if len(eaten_stuff)>0:
430 split_expression.append(eaten_stuff)
432 split_expression.append(token)
437 if len(eaten_stuff)>0:
438 split_expression.append(eaten_stuff)
440 split_expression.append(token)
445 if len(eaten_stuff)>0:
446 split_expression.append(eaten_stuff)
449 if actual_position+len(self.
valid_operators[token][
'extension'])<len(expression):
454 split_expression.append(token)