internal ConditionalExpression CreateRelationCondition(CodeElementsParser.RelationConditionContext context) { ConditionOperand subjectOperand = CreateConditionOperand(context.conditionOperand()); SyntaxProperty<RelationalOperator> relationalOperator = CreateRelationalOperator(context.relationalOperator()); return CreateAbbreviatedExpression(subjectOperand, relationalOperator, context.abbreviatedExpression()); }
private ConditionalExpression CreateAbbreviatedExpression(ConditionOperand subjectOperand, SyntaxProperty<RelationalOperator> distributedRelationalOperator, CodeElementsParser.AbbreviatedExpressionContext context) { if (context.conditionOperand() != null) { ConditionOperand objectOperand = CreateConditionOperand(context.conditionOperand()); SyntaxProperty<RelationalOperator> relationalOperator = distributedRelationalOperator; if (context.relationalOperator() != null) { relationalOperator = CreateRelationalOperator(context.relationalOperator()); } return new RelationCondition(subjectOperand, relationalOperator, objectOperand); } else { SyntaxProperty<LogicalOperator> logicalOperator = null; if (context.NOT() != null) { logicalOperator = new SyntaxProperty<LogicalOperator>( LogicalOperator.NOT, ParseTreeUtils.GetFirstToken(context.NOT())); } else if (context.AND() != null) { logicalOperator = new SyntaxProperty<LogicalOperator>( LogicalOperator.AND, ParseTreeUtils.GetFirstToken(context.AND())); } else if (context.OR() != null) { logicalOperator = new SyntaxProperty<LogicalOperator>( LogicalOperator.OR, ParseTreeUtils.GetFirstToken(context.OR())); } if (logicalOperator == null) { return CreateAbbreviatedExpression(subjectOperand, distributedRelationalOperator, context.abbreviatedExpression()[0]); } else { if (context.abbreviatedExpression().Length == 1) { ConditionalExpression rightOperand = CreateAbbreviatedExpression(subjectOperand, distributedRelationalOperator, context.abbreviatedExpression()[0]); return new LogicalOperation(null, logicalOperator, rightOperand); } else { ConditionalExpression leftOperand = CreateAbbreviatedExpression(subjectOperand, distributedRelationalOperator, context.abbreviatedExpression()[0]); ConditionalExpression rightOperand = CreateAbbreviatedExpression(subjectOperand, distributedRelationalOperator, context.abbreviatedExpression()[1]); return new LogicalOperation(leftOperand, logicalOperator, rightOperand); } } } }