// If the next token is a keyword with the given value, return that token after // advancing the parser. Otherwise, do not change the parser state and return false. func expectKeyWord(parser *Parser, value string) (lexer.Token, error) { token := parser.Token if token.Kind == lexer.TokenKind[lexer.NAME] && token.Value == value { err := advance(parser) return token, err } descp := fmt.Sprintf("Expected \"%s\", found %s", value, lexer.GetTokenDesc(token)) return token, gqlerrors.NewSyntaxError(parser.Source, token.Start, descp) }
// If the next token is of the given kind, return that token after advancing // the parser. Otherwise, do not change the parser state and return false. func expect(parser *Parser, kind int) (lexer.Token, error) { token := parser.Token if token.Kind == kind { err := advance(parser) return token, err } descp := fmt.Sprintf("Expected %s, found %s", lexer.GetTokenKindDesc(kind), lexer.GetTokenDesc(token)) return token, gqlerrors.NewSyntaxError(parser.Source, token.Start, descp) }
// Helper function for creating an error when an unexpected lexed token // is encountered. func unexpected(parser *Parser, atToken lexer.Token) error { var token lexer.Token if (atToken == lexer.Token{}) { token = parser.Token } else { token = parser.Token } description := fmt.Sprintf("Unexpected %v", lexer.GetTokenDesc(token)) return gqlerrors.NewSyntaxError(parser.Source, token.Start, description) }