本ライブラリについて
特徴
- PHPで記述されており、パーサの構築にはPHPそのものを記述する
- PEGで定義されている演算子は、PEGクラスメソッドとして実装されている
- PEGで定義されている演算子の他に、実際にパーサを書く際に便利なヘルパーメソッドを用意している
- 文字列だけではなく、配列もパーサに与えることができる
- PEG_IContextを実装することで任意のデータ構造をパーサに与えることができる
実装
- 再帰下降型のパーサである
- 左再帰には対応していないし、対応する予定も無い
- 通常のパーサはメモ化されないので、メモ化する場合はPEG::memo()メソッドを利用する
基本的な使い方
- パーサの構築
- コンテキストの構築
- パーサにコンテキストを与える
パーサの構築
パーサは通常PEGクラスメソッドから生成される。
ユーザは解釈したい文法にあわせて任意のパーサを構築する。
<?php
$parser = PEG::seq('a', 'b');
コンテキストの構築
PEG::contextメソッドを使うことで通常利用するコンテキストは生成される。
コンテキストは、パーサが解釈する対象や、対象の現在の位置の状態等を持つ。
<?php
$context = PEG::context('abc');
パーサにコンテキストを与える
パーサにコンテキストを与えるにはparseメソッドを呼び出す。
この返り値がパーサが返す結果である。パーサは失敗を返す事もある。
<?php $result = $parser->parse($context);