Exemple #1
0
        public Grammar()
        {
            Options     = RuntimeOptions.Default;

            Productions = new ProductionCollection(this);
            Symbols     = new SymbolCollection(this);
            Conditions  = new ConditionCollection(this);
            Matchers    = new MatcherCollection(this);
            Mergers     = new MergerCollection(this);
            Contexts    = new ForeignContextCollection(this);
            Reports     = new ReportCollection();
            GlobalContextProvider = new ForeignContextProvider { Owner = this.Contexts };
            Joint       = new Joint();

            for (int i = PredefinedTokens.Count; i != 0; --i)
            {
                Symbols.Add(null); // stub
            }

            Symbols[PredefinedTokens.Propagated]      = new Symbol("#");
            Symbols[PredefinedTokens.Epsilon]         = new Symbol("$eps");
            Symbols[PredefinedTokens.AugmentedStart]  = new Symbol("$start");
            Symbols[PredefinedTokens.Eoi]             = new Symbol("$")
                                          {
                                              Categories = SymbolCategory.DoNotInsert
                                                         | SymbolCategory.DoNotDelete
                                          };
            Symbols[PredefinedTokens.Error]           = new Symbol("$error");

            AugmentedProduction = Productions.Define((Symbol)Symbols[PredefinedTokens.AugmentedStart], new Symbol[] { null });
        }
 public ContextCode(
     EmitSyntax       emit,
     Pipe<EmitSyntax> ldGlobalContextProvider,
     Pipe<EmitSyntax> ldLookback,
     LanguageData     data,
     ForeignContextProvider  contextProvider,
     LocalContextBinding[] localContexts = null)
 {
     this.emit = emit;
     this.ldGlobalContextProvider   = ldGlobalContextProvider;
     this.ldLookback      = ldLookback;
     this.contextProvider = contextProvider;
     this.localContexts   = localContexts;
 }
 public ContextCode(
     EmitSyntax emit,
     Pipe <EmitSyntax> ldGlobalContextProvider,
     Pipe <EmitSyntax> ldLookback,
     LanguageData data,
     ForeignContextProvider contextProvider,
     LocalContextBinding[] localContexts = null)
 {
     this.emit = emit;
     this.ldGlobalContextProvider = ldGlobalContextProvider;
     this.ldLookback      = ldLookback;
     this.contextProvider = contextProvider;
     this.localContexts   = localContexts;
 }
        private static void InitContextProvider(
            Grammar grammar,
            CilContextProvider cilProvider,
            ForeignContextProvider provider)
        {
            provider.Joint.Add(cilProvider);

            foreach (var cilContext in cilProvider.Contexts)
            {
                ForeignContext context;
                if (grammar.Contexts.FindOrAdd(cilContext.UniqueName, out context))
                {
                    context.Joint.Add(cilContext);
                }

                provider.Add(context);
            }
        }
        private static void InitContextProvider(
            Grammar            grammar,
            CilContextProvider cilProvider,
            ForeignContextProvider    provider)
        {
            provider.Joint.Add(cilProvider);

            foreach (var cilContext in cilProvider.Contexts)
            {
                ForeignContext context;
                if (grammar.Contexts.FindOrAdd(cilContext.UniqueName, out context))
                {
                    context.Joint.Add(cilContext);
                }

                provider.Add(context);
            }
        }