bread-n-butter
Deno/typescriptで動く
parser combinator
https://github.com/wavebeem/bread-n-butter
パーサコンビネータ
API Reference
/kuuote/bread-n-butter
Node.js
向けに書かれているが、単一ファイルで構成されているので
Deno
でそのまま使える
https://github.com/wavebeem/bread-n-butter/blob/v0.6.0/src/bread-n-butter.ts
https://raw.githubusercontent.com/wavebeem/bread-n-butter/v0.6.0/src/bread-n-butter.ts
/mrsekut-p/bread-n-butter
Parser<A>.thru()
parser.thru(fn)
は
fn(parser)
と等価
choice()
Parser<A>.or()
を
Array.prototype.reduce()
で繰り返し適用しているだけ
Parser<A>.repeat()
min
:初期値
0
max
:初期値
Infinity
削除系
Parser<A>.trim()
parser.trim(parser)
は
parser.wrap(parser,parser)
と等価
https://github.com/wavebeem/bread-n-butter/blob/v0.6.0/src/bread-n-butter.ts#L155
Parser<A>.wrap()
parser.wrap(lParser,rParser)
は
lParser.next(parser).skip(rParser)
と等価
https://github.com/wavebeem/bread-n-butter/blob/v0.6.0/src/bread-n-butter.ts#L147
Parser<A>.next()
Parser<A>.skip()
Parser<A>.chain()
parserA.chain(()=>parserB)
は、
parserA
を使った後
parserB
を実行するが、
parserB
のみ返却する
両方返却するときは
parserA.chain(()=>[parserA, parserB])
か
all(parserA,parserB)
を使う
parserA
で取り出した情報を後続のparserに渡したいときに使う
例
all()
内部で
parserA.chain(()=>[parserA, parserB])
を
Array.prototype.reduce()
で繰り返し適用している
#2024-08-20
12:54:57
#2024-03-27
17:05:02
#2023-12-19
10:05:05