internal ConditionalExpression CreateSignCondition(CodeElementsParser.SignConditionContext context) { SyntaxProperty<bool> invertResult = null; if (context.NOT() != null) { invertResult = new SyntaxProperty<bool>( true, ParseTreeUtils.GetFirstToken(context.NOT())); } SyntaxProperty<SignComparison> signComparison = null; if(context.POSITIVE() != null) { signComparison = new SyntaxProperty<SignComparison>( SignComparison.Positive, ParseTreeUtils.GetFirstToken(context.POSITIVE())); } else if (context.NEGATIVE() != null) { signComparison = new SyntaxProperty<SignComparison>( SignComparison.Negative, ParseTreeUtils.GetFirstToken(context.NEGATIVE())); } else if (context.ZERO() != null) { signComparison = new SyntaxProperty<SignComparison>( SignComparison.Zero, ParseTreeUtils.GetFirstToken(context.ZERO())); } return new SignCondition( CreateConditionOperand(context.conditionOperand()), signComparison, invertResult); }
internal SyntaxProperty<RelationalOperator> CreateRelationalOperator(CodeElementsParser.RelationalOperatorContext context) { if(context.strictRelation() != null) { bool invertStrictRelation = false; if (context.NOT() != null) { invertStrictRelation = true; } CodeElementsParser.StrictRelationContext strictContext = context.strictRelation(); if(strictContext.GREATER() != null) { return new SyntaxProperty<RelationalOperator>( !invertStrictRelation ? RelationalOperator.GreaterThan : RelationalOperator.LessThanOrEqualTo, ParseTreeUtils.GetFirstToken(strictContext.GREATER())); } else if (strictContext.GreaterThanOperator() != null) { return new SyntaxProperty<RelationalOperator>( !invertStrictRelation ? RelationalOperator.GreaterThan : RelationalOperator.LessThanOrEqualTo, ParseTreeUtils.GetFirstToken(strictContext.GreaterThanOperator())); } else if (strictContext.LESS() != null) { return new SyntaxProperty<RelationalOperator>( !invertStrictRelation ? RelationalOperator.LessThan : RelationalOperator.GreaterThanOrEqualTo, ParseTreeUtils.GetFirstToken(strictContext.LESS())); } else if (strictContext.LessThanOperator() != null) { return new SyntaxProperty<RelationalOperator>( !invertStrictRelation ? RelationalOperator.LessThan : RelationalOperator.GreaterThanOrEqualTo, ParseTreeUtils.GetFirstToken(strictContext.LessThanOperator())); } else if (strictContext.EQUAL() != null) { return new SyntaxProperty<RelationalOperator>( !invertStrictRelation ? RelationalOperator.EqualTo : RelationalOperator.NotEqualTo, ParseTreeUtils.GetFirstToken(strictContext.EQUAL())); } else // if (strictContext.EqualOperator() != null) { return new SyntaxProperty<RelationalOperator>( !invertStrictRelation ? RelationalOperator.EqualTo : RelationalOperator.NotEqualTo, ParseTreeUtils.GetFirstToken(strictContext.EqualOperator())); } } else { CodeElementsParser.SimpleRelationContext simpleContext = context.simpleRelation(); if (simpleContext.GREATER() != null) { return new SyntaxProperty<RelationalOperator>( RelationalOperator.GreaterThanOrEqualTo, ParseTreeUtils.GetFirstToken(simpleContext.GREATER())); } else if (simpleContext.GreaterThanOrEqualOperator() != null) { return new SyntaxProperty<RelationalOperator>( RelationalOperator.GreaterThanOrEqualTo, ParseTreeUtils.GetFirstToken(simpleContext.GreaterThanOrEqualOperator())); } if (simpleContext.LESS() != null) { return new SyntaxProperty<RelationalOperator>( RelationalOperator.LessThanOrEqualTo, ParseTreeUtils.GetFirstToken(simpleContext.LESS())); } else // if (simpleContext.LessThanOrEqualOperator() != null) { return new SyntaxProperty<RelationalOperator>( RelationalOperator.LessThanOrEqualTo, ParseTreeUtils.GetFirstToken(simpleContext.LessThanOrEqualOperator())); } } }
internal ConditionalExpression CreateClassCondition(CodeElementsParser.ClassConditionContext context) { SyntaxProperty<bool> invertResult = null; if (context.NOT() != null) { invertResult = new SyntaxProperty<bool>( true, ParseTreeUtils.GetFirstToken(context.NOT())); } ClassCondition classCondition = null; if(context.characterClassNameReference() != null) { classCondition = new ClassCondition( CreateIdentifier(context.identifier()), CobolWordsBuilder.CreateCharacterClassNameReference(context.characterClassNameReference()), invertResult); } else { DataItemContentType contentTypeEnum = DataItemContentType.Numeric; if(context.dataItemContentType().ALPHABETIC() != null) { contentTypeEnum = DataItemContentType.Alphabetic; } else if (context.dataItemContentType().ALPHABETIC_LOWER() != null) { contentTypeEnum = DataItemContentType.AlphabeticLower; } else if (context.dataItemContentType().ALPHABETIC_UPPER() != null) { contentTypeEnum = DataItemContentType.AlphabeticUpper; } else if (context.dataItemContentType().DBCS() != null) { contentTypeEnum = DataItemContentType.DBCS; } else if (context.dataItemContentType().KANJI() != null) { contentTypeEnum = DataItemContentType.Kanji; } SyntaxProperty<DataItemContentType> dataItemContentType = new SyntaxProperty<DataItemContentType>( contentTypeEnum, ParseTreeUtils.GetFirstToken(context.dataItemContentType())); classCondition = new ClassCondition( CreateIdentifier(context.identifier()), dataItemContentType, invertResult); } return classCondition; }
// --- Conditional Expressions --- internal ConditionalExpression CreateConditionalExpression(CodeElementsParser.ConditionalExpressionContext context) { if(context.classCondition() != null) { return CreateClassCondition(context.classCondition()); } else if(context.conditionNameConditionOrSwitchStatusCondition() != null) { return CreateConditionNameConditionOrSwitchStatusCondition(context.conditionNameConditionOrSwitchStatusCondition()); } else if(context.relationCondition() != null) { return CreateRelationCondition(context.relationCondition()); } else if(context.signCondition() != null) { return CreateSignCondition(context.signCondition()); } 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 CreateConditionalExpression(context.conditionalExpression()[0]); } else { if (context.conditionalExpression().Length == 1) { ConditionalExpression rightOperand = CreateConditionalExpression(context.conditionalExpression()[0]); return new LogicalOperation(null, logicalOperator, rightOperand); } else { ConditionalExpression leftOperand = CreateConditionalExpression(context.conditionalExpression()[0]); ConditionalExpression rightOperand = CreateConditionalExpression(context.conditionalExpression()[1]); return new LogicalOperation(leftOperand, logicalOperator, rightOperand); } } } }
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); } } } }