Package abnf
implements ABNF grammar as described in RFC 5234
and RFC 7405.
Inspired by:
Add abnf
package and all subpackages to your project:
go get github.com/ghettovoice/abnf@latest
Build a custom operator from basic operators:
package main
import (
"fmt"
"github.com/ghettovoice/abnf"
)
var op = abnf.Concat(
`"a" "b" *"cd"`,
abnf.Literal(`"a"`, []byte("a")),
abnf.Literal(`"b"`, []byte("b")),
abnf.Repeat0Inf(`*"cd"`, abnf.Literal(`"cd"`, []byte("cd"))),
)
func main() {
ns := abnf.NewNodes()
defer ns.Free()
if err := op([]byte("ab"), 0, &ns); err != nil {
panic(err)
}
fmt.Println(ns.Best())
ns.Clear()
if err := op([]byte("abcd"), 0, &ns); err != nil {
panic(err)
}
fmt.Println(ns.Best())
ns.Clear()
if err := op([]byte("abcdcd"), 0, &ns); err != nil {
panic(err)
}
fmt.Println(ns.Best())
// Output:
// ab
// abcd
// abcdcd
}
Checkout abnf
CLI README.
MIT License - see LICENSE file for a full text.