import "ebnf"
EBNF文法のライブラリです。入力テキスト([]byte)は次の文法を満たします。(これ自身がEBNF文法)
Production = name "=" Expression "." .
Expression = Alternative { "|" Alternative } .
Alternative = Term { Term } .
Term = name | token [ "..." token ] | Group | Option | Repetition .
Group = "(" Expression ")" .
Option = "[" Expression "]" .
Repetition = "{" Expression "}" .
nameはGo識別子、tokenはGo文字列、コメントとホワイトスペースはGo言語と同じルールに従います。
パッケージファイル
ebnf.go parser.go
Verify関数
func Verify(grammar Grammar, start string) os.Error
Verifyは、以下をチェックします。
- 使われている全ての名前が定義されているか
- 使用されている全ての名前が使い始めるときに定義されているか
- 生成規則が自分以外の名前だけを参照しているか
Alternative型
Alternativeノードは、空ではない選択式のリストを表します。
type Alternative []Expression // x | y | z
(Alternative) Pos関数
func (x Alternative) Pos() token.Position
Expression型
Expressionノードは、生成規則式を表します。
type Expression interface {
// 構文構成子の先頭文字位置です。
Pos() token.Position
}
Grammar型
Grammarは、EBNF 生成規則のセットです。生成規則名でインデックス化されたマップです。
type Grammar map[string]*Production
Parse関数
func Parse(filename string, src []byte) (Grammar, os.Error)
Parseは、指定されたソースsrcよりEBNF生成規則のセットを解析して結果を返します。誤った構文の場合、または生成規則が重複している場合はエラーを返します。
Group型
Groupノードは、グループ化された式を表します。
type Group struct {
token.Position
Body Expression // (body)
}
Name型
Nameノードは、生成規則名を表します。
type Name struct {
token.Position
String string
}
Option型
Optionノードは、オプション式を表します。
type Option struct {
token.Position
Body Expression // [body]
}
Production型
Productionノードは、EBNF生成規則を表します。
type Production struct {
Name *Name
Expr Expression
}
(*Production) Pos関数
func (p *Production) Pos() token.Position
Range型
Rangeノードは、文字の範囲を表します。
type Range struct {
Begin, End *Token // begin ... end
}
(Range) Pos関数
func (x Range) Pos() token.Position
Repetition型
Repetitionノードは、繰返し式を表します。
type Repetition struct {
token.Position
Body Expression // {body}
}
Sequence型
Sequenceノードは、空ではないシーケンシャル式のリストを表します。
type Sequence []Expression // x y z
(Sequence) Pos関数
func (x Sequence) Pos() token.Position
Token型
Tokenノードは、リテラルを表します。
type Token struct {
token.Position
String string
}
Trackback URL
Comments