github.com/euank/go@v0.0.0-20160829210321-495514729181/src/cmd/compile/internal/syntax/syntax.go (about)

     1  // Copyright 2016 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package syntax
     6  
     7  import (
     8  	"fmt"
     9  	"io"
    10  	"os"
    11  )
    12  
    13  type Mode uint
    14  
    15  type ErrorHandler func(pos, line int, msg string)
    16  
    17  // TODO(gri) These need a lot more work.
    18  
    19  func ReadFile(filename string, errh ErrorHandler, mode Mode) (*File, error) {
    20  	src, err := os.Open(filename)
    21  	if err != nil {
    22  		return nil, err
    23  	}
    24  	defer src.Close()
    25  	return Read(src, errh, mode)
    26  }
    27  
    28  type bytesReader struct {
    29  	data []byte
    30  }
    31  
    32  func (r *bytesReader) Read(p []byte) (int, error) {
    33  	if len(r.data) > 0 {
    34  		n := copy(p, r.data)
    35  		r.data = r.data[n:]
    36  		return n, nil
    37  	}
    38  	return 0, io.EOF
    39  }
    40  
    41  func ReadBytes(src []byte, errh ErrorHandler, mode Mode) (*File, error) {
    42  	return Read(&bytesReader{src}, errh, mode)
    43  }
    44  
    45  func Read(src io.Reader, errh ErrorHandler, mode Mode) (*File, error) {
    46  	var p parser
    47  	p.init(src, errh)
    48  
    49  	p.next()
    50  	ast := p.file()
    51  
    52  	if errh == nil && p.nerrors > 0 {
    53  		return nil, fmt.Errorf("%d syntax errors", p.nerrors)
    54  	}
    55  
    56  	return ast, nil
    57  }
    58  
    59  func Write(w io.Writer, n *File) error {
    60  	panic("unimplemented")
    61  }