private DataConditionEntry CreateFunctionConditionParameter(CodeElementsParser.FunctionConditionParameterContext context) { var parameter = new DataConditionEntry(); parameter.LevelNumber = CobolWordsBuilder.CreateIntegerValue(context.levelNumber().integerValue()); parameter.DataName = CobolWordsBuilder.CreateConditionNameDefinition(context.conditionNameDefinition()); SetConditionValues(parameter, context.valueClauseForCondition()); return parameter; }
public override void EnterDataRenamesEntry(CodeElementsParser.DataRenamesEntryContext context) { var entry = new DataRenamesEntry(); entry.LevelNumber = CobolWordsBuilder.CreateIntegerValue(context.levelNumber().integerValue()); entry.DataName = CobolWordsBuilder.CreateDataNameDefinition(context.dataNameDefinition()); if (context.renamesClause().qualifiedDataName() != null) { entry.RenamesFromDataName = CobolWordsBuilder.CreateQualifiedDataName(context.renamesClause().qualifiedDataName()); } else if (context.renamesClause().dataNamesRange() != null) { entry.RenamesFromDataName = CobolWordsBuilder.CreateQualifiedDataName(context.renamesClause().dataNamesRange().startDataName); entry.RenamesToDataName = CobolWordsBuilder.CreateQualifiedDataName(context.renamesClause().dataNamesRange().endDataName); } Context = context; CodeElement = entry; }
public override void EnterDataDescriptionEntry(CodeElementsParser.DataDescriptionEntryContext context) { if (context.dataRenamesEntry() != null || context.dataConditionEntry() != null) { // For levels 66 and 88, the DataDefinitionEntry is created by the following methods // - EnterDataRenamesEntry // - EnterDataConditionEntry return; } if (context.redefinesClause() != null) { // Redefines clause is not a separate rule in the grammar for optimization puroposes, // but we pretend here that it is a separate rule EnterDataRedefinesEntry(context); return; } DataDescriptionEntry entry; // [COBOL 2002] if (context.cobol2002TypedefClause() != null) { var typedef = new DataTypeDescriptionEntry(); typedef.DataTypeName = CobolWordsBuilder.CreateDataTypeNameDefinition(context.dataNameDefinition()); var strong = context.cobol2002TypedefClause().STRONG(); typedef.Strong = new SyntaxProperty<bool>(strong != null, ParseTreeUtils.GetFirstToken(strong)); entry = typedef; entry.DataName = typedef.DataTypeName; entry.DataType = new DataType(typedef.DataTypeName.Name, typedef.IsStrong); } // [/COBOL 2002] else { entry = new DataDescriptionEntry(); entry.DataName = CobolWordsBuilder.CreateDataNameDefinition(context.dataNameDefinition()); entry.DataType = DataType.Unknown; } if (context.levelNumber() != null) entry.LevelNumber = CobolWordsBuilder.CreateIntegerValue(context.levelNumber().integerValue()); if (context.FILLER() != null) entry.Filler = new SyntaxProperty<bool>(true, ParseTreeUtils.GetFirstToken(context.FILLER())); else entry.Filler = new SyntaxProperty<bool>(entry.DataName == null, null); if (context.pictureClause() != null && context.pictureClause().Length > 0) { var pictureClauseContext = context.pictureClause()[0]; entry.Picture = CobolWordsBuilder.CreateAlphanumericValue(pictureClauseContext.pictureCharacterString); if (entry.DataType == DataType.Unknown) // only for a basic TYPEDEF <typename> PIC <picture> entry.DataType = DataType.Create(entry.Picture.Value); } // [COBOL 2002] if (context.cobol2002TypeClause() != null && context.cobol2002TypeClause().Length > 0) { entry.UserDefinedDataType = CobolWordsBuilder.CreateDataTypeNameReference(context.cobol2002TypeClause()[0].dataTypeNameReference()); entry.DataType = DataType.CreateCustom(entry.UserDefinedDataType.Name); } // [/COBOL 2002] if (context.blankWhenZeroClause() != null && context.blankWhenZeroClause().Length > 0) { var blankClauseContext = context.blankWhenZeroClause()[0]; Token zeroToken = null; if (blankClauseContext.ZERO() != null) { zeroToken = ParseTreeUtils.GetFirstToken(blankClauseContext.ZERO()); } else if (blankClauseContext.ZEROS() != null) { zeroToken = ParseTreeUtils.GetFirstToken(blankClauseContext.ZEROS()); } else { zeroToken = ParseTreeUtils.GetFirstToken(blankClauseContext.ZEROES()); } entry.IsBlankWhenZero = new SyntaxProperty<bool>(true, zeroToken); } if (context.externalClause() != null && context.externalClause().Length > 0) { entry.External = new SyntaxProperty<bool>(true, ParseTreeUtils.GetFirstToken(context.externalClause()[0].EXTERNAL())); } if (context.globalClause() != null && context.globalClause().Length > 0) { entry.Global = new SyntaxProperty<bool>(true, ParseTreeUtils.GetFirstToken(context.globalClause()[0].GLOBAL())); } if (context.justifiedClause() != null && context.justifiedClause().Length > 0) { var justifiedClauseContext = context.justifiedClause()[0]; Token justifiedToken = null; if (justifiedClauseContext.JUSTIFIED() != null) { justifiedToken = ParseTreeUtils.GetFirstToken(justifiedClauseContext.JUSTIFIED()); } else { justifiedToken = ParseTreeUtils.GetFirstToken(justifiedClauseContext.JUST()); } entry.IsJustified = new SyntaxProperty<bool>(true, justifiedToken); } if (context.groupUsageClause() != null && context.groupUsageClause().Length > 0) { var groupUsageClauseContext = context.groupUsageClause()[0]; entry.IsJustified = new SyntaxProperty<bool>(true, ParseTreeUtils.GetFirstToken(groupUsageClauseContext.NATIONAL())); } if (context.occursClause() != null && context.occursClause().Length > 0) { var occursClauseContext = context.occursClause()[0]; if (occursClauseContext.minNumberOfOccurences != null) { entry.MinOccurencesCount = CobolWordsBuilder.CreateIntegerValue(occursClauseContext.minNumberOfOccurences); } if (occursClauseContext.maxNumberOfOccurences != null) { entry.MaxOccurencesCount = CobolWordsBuilder.CreateIntegerValue(occursClauseContext.maxNumberOfOccurences); } if (entry.MinOccurencesCount == null && entry.MaxOccurencesCount != null) { entry.MinOccurencesCount = entry.MaxOccurencesCount; } if (occursClauseContext.UNBOUNDED() != null) { entry.HasUnboundedNumberOfOccurences = new SyntaxProperty<bool>(true, ParseTreeUtils.GetFirstToken(occursClauseContext.UNBOUNDED())); } if (occursClauseContext.varNumberOfOccurences != null) { entry.OccursDependingOn = CobolExpressionsBuilder.CreateNumericVariable(occursClauseContext.varNumberOfOccurences); } if (occursClauseContext.tableSortingKeys() != null && occursClauseContext.tableSortingKeys().Length > 0) { int keysCount = 0; foreach (var tableSortingKeysContext in occursClauseContext.tableSortingKeys()) { keysCount += tableSortingKeysContext.dataNameReference().Length; } entry.TableSortingKeys = new TableSortingKey[keysCount]; int keyIndex = 0; foreach (var tableSortingKeysContext in occursClauseContext.tableSortingKeys()) { SyntaxProperty<SortDirection> sortDirection = null; if (tableSortingKeysContext.ASCENDING() != null) { sortDirection = new SyntaxProperty<SortDirection>(SortDirection.Ascending, ParseTreeUtils.GetFirstToken(tableSortingKeysContext.ASCENDING())); } else { sortDirection = new SyntaxProperty<SortDirection>(SortDirection.Descending, ParseTreeUtils.GetFirstToken(tableSortingKeysContext.DESCENDING())); } foreach (var dataNameReference in tableSortingKeysContext.dataNameReference()) { SymbolReference sortKey = CobolWordsBuilder.CreateDataNameReference(dataNameReference); entry.TableSortingKeys[keyIndex] = new TableSortingKey(sortKey, sortDirection); keyIndex++; } } } if (occursClauseContext.indexNameDefinition() != null && occursClauseContext.indexNameDefinition().Length > 0) { entry.Indexes = new SymbolDefinition[occursClauseContext.indexNameDefinition().Length]; for (int i = 0; i < occursClauseContext.indexNameDefinition().Length; i++) { var indexNameDefinition = occursClauseContext.indexNameDefinition()[i]; entry.Indexes[i] = CobolWordsBuilder.CreateIndexNameDefinition(indexNameDefinition); } } } if (context.signClause() != null && context.signClause().Length > 0) { var signClauseContext = context.signClause()[0]; if (signClauseContext.LEADING() != null) { entry.SignPosition = new SyntaxProperty<SignPosition>(SignPosition.Leading, ParseTreeUtils.GetFirstToken(signClauseContext.LEADING())); } else { entry.SignPosition = new SyntaxProperty<SignPosition>(SignPosition.Trailing, ParseTreeUtils.GetFirstToken(signClauseContext.TRAILING())); } if (signClauseContext.SEPARATE() != null) { entry.SignIsSeparate = new SyntaxProperty<bool>(true, ParseTreeUtils.GetFirstToken(signClauseContext.SEPARATE())); } } if (context.synchronizedClause() != null && context.synchronizedClause().Length > 0) { var synchronizedClauseContext = context.synchronizedClause()[0]; if (synchronizedClauseContext.SYNCHRONIZED() != null) { entry.IsSynchronized = new SyntaxProperty<bool>(true, ParseTreeUtils.GetFirstToken(synchronizedClauseContext.SYNCHRONIZED())); } else { entry.IsSynchronized = new SyntaxProperty<bool>(true, ParseTreeUtils.GetFirstToken(synchronizedClauseContext.SYNC())); } } if (context.usageClause() != null && context.usageClause().Length > 0) { entry.Usage = CreateUsageClause(context.usageClause()[0]); } if (context.valueClause() != null && context.valueClause().Length > 0) { var valueClauseContext = context.valueClause()[0]; entry.InitialValue = CobolWordsBuilder.CreateValue(valueClauseContext.value2()); } Context = context; CodeElement = entry; }
public override void EnterDataConditionEntry(CodeElementsParser.DataConditionEntryContext context) { var entry = new DataConditionEntry(); entry.LevelNumber = CobolWordsBuilder.CreateIntegerValue(context.levelNumber().integerValue()); entry.DataName = CobolWordsBuilder.CreateConditionNameDefinition(context.conditionNameDefinition()); SetConditionValues(entry, context.valueClauseForCondition()); Context = context; CodeElement = entry; }
private void EnterDataRedefinesEntry(CodeElementsParser.DataDescriptionEntryContext context) { var entry = new DataRedefinesEntry(); entry.LevelNumber = CobolWordsBuilder.CreateIntegerValue(context.levelNumber().integerValue()); entry.DataName = CobolWordsBuilder.CreateDataNameDefinition(context.dataNameDefinition()); if (context.FILLER() != null) entry.Filler = new SyntaxProperty<bool>(true, ParseTreeUtils.GetFirstToken(context.FILLER())); else entry.Filler = new SyntaxProperty<bool>(entry.DataName == null, null); if (context.redefinesClause() != null) { entry.RedefinesDataName = CobolWordsBuilder.CreateDataNameReference(context.redefinesClause().dataNameReference()); } Context = context; CodeElement = entry; }