インタプリタパターンで普通にコードを書くと
最初 ノードXのつもりで解析を始める
A B と順に解析を始める
C の解析に失敗する
Xの解析に失敗したと分かる
Rootの|が発動する
Yの解析が始まる
A B Dと解析が進む

ってなりそうだが なんないの?