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"); } }
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); } }
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); }
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"); } }
private Surf.Set FOLLOW(Bamboo.Parsing.Grammars.Expression expression) { return(FOLLOW(((Bamboo.Parsing.Grammars.Symbol)expression).Token)); }
private Surf.Set FIRST(Bamboo.Parsing.Grammars.Expression expression) { return((Surf.Set)first.Apply(((Bamboo.Parsing.Grammars.Symbol)expression).Token)); }