Пример #1
0
        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));
            }
        }
Пример #2
0
 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;
 }
Пример #3
0
 public SyntaxError(TokenizedItem next, StackItemPattern[] valid)
     : base($"Syntax error: Unexpected '{next.Value}' at {next.LineNumber}:{next.ColNumber}")
 {
     NextItem        = next;
     ValidNextTokens = valid;
 }