private void Scan(INormalState scan, int j, IToken token) { var i = scan.Origin; var currentSymbol = scan.DottedRule.PostDotSymbol; var lexerRule = currentSymbol as ILexerRule; if (token.TokenType != lexerRule.TokenType) { return; } var dottedRule = _dottedRuleRegistry.GetNext(scan.DottedRule); if (_chart.Contains(j + 1, StateType.Normal, dottedRule, i)) { return; } var tokenNode = _nodeSet.AddOrGetExistingTokenNode(token); var parseNode = CreateParseNode( dottedRule, scan.Origin, scan.ParseNode, tokenNode, j + 1); var nextState = StateFactory.NewState(dottedRule, scan.Origin, parseNode); if (_chart.Enqueue(j + 1, nextState)) { LogScan(j + 1, nextState, token); } }
private void Scan(INormalState scan, int j, IToken token) { var i = scan.Origin; var currentSymbol = scan.PostDotSymbol; var lexerRule = currentSymbol as ILexerRule; if (token.TokenType == lexerRule.TokenType) { var tokenNode = _nodeSet.AddOrGetExistingTokenNode(token); var nextState = StateFactory.NextState(scan); var parseNode = CreateParseNode( nextState, scan.ParseNode, tokenNode, j + 1); nextState.ParseNode = parseNode; if (_chart.Enqueue(j + 1, nextState)) { LogScan(j + 1, nextState, token); } } }