PHPでYAML構文解析に挑戦してみた

YAMLの構文を解析するPHPのクラスとそのテストケースを軽い気持ちで書き始めた。テストケースはPHPUnitを使用し、YAML Cookbookのサンプルの構文解析を目標にして作成していった。Mixed Sequencesまでは順調に解析できたものの、eeply Nested Sequencesの派生型の解析でつまづき、問題がロジックの根本的な点にあることが判明したのでそれまでのメソッド内のコードを全て破棄した。なかなか面倒だ。でも、やり甲斐はある。

早く単純な配列の解析を完成させて連想配列の解析に取り掛かりたい。連想配列を解析できればとりあえずは実用になりそうだから。

つまづいたテストは以下。「 - z80」の行が曲者になった。

    function test_unserialize_DeeplyNestedSequences_Derivation2()
    {
        $val = <<<YAML
-
 -
  - uno
  - dos
 - z80
 -
  - win
  - mac
YAML;
        $expected = array(
          array(
            array(
              'uno',
              'dos',
            ),
            'z80',
            array(
              'win',
              'mac',
            ),
          ),
        );
        
        $actual = $this->obj->unserialize($val);
       
        $this->assertEquals($expected, $actual);
    }