Working on #48 : Refactored RelationalOperatorParser.py
This commit is contained in:
@@ -40,21 +40,24 @@ class ReteConditionsEmitter:
|
||||
def get_conditions(self, expr_nodes):
|
||||
conditions = []
|
||||
for expr_node in expr_nodes:
|
||||
parsed_ret = self.comparison_parser.parse(self.context, expr_node.tokens)
|
||||
if not parsed_ret.status:
|
||||
raise FailedToCompileError(parsed_ret.body)
|
||||
tree = parsed_ret.body.body
|
||||
error_sink = ErrorSink()
|
||||
parser_input = ParserInput(None, tokens=expr_node.tokens).reset()
|
||||
parser_input.next_token()
|
||||
|
||||
if isinstance(tree, VariableNode):
|
||||
var_name = self.init_variable_if_needed(tree, conditions)
|
||||
if tree.attributes_str is not None:
|
||||
conditions.append(Condition(var_name, tree.attributes_str, True))
|
||||
parsed = self.comparison_parser.parse_input(self.context, parser_input, error_sink)
|
||||
if error_sink.has_error:
|
||||
raise FailedToCompileError(error_sink.sink)
|
||||
|
||||
elif isinstance(tree, ComparisonNode):
|
||||
if isinstance(tree.left, VariableNode):
|
||||
left = self.init_variable_if_needed(tree.left, conditions)
|
||||
attr = tree.left.attributes_str or "__self__"
|
||||
right = eval(get_text_from_tokens(tree.right.tokens))
|
||||
if isinstance(parsed, VariableNode):
|
||||
var_name = self.init_variable_if_needed(parsed, conditions)
|
||||
if parsed.attributes_str is not None:
|
||||
conditions.append(Condition(var_name, parsed.attributes_str, True))
|
||||
|
||||
elif isinstance(parsed, ComparisonNode):
|
||||
if isinstance(parsed.left, VariableNode):
|
||||
left = self.init_variable_if_needed(parsed.left, conditions)
|
||||
attr = parsed.left.attributes_str or "__self__"
|
||||
right = eval(get_text_from_tokens(parsed.right.tokens))
|
||||
conditions.append(Condition(left, attr, right))
|
||||
|
||||
return [AndConditions(conditions)]
|
||||
|
||||
Reference in New Issue
Block a user