Example #1
0
        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);
            }
        }
Example #2
0
        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);
                }
            }
        }