コード例 #1
0
        public void TestSolveSum()
        {
            SumParser sumParser = new SumParser();

            Assert.Equal(12, sumParser.SolveSum("8+4"));
            Assert.Equal(200, sumParser.SolveSum("182+18"));
            Assert.Equal(18, sumParser.SolveSum("8+10"));
            Assert.Equal(42, sumParser.SolveSum("12+30"));
            Assert.Equal(0, sumParser.SolveSum("0+0"));
        }
コード例 #2
0
        private static Variable handleNumberVariable(Logic[] cloneLogicOrder, int lineNumber, Variable tempSum, Scope currentScope)
        {
            Logic[] calcSum = new Logic[3];
            calcSum [0] = cloneLogicOrder [0];
            calcSum [1] = cloneLogicOrder [1];
            calcSum [2] = new NumberValue(tempSum.getNumber().ToString());
            Variable tempVar = SumParser.parseIntoSum(calcSum, lineNumber, currentScope);

            tempVar.name = (calcSum [0] as Variable).name;

            return(tempVar);
        }
コード例 #3
0
        public static Logic checkForVariableDecleration(Logic[] logicOrder, int lineNumber, Scope currentScope)
        {
            //We use a shallow copy because we alter logicOrder in case of speciall operators
            Logic[] cloneLogicOrder = (Logic[])logicOrder.Clone();

            if (couldBeVariableDec(cloneLogicOrder, lineNumber) == false)
            {
                return(new UnknownLogic(lineNumber));
            }


            Logic[] afterEqualSign = getAfterEqualSign(cloneLogicOrder, lineNumber, currentScope);
            if (afterEqualSign == null || afterEqualSign.Length == 0)
            {
                return(new UnknownLogic(lineNumber));
            }

            Variable afterEqualSignSum = SumParser.parseIntoSum(afterEqualSign, lineNumber, currentScope);

            //Determine whether to use speciallOperators or not
            if (cloneLogicOrder [1].currentType != WordTypes.equalSign)
            {
                afterEqualSignSum = SpeciallVariableDeclareParser.speciallVariableDeclare(cloneLogicOrder, lineNumber, afterEqualSignSum, currentScope);
            }
            else
            {
                afterEqualSignSum.name = (cloneLogicOrder[0] as Variable).name;
            }

            //Add the newly declared variable
            if (afterEqualSignSum.variableType != VariableTypes.unknown)
            {
                currentScope.scopeVariables.addVariable(afterEqualSignSum, currentScope.scopeParser, lineNumber);
                return(afterEqualSignSum);
            }

            ErrorHandler.ErrorMessage.sendErrorMessage(lineNumber, "Något gick fel i variabeldeklareringen");
            return(new UnknownLogic(lineNumber));
        }
