func (g *Group) parse(p *Parser) error {
	_, tok, lit := p.next()
	if tok != tIDENT {
		if !isKeyword(tok) {
			return p.unexpected(lit, "group name", g)
		}
	}
	g.Name = lit
	_, tok, lit = p.next()
	if tok != tEQUALS {
		return p.unexpected(lit, "group =", g)
	}
	i, err := p.nextInteger()
	if err != nil {
		return p.unexpected(lit, "group sequence number", g)
	}
	g.Sequence = i
	_, tok, lit = p.next()
	if tok != tLEFTCURLY {
		return p.unexpected(lit, "group opening {", g)
	}
	return parseMessageBody(p, g)
}
parse expects:
groupName "=" fieldNumber { messageBody }
package proto
import (
	"text/scanner"
)
type Group struct {
	Position scanner.Position
	Comment  *Comment
	Name     string
	Optional bool
	Repeated bool
	Required bool
	Sequence int
	Elements []Visitee
}
func (g *Group) Accept(v Visitor) {
	v.VisitGroup(g)
}
func (g *Group) addElement(v Visitee) {
	g.Elements = append(g.Elements, v)
}
func (g *Group) elements() []Visitee {
	return g.Elements
}
func (g *Group) Doc() *Comment {
	return g.Comment
}
func (g *Group) takeLastComment() (last *Comment) {
	last, g.Elements = takeLastComment(g.Elements)
	return
}