質問: [ \t\n\r]* ``` ### 補足情報(言語/FW/ツール等のバージョンなど) このアプリケーションはWindowsのアプリとしてあるのですがそれをHTML版に作り替えることになっています。
回答: どうやら「PEG」という考え方のJavaScript実装のようですね。 なんとなくですが、XSLTに似ているな、と感じました。 理解したとは言えませんが、私なりにドキュメントを読んでみて分かる範囲でお答えします。 ###### 1. 一番下に「_」をスペースとして定義している箇所があります。スペースは「 \t\n\r」の繰り返しからなっている。ということは分かるのですが、「"whitespace" 」は何のための記述かわかりません。 > > A rule can also contain *human-readable* name that is used in error messages (in our example, only the `integer` rule has a human-readable name). > > > とありました。 与えられた文字列のパースエラーが発生したときのエラーメッセージに名前付けする為のもののようです。 要するにラベルですね。 ###### 2. Integerの定義に「text()」という関数が呼ばれていますが何ものでしょうか。 > > The code inside the action can also access the text matched by the expression using the `text` function. > > > という記述があります。 正規表現における`$0`のようなものだと理解しました。 ###### 3. Termの定義に関してはお手上げ状態です。tailという変数が突然出てきますし添え字の意味も不明です。 サンプルコードを読んでいる限り、構文は ``` [規則名] = [パラメータ名]:[規則型/マッチング文字列] { [JavaScript式] } ``` となっているように感じました。 パラメータが複数あるときは半角スペース区切りっぽいですね。 というわけで別に「tailという変数が突然出て」くるわけではなく、ちゃんと宣言されています。 添字は`tail`のマッチング文字列を半角スペース区切りで取っているだけだと思います。 ###### 4. このサンプルでは四則演算ができ、「2 * (3 + 4)」と与えれば3 + 4を先に評価していますがどこの定義で優先での指定をしているのでしょう。 もうこれはPEGの仕様をがっつり読んだほうがいいですよ、としか言えないですね。 `Factor`の定義で「パーレンに囲まれた式がなければ`Integer`のマッチングに移行する」とされており、これが優先順位として結果に出ているのだと思います。