private static IStateMachineBuilder GetClassifierBuilder(IEnumerable <WordWithValue> language)
        {
            var builder = new ClassifierBuilder();

            builder.SetLanguage(language);
            return(builder);
        }
示例#2
0
        /// <summary>
        /// Creates a file with all arrangements in the order that is used for the alphabet of the classifier.
        /// </summary>
        public IEnumerable <IList <Arrangement> > Create()
        {
            var orderedPath = Path.Combine(_workingDirectory, "OrderedArrangements.txt");

            if (File.Exists(orderedPath))
            {
                return(File.ReadAllLines(orderedPath).Select(Arrangement.MultipleFromString).Select(a => a.ToList()));
            }

            var words             = new ArrangementWordCreator(_workingDirectory).CreateUnordered();
            var classifierBuilder = new ClassifierBuilder();

            classifierBuilder.SetLanguage(words);

            var nullTransitions = CountNullTransitions(classifierBuilder);
            var ordered         = nullTransitions.Select((n, i) => new { n, i }).OrderBy(p => p.n).Select(p => p.i).ToList();

            var oldArrangements = new CompactAnalyzedDataCreator(_workingDirectory).GetUniqueArrangements().ToList();
            var newArrangements = ordered.Select(i => oldArrangements[i]).ToList();

            var lines = newArrangements.Select(a => string.Join("", a)).ToList();

            File.WriteAllLines(orderedPath, lines);
            return(newArrangements);
        }
示例#3
0
        public static IEnumerable <ClassifierBuilder> MBaseClassifiers(this ClassifierBuilder cls)
        {
            var result = new HashSet <ClassifierBuilder>();

            result.UnionWith(cls.MModel.Objects.MOfType <RealizationBuilder>().Where(d => d.Client.Contains(cls)).SelectMany(d => d.Supplier).OfType <ClassifierBuilder>());
            result.UnionWith(cls.MModel.Objects.MOfType <GeneralizationBuilder>().Where(d => d.Specific == cls).Select(d => d.General).OfType <ClassifierBuilder>());
            return(result);
        }
示例#4
0
        public static IEnumerable <ClassifierBuilder> MAllBaseClassifiers(this ClassifierBuilder cls)
        {
            var result = new List <ClassifierBuilder>();

            result.AddRange(cls.MBaseClassifiers());
            for (int i = 0; i < result.Count; i++)
            {
                var baseCls = result[i];
                foreach (var ancestorCls in baseCls.MBaseClassifiers())
                {
                    if (!result.Contains(ancestorCls))
                    {
                        result.Add(ancestorCls);
                    }
                }
            }
            return(result);
        }
        public IEnumerable <int> Create()
        {
            var path = Path.Combine(_workingDirectory, "UnweightedSuitTransitions.txt");

            if (File.Exists(path))
            {
                return(File.ReadAllLines(path).Select(line => Convert.ToInt32(line, CultureInfo.InvariantCulture)));
            }
            var language     = new CompactAnalyzedDataCreator(_workingDirectory).CreateSuitWords();
            var fullLanguage = CreateFullLanguage(language);
            var builder      = new ClassifierBuilder();

            builder.SetLanguage(fullLanguage, 5, 19);
            var transitions = builder.Transitions;
            var lines       = transitions.Select(t => t.ToString(CultureInfo.InvariantCulture));

            File.WriteAllLines(path, lines);
            return(transitions);
        }
示例#6
0
        public IEnumerable <int> Create()
        {
            var transitionsPath = Path.Combine(_workingDirectory, "TenpaiShapeTransitions.txt");
            var valuesPath      = Path.Combine(_workingDirectory, "TenpaiShapeValues.txt");

            if (File.Exists(transitionsPath))
            {
                return(File.ReadAllLines(transitionsPath).Select(line => Convert.ToInt32(line, CultureInfo.InvariantCulture)));
            }

            var language = CreateLanguage().ToList();

            var builder = new ClassifierBuilder();

            builder.SetLanguage(language, 5, 9);

            File.WriteAllLines(transitionsPath, builder.Transitions.Select(t => t.ToString(CultureInfo.InvariantCulture)));
            File.WriteAllLines(valuesPath, _indexedValues.OrderBy(p => p.Value).Select(p => p.Key.ToString(CultureInfo.InvariantCulture)));

            return(builder.Transitions);
        }
示例#7
0
        public static IEnumerable <OperationBuilder> MAllOperations(this ClassifierBuilder cls)
        {
            var result = new List <OperationBuilder>();

            if (cls is ClassBuilder @class)
            {
                result.AddRange(@class.OwnedOperation);
            }
            else if (cls is InterfaceBuilder intf)
            {
                result.AddRange(intf.OwnedOperation);
            }
            var allBaseClassifiers = cls.MAllBaseClassifiers().ToList();

            foreach (var baseClassifier in allBaseClassifiers)
            {
                if (baseClassifier is InterfaceBuilder baseIntf)
                {
                    foreach (var op in baseIntf.OwnedOperation)
                    {
                        if (!result.Contains(op))
                        {
                            result.Add(op);
                        }
                    }
                }
                if (baseClassifier is ClassBuilder baseCls)
                {
                    foreach (var op in baseCls.OwnedOperation)
                    {
                        if (!result.Contains(op))
                        {
                            result.Add(op);
                        }
                    }
                }
            }
            return(result);
        }
示例#8
0
        public static OperationBuilder MResolveOperationBySignature(this ClassifierBuilder cls, string signature)
        {
            if (cls == null || signature == null)
            {
                return(null);
            }
            string operationName  = signature;
            var    argNames       = new List <string>();
            int    openParenIndex = signature.IndexOf('(');

            if (openParenIndex > 0)
            {
                operationName = signature.Substring(0, openParenIndex);
                var argList         = signature.Substring(openParenIndex + 1);
                int closeParenIndex = argList.IndexOf(')');
                if (closeParenIndex > 0)
                {
                    argList = argList.Substring(0, closeParenIndex);
                    int state   = 0;
                    var argName = new StringBuilder();
                    foreach (var ch in argList)
                    {
                        if (state == 0)
                        {
                            if (ch == ',')
                            {
                                argNames.Add(argName.ToString());
                                argName.Clear();
                            }
                            else if (ch == '"')
                            {
                                argName.Append(ch);
                                state = 1;
                            }
                            else
                            {
                                argName.Append(ch);
                            }
                        }
                        else
                        {
                            argName.Append(ch);
                            if (ch == '"')
                            {
                                state = 0;
                            }
                        }
                    }
                    if (argName.Length > 0 || argNames.Count > 0)
                    {
                        argNames.Add(argName.ToString());
                    }
                }
            }
            List <OperationBuilder> operations = cls.MAllOperations().Where(op => operationName.Equals(op.Name, StringComparison.InvariantCultureIgnoreCase)).ToList();

            if (operations != null && operations.Count > 0)
            {
                if (operations.Count > 1)
                {
                    operations = operations.Where(op => op.OwnedParameter.Where(p => p.Direction != ParameterDirectionKind.Return).Count() == argNames.Count).ToList();
                }
                if (operations.Count > 0)
                {
                    return(operations[0]);
                }
            }
            return(null);
        }