Esempio n. 1
0
        bool IProductionVisitor <ClosureInfo, bool> .VisitMapping <TSource, TReturn>(MappingProduction <TSource, TReturn> mappingProduction, ClosureInfo arg)
        {
            if (arg.DotLocation == 0 && !mappingProduction.SourceProduction.IsTerminal)
            {
                arg.IsChanged = arg.LR0ItemSet.Add(new LR0Item(mappingProduction.SourceProduction.Info.Index, 0)) || arg.IsChanged;
            }

            return(arg.IsChanged);
        }
Esempio n. 2
0
 string IProductionVisitor <int, string> .VisitMapping <TSource, TReturn>(MappingProduction <TSource, TReturn> mappingProduction, int DotLocation)
 {
     if (DotLocation == 0)
     {
         return(mappingProduction.DebugName + " ::=." + mappingProduction.SourceProduction.DebugName);
     }
     else
     {
         return(mappingProduction.DebugName + " ::= " + mappingProduction.SourceProduction.DebugName + '.');
     }
 }
Esempio n. 3
0
        bool IProductionVisitor <bool, bool> .VisitMapping <TSource, TReturn>(MappingProduction <TSource, TReturn> mappingProduction, bool IsChanged)
        {
            var source = mappingProduction.SourceProduction;

            IsChanged = mappingProduction.Info.First.UnionCheck(source.Info.First) || IsChanged;
            IsChanged = source.Info.Follow.UnionCheck(mappingProduction.Info.Follow) || IsChanged;

            if (mappingProduction.Info.IsNullable != source.Info.IsNullable)
            {
                mappingProduction.Info.IsNullable = source.Info.IsNullable;
                IsChanged = true;
            }

            return(IsChanged);
        }
Esempio n. 4
0
 IReadOnlyList <IProduction> IProductionVisitor <int, IReadOnlyList <IProduction> > .VisitMapping <TSource, TReturn>(MappingProduction <TSource, TReturn> mappingProduction, int DotLocation)
 {
     if (DotLocation == 0)
     {
         return(new IProduction[1] {
             mappingProduction.SourceProduction
         });
     }
     else
     {
         return(s_empty);
     }
 }
Esempio n. 5
0
        List <IProduction> IProductionVisitor <List <IProduction>, List <IProduction> > .VisitMapping <TSource, TReturn>(MappingProduction <TSource, TReturn> mappingProduction, List <IProduction> Productions)
        {
            if (mappingProduction.Info != null)
            {
                return(Productions);
            }

            mappingProduction.Info = new ProductionInfo();
            mappingProduction.SourceProduction.Accept(this, Productions);

            mappingProduction.Info.Index       = Productions.Count;
            mappingProduction.Info.SymbolCount = 1;
            Productions.Add(mappingProduction);

            return(Productions);
        }
Esempio n. 6
0
        bool IProductionVisitor <Tuple <int, bool, ISet <LR0Item> >, bool> .VisitMapping <TSource, TReturn>(MappingProduction <TSource, TReturn> mappingProduction, Tuple <int, bool, ISet <LR0Item> > arg)
        {
            int            DotLocation = arg.Item1;
            bool           IsChanged   = arg.Item2;
            ISet <LR0Item> LR0ItemSet  = arg.Item3;

            if (DotLocation == 0 && !mappingProduction.SourceProduction.IsTerminal)
            {
                IsChanged = LR0ItemSet.Add(new LR0Item(mappingProduction.SourceProduction.Info.Index, 0)) || IsChanged;
            }

            return(IsChanged);
        }