簡単にパーサーの作成と利用ができるツールです。それなりに有用なはず。 使用例: https://scratch.mit.edu/projects/1362989150/ 以下リファレンス もし使うのであれば、先に使用例を見たほうが飲み込みやすいと思います。 ・変数 PEG.パース.成功? パースが成功した場合trueが、そうでない場合falseが格納されます。定義「PEG.パース」を呼び出した後に使用できます。 ・変数 PEG.パース.返り値 パース結果のASTが格納されます。定義「PEG.パース」を呼び出した後に使用できます。変数「PEG.パース.成功?」にfalseが格納されている場合は無意味な値が格納されます。 ・変数 PEG.AST.成功? ASTに関する定義の呼び出しに成功した場合trueが、そうでない場合falseが格納されます。「PEG.AST」から始まる定義を呼び出した後に使用できます。 ・変数 PEG.AST.返り値 ASTに関する定義の結果が格納されます。「PEG.AST」から始まる定義を呼び出した後に使用できます。変数「PEG.AST.成功?」にfalseが格納されている場合は無意味な値が格納されます。 ・変数 PEG.エラーメッセージ 致命的なエラーが発生した場合エラーメッセージが格納されます。またこの変数にエラーメッセージが格納される時、すべてのプログラムを停止させます。 ・リスト PEG.パース.トークン種類列 定義「PEG.パース」の引数として用いられます。詳しくは定義「PEG.パース」の項を参照してください。 ・定義 PEG.クリア パーサーの情報をすべて削除します。共有前に無駄なデータを削除するために用いることなどを想定しています。 ・定義 PEG.初期化 パーサーの初期化をします。ほかの定義ブロックや変数を用いる前に必ずこれを一回呼び出してください。 ・定義 PEG.文法を定義 (文法名) (定義) 文法を定義します。引数「定義」の文法定義は以下の文法に沿って書いてください。 要素:トークン、または文法名を表します。「"abc"」「'def'」「<ghi>」「jkl」のように書きます。この名前の文法が定義されている場合はその定義のパースを試みます。そうでない場合トークンのパースを試みます。 連接:要素が順に並んでいることを表します。「a b c」のように書きます。 「/」「|」:選択を表します。「a b / c d e / f」「a b | c d e | f」のように書きます。このように書くとまず「a b」のパースを試み、失敗した場合「c d e」のパースを、さらに失敗した場合「f」のパースを試みます。 「:」:連接要素のラベルを表します。「a: b c」のように書きます。このように書くと定義「PEG.AST.連接.ラベルを得る」で「a」が得られます。「#」と併用できません。 「->」:その要素をキャプチャすることを表します。「a b->c d」のように書きます。このように書くと「a b d」としてパースされ、成功した場合定義「PEG.AST.連接.要素を得る」で「b」のASTがキャプチャ名「c」で得られるようになります。「#」と併用できません。 「#」:ASTを新たに作成せずその要素のASTのみを得ることを表します。「a #b c」のように書きます。「:」「->」と併用できません。 「&」「!」:先読みを表します。「&」は肯定先読み、「!」は否定先読みを表します。「a &b」のように書きます。このように書くと「a」の後に「b」が来ることを確認します。 「?」「*」「+」:繰り返しを表します。「?」は0か1回、「*」は0回以上、「+」は1回以上を表します。「a*」のように書きます。 「()」:グループを表します。「(a b)+」のように書きます。 ・定義 PEG.パース (ルート) リスト「PEG.パース.トークン種類列」のトークン列をパースします。引数「ルート」は最初にパースされる文法の名前です。実行すると以前のパース結果は利用できなくなります。 ・定義 PEG.AST.種類を得る (AST) 引数「AST」の種類を得ます。成功した場合の返り値は「連接」「先読み」「繰り返し」「トークン」のいずれかです。引数「AST」がASTではない場合、失敗します。 ・定義 PEG.AST.連接.ラベルを得る (AST) 引数「AST」のラベルを得ます。成功した場合の返り値はそのASTのラベルです。引数「AST」が連接のASTではない場合、失敗します。 ・定義 PEG.AST.連接.要素を得る (AST) (キャプチャ名) 引数「キャプチャ名」でキャプチャされた引数「AST」の要素を得ます。引数「AST」が連接のASTではない場合、またはASTにそのキャプチャが存在しない場合、失敗します。 ・定義 PEG.AST.繰り返し.要素数を得る (AST) 引数「AST」の要素数を得ます。引数「AST」が繰り返しのASTではない場合、失敗します。 ・定義 PEG.AST.繰り返し.要素を得る (AST) (インデックス) 引数「AST」のインデックス番目の要素を得ます。 インデックスは0始まりです。引数「AST」が繰り返しのASTではない場合、またはインデックスが範囲外の場合、失敗します。 ・定義 PEG.AST.トークン.トークン位置を得る (AST) 引数「AST」のトークンの位置を得ます。インデックスは1始まりです。引数「AST」がトークンのASTではない場合、失敗します。