diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2017-08-18 18:38:07 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2017-08-18 18:47:39 +0200 |
| commit | 4802b0fb7440d76d78efc586b87ff6eea46b6b00 (patch) | |
| tree | 7a1e39eb906a18e0be375f39ec45b0679cee39c4 /sys/sysparser/parser.go | |
| parent | 19b893936bebc6189c7627d56d1dc454fbd42714 (diff) | |
sys/syz-sysgen: switch to new parser
For now we just generate the old structs from the new AST.
But this allows to delete the old parser entirely.
Diffstat (limited to 'sys/sysparser/parser.go')
| -rw-r--r-- | sys/sysparser/parser.go | 100 |
1 files changed, 0 insertions, 100 deletions
diff --git a/sys/sysparser/parser.go b/sys/sysparser/parser.go deleted file mode 100644 index d5021eee6..000000000 --- a/sys/sysparser/parser.go +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright 2015/2016 syzkaller project authors. All rights reserved. -// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. - -package sysparser - -import ( - "bufio" - "fmt" - "io" - "os" -) - -type parser struct { - r *bufio.Scanner - s string - i int - l int -} - -func newParser(r io.Reader) *parser { - return &parser{r: bufio.NewScanner(r)} -} - -func (p *parser) Scan() bool { - if !p.r.Scan() { - if err := p.r.Err(); err != nil { - failf("failed to read input file: %v", err) - } - return false - } - p.s = p.r.Text() - p.i = 0 - p.l++ - return true -} - -func (p *parser) Str() string { - return p.s -} - -func (p *parser) EOF() bool { - return p.i == len(p.s) -} - -func (p *parser) Char() byte { - if p.EOF() { - p.failf("unexpected eof") - } - return p.s[p.i] -} - -func (p *parser) Parse(ch byte) { - if p.EOF() { - p.failf("want %s, got EOF", string(ch)) - } - if p.s[p.i] != ch { - p.failf("want '%v', got '%v'", string(ch), string(p.s[p.i])) - } - p.i++ - p.SkipWs() -} - -func (p *parser) SkipWs() { - for p.i < len(p.s) && (p.s[p.i] == ' ' || p.s[p.i] == '\t') { - p.i++ - } -} - -func (p *parser) Ident() string { - start, end := p.i, 0 - if p.Char() == '"' { - p.Parse('"') - for p.Char() != '"' { - p.i++ - } - end = p.i + 1 - p.Parse('"') - } else { - for p.i < len(p.s) && - (p.s[p.i] >= 'a' && p.s[p.i] <= 'z' || - p.s[p.i] >= 'A' && p.s[p.i] <= 'Z' || - p.s[p.i] >= '0' && p.s[p.i] <= '9' || - p.s[p.i] == '_' || p.s[p.i] == '$' || // $ is for n-way syscalls (like ptrace$peek) - p.s[p.i] == '-' || p.s[p.i] == ':') { // : is for ranged int (like int32[-3:10]) - p.i++ - } - if start == p.i { - p.failf("failed to parse identifier at pos %v", start) - } - end = p.i - } - s := p.s[start:end] - p.SkipWs() - return s -} - -func (p *parser) failf(msg string, args ...interface{}) { - fmt.Fprintf(os.Stderr, "line #%v: %v\n", p.l, p.s) - failf(msg, args...) -} |
