コード例 #1
0
        public static IImmutableSet <Token> NextOf(this IFirstFollowProvider provider, PartialRule partialRule)
        {
            var firsts = provider.FirstOf(partialRule.Symbols);

            return(firsts.ContainsDefault()
                ? firsts.RemoveDefault().Union(provider.FollowOf(partialRule.Rule))
                : firsts);
        }
コード例 #2
0
        public static IImmutableSet <Token> FirstOf(this IFirstFollowProvider provider, IEnumerable <Symbol> symbols)
        {
            var builder = ImmutableHashSet.CreateBuilder <Token>();

            foreach (var symbol in symbols)
            {
                var firsts = provider.FirstOf(symbol);
                builder.UnionWith(firsts.Where(s => s != null));
                if (!firsts.ContainsDefault())
                {
                    // not nullable
                    return(builder.ToImmutable());
                }
            }

            // if we reach here, we're nullable
            return(builder.ToImmutable().AddDefault());
        }
コード例 #3
0
 public static IImmutableSet <Token> NextOf(this IFirstFollowProvider provider, Rule rule)
 {
     return(provider.NextOf(new PartialRule(rule)));
 }
コード例 #4
0
 public static bool IsNullable(this IFirstFollowProvider provider, Symbol symbol)
 {
     return(symbol is NonTerminal && provider.FirstOf(symbol).Contains(null));
 }
コード例 #5
0
 public InternalFirstFollowProvider(IFirstFollowProvider provider)
 {
     this.originalGrammarProvider = provider;
 }