webtools/cmds/timestamps/input.go

38 lines
719 B
Go
Raw Permalink Normal View History

package main
import (
"time"
"github.com/alecthomas/participle/v2"
"github.com/alecthomas/participle/v2/lexer"
)
var basicLexer = lexer.MustSimple([]lexer.SimpleRule{
{"Identifier", `[a-z][a-zA-Z0-9_]*`},
{"Date", `\d{4}-\d{2}-\d{2}`},
{"Time", `\d{2}:\d{2}:\d{2}`},
{"Int", `\d+`},
{"T", `T`},
{"Z", `Z`},
{"Whitespace", `[ ]+`},
})
var parser = participle.MustBuild[Atom](
participle.Lexer(basicLexer),
participle.Elide("Whitespace"),
participle.UseLookahead(2),
)
func Parse(expr string) (TimeResult, error) {
res, err := parser.ParseString("expr", expr)
if err != nil {
return nil, err
}
return res, nil
}
type TimeResult interface {
Time() (time.Time, error)
RequiresRefreshing() bool
}