public IEnumerable <TokenizedItem> Split(TokenizedItem input) { if (input.TokenType == "qstring") { yield return(input); yield break; } else { HashSet <string> ValidNames = new HashSet <string>(Mappings[input.Value[0]]); int lastSplit = 0; for (var i = 1; i < input.Value.Length; i++) { char c = input.Value[i]; HashSet <string> valid = Mappings[c]; var intersection = new HashSet <string>(ValidNames.Intersect(valid)); if (intersection.Count == 0) { yield return(new TokenizedItem(input.Value.Substring(lastSplit, i - lastSplit), ValidNames.First(), input.LineNumber, input.ColNumber + lastSplit)); lastSplit = i; ValidNames = valid; } else { ValidNames = intersection; } } yield return(new TokenizedItem(input.Value.Substring(lastSplit), ValidNames.First(), input.LineNumber, input.ColNumber + lastSplit)); } }
public UnknownTokenException(ParserStackItem stackItem) : base($"An input item does not match any column of the parse table. Value = '{stackItem.Token.Value}', Type = '{stackItem.Token.TokenType}'") { UnrecognizedItem = stackItem.Token; }
public SyntaxError(TokenizedItem next, StackItemPattern[] valid) : base($"Syntax error: Unexpected '{next.Value}' at {next.LineNumber}:{next.ColNumber}") { NextItem = next; ValidNextTokens = valid; }