Beispiel #1
0
        public StackSymbolSequenceSet <S> ApplySymbolToStackSymbolSequenceSet(StackSymbolSequenceSet <S> stackSequenceSet, A symbol)
        {
            var res = stackSequenceSet.StackSequenceSet.Select(stackSequence =>
            {
                if (stackSequence.IsEpsilon())
                {
                    return(new StackSymbolSequenceSet <S>());
                }

                var first = stackSequence.StackSequence.First();
                var enterableTransitions = transitions.Where(t => t.CanBeEntered(symbol, first));

                Assertion.Assert(enterableTransitions.Count() <= 1, "in a determinised SDA, only one transition can be entered for a specific configuration");

                if (enterableTransitions.Count() == 0)
                {
                    return(new StackSymbolSequenceSet <S>());
                }

                var stackSymbolsSetWritten = enterableTransitions.First().StackSymbolsSetWritten;
                var remainingStackSequence = new StackSymbolSequence <S>(stackSequence.StackSequence.Skip(1).ToList());
                return(stackSymbolsSetWritten.Multiply(remainingStackSequence));
            });

            return(StackSymbolSequenceSet <S> .Flatten(res));
        }
Beispiel #2
0
 public StackSymbolSequenceSet(StackSymbolSequence <S> stackSequence)
 {
     StackSequenceSet = new List <StackSymbolSequence <S> >()
     {
         stackSequence
     };
 }
Beispiel #3
0
 public StackSymbolSequenceSet <S> ApplyWordToStackSymbolSequence(StackSymbolSequence <S> stackSymbolSequence, IEnumerable <A> word)
 {
     return(ApplyWordToStackSymbolSequenceSet(new StackSymbolSequenceSet <S>(stackSymbolSequence), word));
 }
Beispiel #4
0
        public StackSymbolSequenceSet <S> Multiply(StackSymbolSequence <S> stackSequence)
        {
            var res = StackSequenceSet.Select(s => new StackSymbolSequence <S>(s.StackSequence.Concat(stackSequence.StackSequence).ToList()));

            return(new StackSymbolSequenceSet <S>(res));
        }
Beispiel #5
0
 }                                                                               //the first element of a stack sequence is the top of the new stack
 string KeySelector(StackSymbolSequence <S> s) => s.Id;