import "ebnf"
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言語の同一ルールに従います。生成規則名は非終端記号を意味するUnicode文字(大文字)で始まっています(トークンの間にコメントとホワイトスペースは可)。
パッケージファイル
ebnf.go parser.go
Verify関数
func Verify(grammar Grammar, start string) os.Error
Verifyは以下をチェックします。
・使われている全ての生成規則が定義されているか
・定義されている全ての生成規則が指定されたstartで開始されているか
・生成規則が他の生成規則にて参照されているか
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生成規則のセットです。mapは生成規則名よりインデックス化されたマップです。
type Grammar map[string]*Production
Parse関数
func Parse(filename string, src []byte) (Grammar, os.Error)
Parseは指定されたソースより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
Leave a comment
Comments