Ejemplo n.º 1
0
        public void AddLexeme(GenericToken generic, IN token)
        {
            NodeCallback <GenericToken> callback = match =>
            {
                switch (match.Result.TokenID)
                {
                case GenericToken.Identifier:
                {
                    if (derivedTokens.ContainsKey(GenericToken.Identifier))
                    {
                        var possibleTokens = derivedTokens[GenericToken.Identifier];
                        if (possibleTokens.ContainsKey(match.Result.Value))
                        {
                            match.Properties[DerivedToken] = possibleTokens[match.Result.Value];
                        }
                        else
                        {
                            match.Properties[DerivedToken] = identifierDerivedToken;
                        }
                    }
                    else
                    {
                        match.Properties[DerivedToken] = identifierDerivedToken;
                    }

                    break;
                }

                case GenericToken.Int:
                {
                    match.Properties[DerivedToken] = intDerivedToken;
                    break;
                }

                case GenericToken.Double:
                {
                    match.Properties[DerivedToken] = doubleDerivedToken;
                    break;
                }

                default:
                {
                    match.Properties[DerivedToken] = token;
                    break;
                }
                }

                return(match);
            };

            switch (generic)
            {
            case GenericToken.Double:
            {
                doubleDerivedToken = token;
                FSMBuilder.GoTo(in_double);
                FSMBuilder.CallBack(callback);
                break;
            }

            case GenericToken.Int:
            {
                intDerivedToken = token;
                FSMBuilder.GoTo(in_int);
                FSMBuilder.CallBack(callback);
                break;
            }

            case GenericToken.Identifier:
            {
                identifierDerivedToken = token;
                FSMBuilder.GoTo(in_identifier);
                FSMBuilder.CallBack(callback);
                break;
            }
            }
        }
Ejemplo n.º 2
0
        public void AddLexeme(GenericToken generic, IN token)
        {
            if (generic == GenericToken.Identifier)
            {
                identifierDerivedToken = token;
                var derived = new Dictionary <string, IN>();
                if (derivedTokens.ContainsKey(generic))
                {
                    derived = derivedTokens[generic];
                }
                derived[defaultIdentifierKey] = token;
                //return;
            }
            if (generic == GenericToken.Double)
            {
                doubleDerivedToken = token;
            }
            if (generic == GenericToken.Int)
            {
                intDerivedToken = token;
            }

            NodeCallback <GenericToken> callback = (FSMMatch <GenericToken> match) =>
            {
                switch (match.Result.TokenID)
                {
                case GenericToken.Identifier:
                {
                    if (derivedTokens.ContainsKey(GenericToken.Identifier))
                    {
                        var possibleTokens = derivedTokens[GenericToken.Identifier];
                        if (possibleTokens.ContainsKey(match.Result.Value))
                        {
                            match.Properties[DerivedToken] = possibleTokens[match.Result.Value];
                        }
                        else
                        {
                            match.Properties[DerivedToken] = identifierDerivedToken;
                        }
                    }
                    else
                    {
                        match.Properties[DerivedToken] = identifierDerivedToken;
                    }
                    ;
                    break;
                }

                case GenericToken.Int:
                {
                    match.Properties[DerivedToken] = intDerivedToken;
                    break;
                }

                case GenericToken.Double:
                {
                    match.Properties[DerivedToken] = doubleDerivedToken;
                    break;
                }

                default:
                {
                    match.Properties[DerivedToken] = token;
                    break;
                }
                }

                return(match);
            };

            switch (generic)
            {
            case GenericToken.Double:
            {
                FSMBuilder.GoTo(in_double);
                FSMBuilder.CallBack(callback);
                break;
            }

            case GenericToken.Int:
            {
                FSMBuilder.GoTo(in_int);
                FSMBuilder.CallBack(callback);
                break;
            }

            case GenericToken.Identifier:
            {
                FSMBuilder.GoTo(in_identifier);
                FSMBuilder.CallBack(callback);
                break;
            }
            }
        }