示例#1
0
        public void AddKeyWord(IN token, string keyword, BuildResult <ILexer <IN> > result)
        {
            NodeCallback <GenericToken> callback = match =>
            {
                IN derivedToken;
                if (derivedTokens.TryGetValue(GenericToken.Identifier, out var derived))
                {
                    if (!derived.TryGetValue(match.Result.Value, out derivedToken))
                    {
                        derivedToken = identifierDerivedToken;
                    }
                }
                else
                {
                    derivedToken = identifierDerivedToken;
                }

                match.Properties[DerivedToken] = derivedToken;

                return(match);
            };

            AddLexeme(GenericToken.Identifier, result, token, keyword);
            var node = FSMBuilder.GetNode(in_identifier);

            if (!FSMBuilder.Fsm.HasCallback(node.Id))
            {
                FSMBuilder.GoTo(in_identifier).CallBack(callback);
            }
        }
示例#2
0
        public void AddKeyWord(IN token, string keyword)
        {
            NodeCallback <GenericToken> callback = (FSMMatch <GenericToken> match) =>
            {
                if (derivedTokens.ContainsKey(GenericToken.Identifier))
                {
                    Dictionary <string, IN> derived = derivedTokens[GenericToken.Identifier];
                    if (derived.ContainsKey(match.Result.Value))
                    {
                        match.Properties[DerivedToken] = derived[match.Result.Value];
                    }
                    else if (derived.ContainsKey(defaultIdentifierKey))
                    {
                        match.Properties[DerivedToken] = identifierDerivedToken;
                    }
                }
                else
                {
                    match.Properties[DerivedToken] = identifierDerivedToken;
                }

                return(match);
            };

            AddLexeme(GenericToken.Identifier, token, keyword);
            FSMBuilder.GoTo(in_identifier);
            var node = FSMBuilder.GetNode(in_identifier);

            if (!FSMBuilder.Fsm.HasCallback(node.Id))
            {
                FSMBuilder.GoTo(in_identifier).
                CallBack(callback);
            }
        }