Ejemplo n.º 1
0
 public void Add(Taal taal)
 {
     foreach (var item in taal)
     {
         this.Add(item);
     }
 }
Ejemplo n.º 2
0
        public SortedSet <T> epsilonClosure2(SortedSet <T> fromStates)
        {
            var reachable = new SortedSet <T>();
            var newFound  = new SortedSet <T>();

            do
            {
                foreach (var item in fromStates)
                {
                    reachable.Add(item);
                }

                newFound = new SortedSet <T>();
                foreach (T fromState in fromStates)
                {
                    foreach (var t in transitions)
                    {
                        if ((t.FromState.CompareTo(fromState) == 0) && Taal.IsSameLetterAs(t.Symbol, Transition <T> .EPSILON) && !fromStates.Contains(t.ToState))
                        {
                            newFound.Add(t.ToState);
                        }
                    }
                }

                foreach (var item in newFound)
                {
                    fromStates.Add(item);
                }
                reachable = newFound;
            }while (newFound.Count > 0);

            return(fromStates);
        }
Ejemplo n.º 3
0
        private Taal getLanguageInner(String start, int maxLen)
        {
            var result = new Taal();

            if (start.Length == maxLen)
            {
                return(result);
            }
            foreach (var item in alphabet)
            {
                String str = start + item;
                if (Accept(str))
                {
                    result.Add(str);
                }
                result.Add(getLanguageInner(str, maxLen));
            }
            return(result);
        }
Ejemplo n.º 4
0
        public SortedSet <T> GetToStates2(T from, char symbol)
        {
            var fromStates = new SortedSet <T>();

            fromStates.Add(from);
            fromStates = epsilonClosure2(fromStates);

            var toStates = new SortedSet <T>();

            foreach (T fromState in fromStates)
            {
                foreach (var t in transitions)
                {
                    if ((t.ToState.CompareTo(fromState) == 0) && Taal.IsSameLetterAs(t.Symbol, symbol))
                    {
                        toStates.Add(t.ToState);
                    }
                }
            }

            return(epsilonClosure2(toStates));
        }
Ejemplo n.º 5
0
        public SortedSet <Transition <T> > GetToStates(T currentState, char symbol)
        {
            var result     = new SortedSet <Transition <T> >();
            var fromStates = epsilonClosure(currentState);

            var tempResult = transitions.Where(t => (fromStates.Contains(t.FromState)) && ((Taal.IsSameLetterAs(t.Symbol, symbol))));

//			var tempResult = transitions.Where(t => (t.FromState.CompareTo(currentState) == 0) && ((Taal.IsSameLetterAs(t.Symbol, symbol))));
            foreach (var item in tempResult)
            {
                result.Add(item);
            }
            return(result);
        }
Ejemplo n.º 6
0
        public Taal GetLanguage(int maxSteps)
        {
            var emptyLanguage  = new Taal(comperator);
            var languageResult = new Taal(comperator);

            Taal languageLeft, languageRight;

            if (maxSteps < 1)
            {
                return(emptyLanguage);
            }

            switch (opr)
            {
            case Operator.ONE:
            {
                languageResult.Add(terminals);
                break;
            }

            case Operator.OR:
            {
                languageLeft  = left == null ? emptyLanguage : left.GetLanguage(maxSteps - 1);
                languageRight = right == null ? emptyLanguage : right.GetLanguage(maxSteps - 1);

                //languageResult.addAll (languageLeft);
                foreach (var item in languageLeft)
                {
                    languageResult.Add(item);
                }

                //languageResult.addAll (languageRight);
                foreach (var item in languageRight)
                {
                    languageResult.Add(item);
                }
                break;
            }

            case Operator.DOT:
            {
                languageLeft  = left == null ? emptyLanguage : left.GetLanguage(maxSteps - 1);
                languageRight = right == null ? emptyLanguage : right.GetLanguage(maxSteps - 1);
                foreach (var s1 in languageLeft)
                {
                    foreach (var s2 in languageRight)
                    {
                        languageResult.Add(s1 + s2);
                    }
                }
                break;
            }

            // STAR(*) en PLUS(+) kunnen we bijna op dezelfde manier uitwerken:
            case Operator.STAR:
            case Operator.PLUS:
            {
                languageLeft = left == null ? emptyLanguage : left.GetLanguage(maxSteps - 1);

                //languageResult.addAll(languageLeft);
                foreach (var item in languageLeft)
                {
                    languageResult.Add(item);
                }

                for (int i = 1; i < maxSteps; i++)
                {
                    var languageTemp = new HashSet <String>(languageResult);
                    foreach (var s1 in languageLeft)
                    {
                        foreach (var s2 in languageTemp)
                        {
                            languageResult.Add(s1 + s2);
                        }
                    }
                }
                if (this.opr == Operator.STAR)
                {
                    languageResult.Add("");
                }
                break;
            }

            default:
            {
                Console.WriteLine("getLanguage is nog niet gedefinieerd voor de operator: " + this.opr);
                break;
            }
            }

            return(languageResult);
        }