Exemplo n.º 1
0
 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));
     }
 }