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; } } }
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; } } }