2015-02-18 16:06:15 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"flag"
|
|
|
|
"fmt"
|
|
|
|
"os"
|
|
|
|
"strings"
|
|
|
|
|
2015-02-23 13:07:19 +00:00
|
|
|
"github.com/davecheney/profile"
|
2015-02-26 11:02:50 +00:00
|
|
|
"github.com/localhots/kifflom/buffer"
|
|
|
|
"github.com/localhots/kifflom/parser"
|
2015-02-18 16:06:15 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
var (
|
|
|
|
sel string
|
|
|
|
verbose bool
|
2015-02-23 13:07:19 +00:00
|
|
|
prof string
|
2015-02-18 16:06:15 +00:00
|
|
|
)
|
2015-02-23 13:07:19 +00:00
|
|
|
|
2015-02-18 16:06:15 +00:00
|
|
|
flag.StringVar(&sel, "s", "", "Selector")
|
2015-02-23 13:07:19 +00:00
|
|
|
flag.StringVar(&prof, "prof", "", "Performance profiling output")
|
2015-02-18 16:06:15 +00:00
|
|
|
flag.BoolVar(&verbose, "v", false, "Verbose parsing")
|
|
|
|
flag.Parse()
|
|
|
|
|
|
|
|
if len(sel) == 0 && !verbose {
|
|
|
|
fmt.Println("No selectors given and parser is not verbose")
|
|
|
|
os.Exit(1)
|
|
|
|
}
|
|
|
|
|
2015-02-23 13:07:19 +00:00
|
|
|
if prof != "" {
|
|
|
|
defer profile.Start(&profile.Config{
|
|
|
|
CPUProfile: true,
|
|
|
|
ProfilePath: prof,
|
|
|
|
}).Stop()
|
|
|
|
}
|
|
|
|
|
2015-02-18 16:06:15 +00:00
|
|
|
sels := strings.Split(sel, " ")
|
|
|
|
if len(sel) == 0 {
|
|
|
|
sels = []string{}
|
|
|
|
}
|
2015-02-23 13:07:19 +00:00
|
|
|
|
|
|
|
buf := buffer.NewReaderBuffer(os.Stdin)
|
2015-02-18 16:06:15 +00:00
|
|
|
pars := parser.New(buf, sels)
|
|
|
|
if verbose {
|
|
|
|
pars.Debug()
|
|
|
|
}
|
2015-02-23 13:07:19 +00:00
|
|
|
|
2015-02-18 16:06:15 +00:00
|
|
|
res := pars.ParseStream()
|
|
|
|
for {
|
|
|
|
if m, ok := <-res; ok {
|
|
|
|
fmt.Println(m.Sel, m.Val)
|
|
|
|
} else {
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|