diff options
Diffstat (limited to 'libgo/go/exp/datafmt/parser.go')
-rw-r--r-- | libgo/go/exp/datafmt/parser.go | 58 |
1 files changed, 20 insertions, 38 deletions
diff --git a/libgo/go/exp/datafmt/parser.go b/libgo/go/exp/datafmt/parser.go index 7dedb531a51..a2ddd389723 100644 --- a/libgo/go/exp/datafmt/parser.go +++ b/libgo/go/exp/datafmt/parser.go @@ -5,7 +5,6 @@ package datafmt import ( - "container/vector" "go/scanner" "go/token" "os" @@ -28,7 +27,6 @@ type parser struct { rules map[string]expr // RuleName -> Expression } - func (p *parser) next() { p.pos, p.tok, p.lit = p.scanner.Scan() switch p.tok { @@ -39,7 +37,6 @@ func (p *parser) next() { } } - func (p *parser) init(fset *token.FileSet, filename string, src []byte) { p.ErrorVector.Reset() p.file = fset.AddFile(filename, fset.Base(), len(src)) @@ -49,12 +46,10 @@ func (p *parser) init(fset *token.FileSet, filename string, src []byte) { p.rules = make(map[string]expr) } - func (p *parser) error(pos token.Pos, msg string) { p.Error(p.file.Position(pos), msg) } - func (p *parser) errorExpected(pos token.Pos, msg string) { msg = "expected " + msg if pos == p.pos { @@ -68,7 +63,6 @@ func (p *parser) errorExpected(pos token.Pos, msg string) { p.error(pos, msg) } - func (p *parser) expect(tok token.Token) token.Pos { pos := p.pos if p.tok != tok { @@ -78,14 +72,12 @@ func (p *parser) expect(tok token.Token) token.Pos { return pos } - func (p *parser) parseIdentifier() string { name := p.lit p.expect(token.IDENT) return name } - func (p *parser) parseTypeName() (string, bool) { pos := p.pos name, isIdent := p.parseIdentifier(), true @@ -102,7 +94,6 @@ func (p *parser) parseTypeName() (string, bool) { return name, isIdent } - // Parses a rule name and returns it. If the rule name is // a package-qualified type name, the package name is resolved. // The 2nd result value is true iff the rule name consists of a @@ -126,7 +117,6 @@ func (p *parser) parseRuleName() (string, bool) { return name, isIdent } - func (p *parser) parseString() string { s := "" if p.tok == token.STRING { @@ -142,7 +132,6 @@ func (p *parser) parseString() string { return s } - func (p *parser) parseLiteral() literal { s := []byte(p.parseString()) @@ -150,14 +139,14 @@ func (p *parser) parseLiteral() literal { // and speed up printing of the literal, split it into segments // that start with "%" possibly followed by a last segment that // starts with some other character. - var list vector.Vector + var list []interface{} i0 := 0 for i := 0; i < len(s); i++ { if s[i] == '%' && i+1 < len(s) { // the next segment starts with a % format if i0 < i { // the current segment is not empty, split it off - list.Push(s[i0:i]) + list = append(list, s[i0:i]) i0 = i } i++ // skip %; let loop skip over char after % @@ -165,18 +154,17 @@ func (p *parser) parseLiteral() literal { } // the final segment may start with any character // (it is empty iff the string is empty) - list.Push(s[i0:]) + list = append(list, s[i0:]) // convert list into a literal - lit := make(literal, list.Len()) - for i := 0; i < list.Len(); i++ { - lit[i] = list.At(i).([]byte) + lit := make(literal, len(list)) + for i := 0; i < len(list); i++ { + lit[i] = list[i].([]byte) } return lit } - func (p *parser) parseField() expr { var fname string switch p.tok { @@ -204,7 +192,6 @@ func (p *parser) parseField() expr { return &field{fname, ruleName} } - func (p *parser) parseOperand() (x expr) { switch p.tok { case token.STRING: @@ -242,38 +229,36 @@ func (p *parser) parseOperand() (x expr) { return x } - func (p *parser) parseSequence() expr { - var list vector.Vector + var list []interface{} for x := p.parseOperand(); x != nil; x = p.parseOperand() { - list.Push(x) + list = append(list, x) } // no need for a sequence if list.Len() < 2 - switch list.Len() { + switch len(list) { case 0: return nil case 1: - return list.At(0).(expr) + return list[0].(expr) } // convert list into a sequence - seq := make(sequence, list.Len()) - for i := 0; i < list.Len(); i++ { - seq[i] = list.At(i).(expr) + seq := make(sequence, len(list)) + for i := 0; i < len(list); i++ { + seq[i] = list[i].(expr) } return seq } - func (p *parser) parseExpression() expr { - var list vector.Vector + var list []interface{} for { x := p.parseSequence() if x != nil { - list.Push(x) + list = append(list, x) } if p.tok != token.OR { break @@ -282,22 +267,21 @@ func (p *parser) parseExpression() expr { } // no need for an alternatives if list.Len() < 2 - switch list.Len() { + switch len(list) { case 0: return nil case 1: - return list.At(0).(expr) + return list[0].(expr) } // convert list into a alternatives - alt := make(alternatives, list.Len()) - for i := 0; i < list.Len(); i++ { - alt[i] = list.At(i).(expr) + alt := make(alternatives, len(list)) + for i := 0; i < len(list); i++ { + alt[i] = list[i].(expr) } return alt } - func (p *parser) parseFormat() { for p.tok != token.EOF { pos := p.pos @@ -343,7 +327,6 @@ func (p *parser) parseFormat() { p.expect(token.EOF) } - func remap(p *parser, name string) string { i := strings.Index(name, ".") if i >= 0 { @@ -359,7 +342,6 @@ func remap(p *parser, name string) string { return name } - // Parse parses a set of format productions from source src. Custom // formatters may be provided via a map of formatter functions. If // there are no errors, the result is a Format and the error is nil. |