public ParserProduction(ParserAutomata automata, Grammar <TToken> .ParserRule parserRule, Grammar <TToken> .ParserProduction grammarParserProduction, List <ParserProduction> productions) : base(grammarParserProduction.Entries.Select(automata.CreateParserEntry)) { Name = grammarParserProduction.Name ?? automata.GenerateProductionName(); IsInline = parserRule.IsInline; GrammarParserProduction = grammarParserProduction; ProductionIndex = productions.Count; productions.Add(this); Flatten(); if (IsInline) { return; } Binder = grammarParserProduction.Binding switch { Grammar <TToken> .ConstructorParserProductionBinding _ => new CtorParserProductionBinder(this), Grammar <TToken> .SyntaxFactoryParserProductionBinding _ => new SyntaxFactoryProductionBinder(this), null => null, _ => throw new InvalidOperationException("Unknown binder") }; }
public SyntaxTreeAutomataContext MountSyntaxTreeContext(ParserAutomata parserAutomata, LexemeSource <TToken> lexemeSource, ParserContext parserContext, Parser <TGrammar, TToken> parser) { SyntaxTreeAutomataContext context; lock (SyntaxTreeContextPool) context = SyntaxTreeContextPool.Count > 0 ? SyntaxTreeContextPool.Pop() : new SyntaxTreeAutomataContext(this, parserAutomata); context.Mount(lexemeSource, parserContext, parser); return(context); }
public ProcessAutomataContext MountProcessContext(ParserAutomata parserAutomata, LexemeSource <TToken> lexemeSource, ParserContext parserContext, Parser <TGrammar, TToken> parser) { ProcessAutomataContext context; lock (ProcessContextPool) context = ProcessContextPool.Count > 0 ? ProcessContextPool.Pop() : new ProcessAutomataContext(this, parserAutomata); context.Mount(lexemeSource, parserContext, parser); return(context); }
public VisitorAutomataContext MountVisitorContext(Visitor visitor, ParserAutomata parserAutomata, LexemeSource <TToken> lexemeSource, ParserContext parserContext, Parser <TGrammar, TToken> parser) { var pool = GetVisitorContextPool(visitor.GetType()); VisitorAutomataContext context; lock (pool) context = pool.Count > 0 ? pool.Pop() : new VisitorAutomataContext(visitor, this, parserAutomata); context.Mount(lexemeSource, parserContext, parser); return(context); }
protected ValueParserAutomataContext(ParserState state, ParserAutomata parserAutomata) : base(state, parserAutomata) { var productionsCount = parserAutomata.Productions.Count; _productionBuilderPool = new ProductionInstanceBuilderPool[productionsCount]; for (var i = 0; i < productionsCount; i++) { var automataProduction = Automata.Productions[i]; if (automataProduction.IsInline == false) { _productionBuilderPool[i] = new ProductionInstanceBuilderPool(automataProduction); } } }
public VisitorAutomataContext(Visitor visitor, ParserState state, ParserAutomata parserAutomata) : base(state, parserAutomata) { Visitor = visitor; }
protected ParserAutomataContext(ParserState state, ParserAutomata parserAutomata) : base(state) { Automata = parserAutomata; }
public ProcessAutomataContext(ParserState state, ParserAutomata parserAutomata) : base(state, parserAutomata) { }
public SyntaxTreeAutomataContext(ParserState state, ParserAutomata parserAutomata) : base(state, parserAutomata) { }