public override TokenSet Init_PreCheckSet(ParseNode_Root parser) { if (FirstSet == null) { FirstSet = new TokenSet(); foreach (var t in nodes) { if (t is ParseNode_ManyOpt_If) { continue; } var set = t.Init_PreCheckSet(parser); if (FirstSet.Accepts(set)) { Debug.LogError(this + ": ambiguous alternatives"); Debug.LogWarning(FirstSet.Intersecton(set).ToString(parser)); } FirstSet.Add(set); } foreach (var t in nodes) { if (t is ParseNode_ManyOpt_If) { var set = t.Init_PreCheckSet(parser); FirstSet.Add(set); } } } return(FirstSet); }
public virtual void CheckLL1(ParseNode_Root parser) { if (FollowSet == null) { throw new Exception(this + ": follow not set"); } if (FirstSet.ContainsEmpty() && FirstSet.Accepts(FollowSet)) { throw new Exception(this + ": ambiguous\n" + " lookahead " + FirstSet.ToString(parser) + "\n" + " follow " + FollowSet.ToString(parser)); } }