import "golang.org/x/exp/ebnf"
        
Package ebnf is a library for EBNF grammars. The input is text ([]byte) satisfying the following grammar (represented itself in EBNF):
Production  = name "=" [ Expression ] "." .
Expression  = Alternative { "|" Alternative } .
Alternative = Term { Term } .
Term        = name | token [ "…" token ] | Group | Option | Repetition .
Group       = "(" Expression ")" .
Option      = "[" Expression "]" .
Repetition  = "{" Expression "}" .
A name is a Go identifier, a token is a Go string, and comments and white space follow the same rules as for the Go language. Production names starting with an uppercase Unicode letter denote non-terminal productions (i.e., productions which allow white-space and comments between tokens); all other production names denote lexical productions.
Verify checks that:
- all productions used are defined - all productions defined are used when beginning at start - lexical productions refer only to other lexical productions
Position information is interpreted relative to the file set fset.
type Alternative []Expression // x | y | z
An Alternative node represents a non-empty list of alternative expressions.
func (x Alternative) Pos() scanner.Position
A Bad node stands for pieces of source code that lead to a parse error.
type Expression interface {
    // Pos is the position of the first character of the syntactic construct
    Pos() scanner.Position
}An Expression node represents a production expression.
type Grammar map[string]*Production
A Grammar is a set of EBNF productions. The map is indexed by production name.
Parse parses a set of EBNF productions from source src. It returns a set of productions. Errors are reported for incorrect syntax and if a production is declared more than once; the filename is used only for error positions.
type Group struct {
    Lparen scanner.Position
    Body   Expression // (body)
}A Group node represents a grouped expression.
A Name node represents a production name.
type Option struct {
    Lbrack scanner.Position
    Body   Expression // [body]
}An Option node represents an optional expression.
type Production struct {
    Name *Name
    Expr Expression
}A Production node represents an EBNF production.
func (x *Production) Pos() scanner.Position
A List node represents a range of characters.
type Repetition struct {
    Lbrace scanner.Position
    Body   Expression // {body}
}A Repetition node represents a repeated expression.
func (x *Repetition) Pos() scanner.Position
type Sequence []Expression // x y z
A Sequence node represents a non-empty list of sequential expressions.
A Token node represents a literal.
Package ebnf imports 7 packages (graph) and is imported by 8 packages. Updated about 23 hours ago. Refresh now. Tools for package owners.