func (p *Parser) Parse(filename string, r io.Reader) (*ast.Grammar, error) {
	p.errs.reset()
	p.s.Init(filename, r, p.errs.add)

	g := p.grammar()
	return g, p.errs.err()
}
// Parse parses the data from the reader r and generates the AST
// or returns an error if it fails. The filename is used as information
// in the error messages.
Parse parses the data from the reader r and generates the AST
or returns an error if it fails. The filename is used as information
in the error messages.
// Parse parses the data from the reader r and generates the AST // or returns an error if it fails . The filename is used as information // in the error messages .
func (p *Parser) Parse(filename string, r io.Reader) (*ast.Grammar, error) {
	p.errs.reset()
	p.s.Init(filename, r, p.errs.add)
	g := p.grammar()
	return g, p.errs.err()
}
func ( p * Parser ) Parse ( filename string , r io . Reader ) ( * ast . Grammar , error ) { p . errs . reset ( ) p . s . Init ( filename , r , p . errs . add ) g := p . grammar ( ) return g , p . errs . err ( ) }
Parse parses the data from the reader r and generates the AST
or returns an error if it fails.
Parse parses the data from the reader r and generates the AST or returns an error if it fails .