2024-04-10 10:45:58 +00:00
|
|
|
package cmdlang
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/alecthomas/participle/v2"
|
|
|
|
"io"
|
|
|
|
)
|
|
|
|
|
|
|
|
type astLiteral struct {
|
|
|
|
Str *string `parser:"@String"`
|
|
|
|
Ident *string `parser:" | @Ident"`
|
|
|
|
}
|
|
|
|
|
|
|
|
type astCmdArg struct {
|
|
|
|
Literal astLiteral `parser:"@@"`
|
|
|
|
}
|
|
|
|
|
|
|
|
type astCmd struct {
|
|
|
|
Name string `parser:"@Ident"`
|
|
|
|
Args []astCmdArg `parser:"@@*"`
|
|
|
|
}
|
|
|
|
|
2024-04-10 11:58:06 +00:00
|
|
|
type astPipeline struct {
|
|
|
|
First *astCmd `parser:"@@"`
|
|
|
|
Rest []*astCmd `parser:"( '|' @@ )*"`
|
|
|
|
}
|
|
|
|
|
|
|
|
var parser = participle.MustBuild[astPipeline]()
|
2024-04-10 10:45:58 +00:00
|
|
|
|
2024-04-10 11:58:06 +00:00
|
|
|
func parse(r io.Reader) (*astPipeline, error) {
|
2024-04-10 10:45:58 +00:00
|
|
|
return parser.Parse("test", r)
|
|
|
|
}
|