lexmachine/examples/sensors-parser/main.go
zhouzhihong 879a86b6b7 新特性 (#1)
1. 增加utf8文本的行数和列数计算字段

Co-authored-by: zhouzhihong <zhouzhihong@ijunhai.com>
Reviewed-on: https://gitea.xintech.co/zhouzhihong/lexmachine/pulls/1
2022-08-25 14:41:32 +08:00

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
}