68 lines
1.1 KiB
Go
68 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"io/ioutil"
|
|
"log"
|
|
"os"
|
|
|
|
"gitea.xintech.co/zhouzhihong/lexmachine"
|
|
"github.com/timtadh/getopt"
|
|
)
|
|
|
|
func main() {
|
|
short := "h"
|
|
long := []string{
|
|
"help",
|
|
}
|
|
|
|
_, optargs, err := getopt.GetOpt(os.Args[1:], short, long)
|
|
if err != nil {
|
|
log.Print(err)
|
|
log.Println("try --help")
|
|
os.Exit(1)
|
|
}
|
|
|
|
for _, oa := range optargs {
|
|
switch oa.Opt() {
|
|
case "-h", "--help":
|
|
fmt.Println("parse a sensors.conf")
|
|
os.Exit(0)
|
|
}
|
|
}
|
|
lexer := newLexer()
|
|
stmts, err := parse(lexer, os.Stdin)
|
|
if err != nil {
|
|
fmt.Fprintln(os.Stderr, err)
|
|
os.Exit(1)
|
|
}
|
|
for _, stmt := range stmts {
|
|
fmt.Println(stmt)
|
|
}
|
|
}
|
|
|
|
func parse(lexer *lexmachine.Lexer, fin io.Reader) (stmts []*Node, err error) {
|
|
defer func() {
|
|
if e := recover(); e != nil {
|
|
switch e.(type) {
|
|
case error:
|
|
err = e.(error)
|
|
stmts = nil
|
|
default:
|
|
panic(e)
|
|
}
|
|
}
|
|
}()
|
|
text, err := ioutil.ReadAll(fin)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
scanner, err := newGoLex(lexer, text)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
yyParse(scanner)
|
|
return scanner.stmts, nil
|
|
}
|