コード例 #4
0
        /// <summary>
        /// Builds the sorter.
        /// </summary>
        /// <returns>a <see cref="Sorter{T}"/></returns>
        private Sorter <byte[]> BuildSorter()
        {
            Logger.Debug("Building sorter");
            var sorter = new Sorter <byte[]>();

            var formatterParser = new FormatterParser {
                Encoding = Encoding
            };

            sorter.InputFiles = Input.Select(r => r.GetFileInfo()).ToList();
            if (Output.Count == 1)
            {
                var outputFiles = new List <IOutputFile <byte[]> >();
                var outputFile  = new LegacyOutputFile {
                    Output = Output[0].GetFileInfo()
                };
                if (!string.IsNullOrWhiteSpace(Outrec))
                {
                    outputFile.Formatter = formatterParser.GetFormatter(Outrec);
                }
                outputFiles.Add(outputFile);
                sorter.OutputFiles = outputFiles;
            }
            if (Output.Count > 1)
            {
                var outfilParser = new OutfilParser {
                    Encoding = Encoding, SortEncoding = SortEncoding
                };
                var outputFiles = outfilParser.GetOutputFiles(Outfils);
                if (Output.Count != outputFiles.Count)
                {
                    throw new SortException("The number of output files must match the number of outfil configurations.");
                }
                for (var i = 0; i < Output.Count; i++)
                {
                    outputFiles[i].Output = Output[i].GetFileInfo();
                }
                sorter.OutputFiles = outputFiles;
            }

            if (RecordLength > 0 || Separator == null)
            {
                sorter.RecordAccessorFactory = new BlockAccessorFactory {
                    RecordLength = RecordLength
                };
            }
            else
            {
                sorter.RecordAccessorFactory = new SeparatorAccessorFactory {
                    Separator = Encoding.GetBytes(Separator)
                };
            }

            if (!string.IsNullOrWhiteSpace(SortCard))
            {
                var comparerParser = new ComparerParser {
                    Encoding = Encoding, SortEncoding = SortEncoding
                };
                sorter.Comparer = comparerParser.GetComparer(SortCard);
            }
            if (!string.IsNullOrWhiteSpace(Include) || !string.IsNullOrWhiteSpace(Omit))
            {
                var filterParser = new FilterParser {
                    Encoding = Encoding, SortEncoding = SortEncoding
                };
                sorter.Filter = filterParser.GetFilter(Include, Omit);
            }
            if (SkipDuplicates)
            {
                sorter.Sum = new SkipSum <byte[]>();
            }
            if (!string.IsNullOrWhiteSpace(Sum))
            {
                var sumParser = new SumParser {
                    Encoding = Encoding
                };
                sorter.Sum = sumParser.GetSum(Sum);
            }
            if (!string.IsNullOrWhiteSpace(Inrec))
            {
                sorter.InputFormatter = formatterParser.GetFormatter(Inrec);
            }

            if (MaxInMemorySize > 0)
            {
                sorter.MaxInMemorySize = MaxInMemorySize;
            }

            sorter.HeaderSize = HeaderSize;

            return(sorter);
        }
コード例 #5
0
        /// <summary>
        /// Builds the sorter.
        /// </summary>
        /// <returns>a <see cref="Sorter{T}"/></returns>
        private Sorter <byte[]> BuildSorter()
        {
            Logger.Debug("Building sorter");
            var sorter = new Sorter <byte[]>();

            if (RecordLength > 0 || Separator == null)
            {
                sorter.RecordAccessorFactory = new BlockAccessorFactory {
                    RecordLength = RecordLength
                };
            }
            else
            {
                sorter.RecordAccessorFactory = new SeparatorAccessorFactory {
                    Separator = Encoding.GetBytes(Separator)
                };
            }

            if (!string.IsNullOrWhiteSpace(SortCard))
            {
                var comparerParser = new ComparerParser {
                    Encoding = Encoding, SortEncoding = SortEncoding
                };
                sorter.Comparer = comparerParser.GetComparer(SortCard);
            }
            if (!string.IsNullOrWhiteSpace(Include) || !string.IsNullOrWhiteSpace(Omit))
            {
                var filterParser = new FilterParser {
                    Encoding = Encoding, SortEncoding = SortEncoding
                };
                sorter.Filter = filterParser.GetFilter(Include, Omit);
            }
            if (SkipDuplicates)
            {
                sorter.Sum = new SkipSum <byte[]>();
            }
            if (!string.IsNullOrWhiteSpace(Sum))
            {
                var sumParser = new SumParser {
                    Encoding = Encoding
                };
                sorter.Sum = sumParser.GetSum(Sum);
            }
            var formatterParser = new FormatterParser {
                Encoding = Encoding
            };

            if (!string.IsNullOrWhiteSpace(Inrec))
            {
                sorter.InputFormatter = formatterParser.GetFormatter(Inrec);
            }
            if (!string.IsNullOrWhiteSpace(Outrec))
            {
                sorter.OutputFormatter = formatterParser.GetFormatter(Outrec);
            }

            if (MaxInMemorySize > 0)
            {
                sorter.MaxInMemorySize = MaxInMemorySize;
            }

            sorter.HeaderSize = HeaderSize;

            return(sorter);
        }