trans.Add(変換元パターン,変換先パターン)で変換ルールを登録します。
パターン中、SN(name,children)は「名前がname、子ノードがchildrenであるノード」、SV(value)は「値がvalueであるノード」を表します。DNは「変換先パターン」内で使う事以外はSNと同じです。S1はSN()[1]、D1はDN()[1]の省略形です(以下の説明では省略しないで書きます)。
TreeConverterはまず、与えられたノードが、登録された各「変換元パターン」にマッチするかどうか調べます。例えば
は、FIVrmlParserTest.cpp:100で登録された
SN(vntNodeStatement, SV("USE") >> SN()[1])
にマッチします。
この時、ラベル [n] の付いた部分にマッチしたノード(列)を覚えておきます。ここでは、
[1] ==>
です。次に、上で覚えたノードを、上の手順で再帰的に変換します。この例ではこれ以上変換できないので、そのまま
[1] ==>
となります。
最後に、対応する「変換先パターン」のラベルが付いた部分に、上記のノードを当てはめます。この例の変換先パターンは
DN("Use", DN()[1])
なので、生成されるノードは
となります。