/go-parser-combinator

Goの勉強として実装したパーサコンビネータです

Primary LanguageGo

go-parser-combinator

これはGoの勉強として実装したシンプルなパーサコンビネータです。

パーサ

パーサは*string型のtargetint型のindexを受け取り、*Result型とerror型を返す関数です。

targetindexから始まる部分文字列に対してパーサが正常に解析できた場合は、statustrueである*Resultが返却され、errornilとなります。正常に解析ができなかった場合は、statusfalseである*Resultが返却され、errorParseErrorとなります。

パーサは以下のtypeで表されます。

type Parser func(target *string, index int) (*Result, error)

Succeed

必ず成功し、与えたvalueを持ったResultを返すパーサ

func Succeed(value string) Parser

Failed

必ず失敗し、与えたvalueを持ったResultを返すパーサ

func Failed(expected []string) Parser

Str

与えられた文字列にマッチするパーサ

func Str(expected string) Parser

Many

与えられたパーサが複数回マッチするパーサ

func Many(parser Parser) Parser

Alt

与えられたいずれかのパーサがマッチするパーサ

func Alt(parsers ...Parser) Parser

Or

与えられた2つのパーサのうち、どちらかのパーサがマッチするパーサ

func Or(left Parser, right Parser) Parser

Opt

マッチの結果に関わらず成功するパーサ

func Opt(parser Parser) Parser

Seq

与えられた順のパーサが全てマッチするパーサ

func Seq(parsers ...Parser) Parser

Regexp

与えられた正規表現にマッチするパーサ

func Regexp(reg *regexp.Regexp) Parser

Regstr

与えられた正規表現文字列にマッチするパーサ

func Regstr(regstr string) Parser

Map

Resultをmapperによって変更するパーサ

func Map(mapper ResultMapper, parser Parser) Parser

SeqMap

SeqのResultをmapperによって変更するパーサ

func SeqMap(mapper ResultMapper, parsers ...Parser) Parser

SepBy1

セパレータで区切られた部分を少なくとも1回パースするパーサ

func SepBy1(parser Parser, separator Parser) Parser

SepBy

セパレータで区切られた部分をパースするパーサ

func SepBy(parser Parser, separator Parser) Parser

TakeWhile

テスト関数が真の間パースするパーサ

func TakeWhile(test func(char rune, index int) bool) Parser

Thru (メソッド)

パーサを加工するパーサを返す

func (parser Parser) Thru(wrapper ParserMapper) Parser {
	return wrapper(parser)
}

Wrap (メソッド)

leftとrightに囲まれた部分のResultを返すパーサを返す

func (parser Parser) Wrap(left Parser, right Parser) Parser

Then (メソッド)

nextの部分のResultを返すパーサを返す

func (parser Parser) Then(next Parser) Parser

Skip (メソッド)

nextの部分のResultを無視するパーサを返す

func (parser Parser) Skip(next Parser) Parser

Name (メソッド)

Resultに名前を付与するパーサを返す

func (parser Parser) Name(name string) Parser