Boost Spirit の Qi を使用して VRML 1.0 を解析しています。Separator というグループノードがあり、Separator の直下にはさまざまな種類のノードを保持できます。AST は Boost.Variant に基づいており、これまでのところ長く見えます。バリアントの 20 種類の制限に近づいています。バリアントが持つ型の数を拡張できることはわかっていますが、これを設計するためのより良い方法があるはずです。アイデア歓迎。
typedef boost::variant<
Nil,
Coordinate3,
Info,
Material,
MaterialBinding,
Normal,
NormalBinding,
Texture2,
Texture2Transform,
TextureCoordinate2,
ShapeHints,
MatrixTransform,
Rotation,
Scale,
Transform,
Translation,
boost::recursive_wrapper<Separator>
> VRML1Node;