Exemplo n.º 1
0
 private static string GetFirstSymbol(Bamboo.Parsing.Grammars.Expression expression)
 {
     if (expression is Bamboo.Parsing.Grammars.Symbol)
     {
         Bamboo.Parsing.Grammars.Symbol symbol = (Bamboo.Parsing.Grammars.Symbol)expression;
         return(symbol.Token);
     }
     else if (expression is Bamboo.Parsing.Grammars.Concatenation)
     {
         Bamboo.Parsing.Grammars.Concatenation concatenation = (Bamboo.Parsing.Grammars.Concatenation)expression;
         return(GetFirstSymbol(concatenation.Expressions[0]));
     }
     else
     {
         throw new System.Exception("INVALID");
     }
 }
Exemplo n.º 2
0
        private static void First(string A, Bamboo.Parsing.Grammars.Expression expression, Surf.Set FIRST)
        {
            List <Bamboo.Parsing.Grammars.Expression> B = ToList(expression);

            Surf.Set FIRST_A = (Surf.Set)FIRST.Apply(A);

            Union(FIRST_A, ((Surf.Set)FIRST.Apply(((Bamboo.Parsing.Grammars.Symbol)B[0]).Token)).Difference(EPSILON));

            int i = 0;

            while (((Surf.Set)FIRST.Apply(((Bamboo.Parsing.Grammars.Symbol)B[0]).Token)).Contains("EPSILON") && i < (B.Count - 1))
            {
                Union(FIRST_A, ((Surf.Set)FIRST.Apply(((Bamboo.Parsing.Grammars.Symbol)B[i + 1]).Token)).Difference(EPSILON));
                i++;
            }

            if (i == (B.Count - 1) && ((Surf.Set)FIRST.Apply(((Bamboo.Parsing.Grammars.Symbol)B[B.Count - 1]).Token)).Contains("EPSILON"))
            {
                Union(FIRST_A, EPSILON);
            }
        }
Exemplo n.º 3
0
        private static List <Bamboo.Parsing.Grammars.Expression> ToList(Bamboo.Parsing.Grammars.Expression expression)
        {
            List <Bamboo.Parsing.Grammars.Expression> list = new List <Bamboo.Parsing.Grammars.Expression>();

            if (expression is Bamboo.Parsing.Grammars.Symbol)
            {
                Bamboo.Parsing.Grammars.Symbol symbol = (Bamboo.Parsing.Grammars.Symbol)expression;
                list.Add(symbol);
            }
            else if (expression is Bamboo.Parsing.Grammars.Concatenation)
            {
                Bamboo.Parsing.Grammars.Concatenation concatenation = (Bamboo.Parsing.Grammars.Concatenation)expression;
                foreach (Bamboo.Parsing.Grammars.Symbol symbol in concatenation.Expressions)
                {
                    list.Add(symbol);
                }
            }
            else
            {
                throw new System.Exception("INVALID");
            }
            return(list);
        }
Exemplo n.º 4
0
 private static bool CanResolve(Bamboo.Parsing.Grammars.Expression expression, List <Bamboo.Parsing.Grammars.Production> remaining)
 {
     if (expression is Bamboo.Parsing.Grammars.Symbol)
     {
         Bamboo.Parsing.Grammars.Symbol symbol = (Bamboo.Parsing.Grammars.Symbol)expression;
         foreach (Bamboo.Parsing.Grammars.Production production in remaining)
         {
             if (production.Nonterminal.Equals(symbol.Token))
             {
                 return(false);
             }
         }
         return(true);
     }
     else if (expression is Bamboo.Parsing.Grammars.Concatenation)
     {
         Bamboo.Parsing.Grammars.Concatenation concatenation = (Bamboo.Parsing.Grammars.Concatenation)expression;
         return(CanResolve(concatenation.Expressions[0], remaining));
     }
     else
     {
         throw new System.Exception("INVALID");
     }
 }
Exemplo n.º 5
0
 private Surf.Set FOLLOW(Bamboo.Parsing.Grammars.Expression expression)
 {
     return(FOLLOW(((Bamboo.Parsing.Grammars.Symbol)expression).Token));
 }
Exemplo n.º 6
0
 private Surf.Set FIRST(Bamboo.Parsing.Grammars.Expression expression)
 {
     return((Surf.Set)first.Apply(((Bamboo.Parsing.Grammars.Symbol)expression).Token));
 }