Beispiel #1
0
        private List <string> ParseDottedExpression(TypeNameTerminal terminal)
        {
            var result = new List <string>();

            while (true)
            {
                var nextIdentifier = TryExpect(terminal);
                if (!nextIdentifier.HasValue)
                {
                    break;
                }

                result.Add(nextIdentifier.Value.Text);

                if (!TryExpect(TypeNameTerminal.Dot).HasValue)
                {
                    break;
                }
            }

            if (result.Count == 0)
            {
                throw new FormatException($"Expected {string.Join(", ",terminal)}.");
            }

            return(result);
        }
Beispiel #2
0
        private TypeNameToken?TryExpect(TypeNameTerminal terminal)
        {
            var token = _lexer.Peek();

            if (terminal != token.Terminal)
            {
                return(null);
            }

            _lexer.Next();
            return(token);
        }
Beispiel #3
0
 private TypeNameToken Expect(TypeNameTerminal terminal)
 {
     return(TryExpect(terminal)
            ?? throw new FormatException($"Expected {terminal}."));
 }
Beispiel #4
0
 public TypeNameToken(TypeNameTerminal terminal, string text)
 {
     Terminal = terminal;
     Text     = text;
 }