string IProductionVisitor <int, string> .VisitAlternation <T>(AlternationProduction <T> alternationProduction, int DotLocation) { if (DotLocation == 0) { return(String.Format("{0} ::=.({1}|{2})", alternationProduction.DebugName, alternationProduction.Production1.DebugName, alternationProduction.Production2.DebugName)); } else { return(String.Format("{0} ::= ({1}|{2}).", alternationProduction.DebugName, alternationProduction.Production1.DebugName, alternationProduction.Production2.DebugName)); } }
bool IProductionVisitor <ClosureInfo, bool> .VisitAlternation <T>(AlternationProduction <T> alternationProduction, ClosureInfo arg) { if (arg.DotLocation == 0) { if (!alternationProduction.Production1.IsTerminal) { arg.IsChanged = arg.LR0ItemSet.Add(new LR0Item(alternationProduction.Production1.Info.Index, 0)) || arg.IsChanged; } if (!alternationProduction.Production2.IsTerminal) { arg.IsChanged = arg.LR0ItemSet.Add(new LR0Item(alternationProduction.Production2.Info.Index, 0)) || arg.IsChanged; } } return(arg.IsChanged); }
bool IProductionVisitor <bool, bool> .VisitAlternation <T>(AlternationProduction <T> alternationProduction, bool IsChanged) { var info = alternationProduction.Info; var info1 = alternationProduction.Production1.Info; var info2 = alternationProduction.Production2.Info; IsChanged = info.First.UnionCheck(info1.First) || IsChanged; IsChanged = info.First.UnionCheck(info2.First) || IsChanged; IsChanged = info1.Follow.UnionCheck(info.Follow) || IsChanged; IsChanged = info2.Follow.UnionCheck(info.Follow) || IsChanged; bool isNullable = info1.IsNullable || info2.IsNullable; if (info.IsNullable != isNullable) { IsChanged = true; info.IsNullable = isNullable; } return(IsChanged); }
List <IProduction> IProductionVisitor <List <IProduction>, List <IProduction> > .VisitAlternation <T>(AlternationProduction <T> alternationProduction, List <IProduction> Productions) { if (alternationProduction.Info != null) { return(Productions); } alternationProduction.Info = new ProductionInfo(); alternationProduction.Production1.Accept(this, Productions); alternationProduction.Production2.Accept(this, Productions); alternationProduction.Info.Index = Productions.Count; alternationProduction.Info.SymbolCount = 1; Productions.Add(alternationProduction); return(Productions); }
IReadOnlyList <IProduction> IProductionVisitor <int, IReadOnlyList <IProduction> > .VisitAlternation <T>(AlternationProduction <T> alternationProduction, int DotLocation) { if (DotLocation == 0) { return(new IProduction[2] { alternationProduction.Production1, alternationProduction.Production2 }); } else { return(s_empty); } }
bool IProductionVisitor <Tuple <int, bool, ISet <LR0Item> >, bool> .VisitAlternation <T>(AlternationProduction <T> alternationProduction, Tuple <int, bool, ISet <LR0Item> > arg) { int DotLocation = arg.Item1; bool IsChanged = arg.Item2; ISet <LR0Item> LR0ItemSet = arg.Item3; if (DotLocation == 0) { if (!alternationProduction.Production1.IsTerminal) { IsChanged = LR0ItemSet.Add(new LR0Item(alternationProduction.Production1.Info.Index, 0)) || IsChanged; } if (!alternationProduction.Production2.IsTerminal) { IsChanged = LR0ItemSet.Add(new LR0Item(alternationProduction.Production2.Info.Index, 0)) || IsChanged; } } return(IsChanged); }