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); }
private TypeNameToken?TryExpect(TypeNameTerminal terminal) { var token = _lexer.Peek(); if (terminal != token.Terminal) { return(null); } _lexer.Next(); return(token); }
private TypeNameToken Expect(TypeNameTerminal terminal) { return(TryExpect(terminal) ?? throw new FormatException($"Expected {terminal}.")); }
public TypeNameToken(TypeNameTerminal terminal, string text) { Terminal = terminal; Text = text; }