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