merged in branch flat-parser

git-svn-id: svn://anubis/fart/trunk@356 7f9b0f55-74a9-4bce-be96-3c2cd072584d
This commit is contained in:
Josh Holtrop 2010-10-07 16:55:43 +00:00
commit 8aaeb8d0fa

View File

@ -124,115 +124,37 @@ refptr<Scope> parser_scope;
%% %%
scene: SCENE LCURLY scene_items RCURLY { scene: SCENE LCURLY general_items RCURLY {
$$ = new SceneNode(); $$ = new SceneNode();
$$->addChildren($3); $$->addChildren($3);
parsed_scene_node = $$; parsed_scene_node = $$;
} }
; ;
bool_items: /* empty */ box: BOX LCURLY general_items RCURLY {
| bool_item bool_items {
$$ = new ItemsNode();
$$->addChild($1);
$$->addChildren($2);
}
;
bool_item: shape
| shape_item
| shape_definition
| transform_block
;
box: BOX LCURLY box_items RCURLY {
$$ = new BoxNode(); $$ = new BoxNode();
$$->addChildren($3); $$->addChildren($3);
} }
; ;
box_items: /* empty */ camera: CAMERA LCURLY general_items RCURLY {
| box_item box_items {
$$ = new ItemsNode();
$$->addChild($1);
$$->addChildren($2);
}
;
box_item: SIZE vector3 {
$$ = new SizeNode($2);
}
| shape_item { $$ = $1; }
;
camera: CAMERA LCURLY camera_items RCURLY {
$$ = new CameraNode(); $$ = new CameraNode();
$$->addChildren($3); $$->addChildren($3);
} }
; ;
camera_items: /* empty */ cyl: CYL LCURLY general_items RCURLY {
| camera_item camera_items {
$$ = new ItemsNode();
$$->addChild($1);
$$->addChildren($2);
}
;
camera_item: POSITION vector3 {
$$ = new PositionNode($2);
}
| LOOKAT vector3 {
$$ = new LookAtNode($2);
}
| UP vector3 {
$$ = new UpNode($2);
}
| VFOV expression {
$$ = new VFOVNode($2);
}
;
cyl: CYL LCURLY cyl_items RCURLY {
$$ = new CylNode(); $$ = new CylNode();
$$->addChildren($3); $$->addChildren($3);
} }
; ;
cyl_items: /* empty */ extrude: EXTRUDE LCURLY general_items RCURLY {
| cyl_item cyl_items {
$$ = new ItemsNode();
$$->addChild($1);
$$->addChildren($2);
}
;
cyl_item: SIZE vector3 {
$$ = new SizeNode($2);
}
| shape_item { $$ = $1; }
;
extrude: EXTRUDE LCURLY extrude_items RCURLY {
$$ = new ExtrudeNode(); $$ = new ExtrudeNode();
$$->addChildren($3); $$->addChildren($3);
} }
; ;
extrude_items: /* empty */
| extrude_item extrude_items {
$$ = new ItemsNode();
$$->addChild($1);
$$->addChildren($2);
}
;
extrude_item: polygon { $$ = $1; }
| ngon { $$ = $1; }
| offset { $$ = $1; }
| shape_item { $$ = $1; }
;
general_items: /* empty */ general_items: /* empty */
| general_item general_items { | general_item general_items {
$$ = new ItemsNode(); $$ = new ItemsNode();
@ -241,98 +163,74 @@ general_items: /* empty */
} }
; ;
general_item: transform_block { $$ = $1; } general_item: AMBIENT vector3 { $$ = new AmbientNode($2); }
| material_definition { $$ = $1; } | AMBIENT_OCCLUSION expression {
| shape_definition { $$ = $1; } $$ = new AmbientOcclusionNode($2);
| shape { $$ = $1; } }
| camera { $$ = $1; }
| COLOR vector3 { $$ = new ColorNode($2); }
| DIFFUSE vector3 { $$ = new DiffuseNode($2); }
| EXPOSURE expression { $$ = new ExposureNode($2); }
| for { $$ = $1; } | for { $$ = $1; }
| HEIGHT expression { $$ = new HeightNode($2); }
| if { $$ = $1; } | if { $$ = $1; }
| JITTER expression { $$ = new JitterNode($2); }
| light { $$ = $1; }
| LOOKAT vector3 { $$ = new LookAtNode($2); }
| material { $$ = $1; }
| material_definition { $$ = $1; }
| material_ref { $$ = $1; }
| MAXDEPTH expression { $$ = new MaxDepthNode($2); }
| MULTISAMPLE expression { $$ = new MultisampleNode($2); }
| ngon { $$ = $1; }
| offset { $$ = $1; }
| options { $$ = $1; }
| polygon { $$ = $1; }
| POSITION vector3 { $$ = new PositionNode($2); }
| POSITION vector3 COMMA expression {
$$ = new PlanePositionNode($2, $4);
}
| RADIUS expression { $$ = new RadiusNode($2); }
| REFLECTANCE expression { $$ = new ReflectanceNode($2); }
| ROTATE expression COMMA vector3 { $$ = new RotateNode($2, $4); }
| SCALE expression { $$ = new ScaleNode(new ScaleScalarNode($2)); }
| SCALE vector2 { $$ = new ScaleNode($2); }
| SCALE vector3 { $$ = new ScaleNode($2); }
| shape { $$ = $1; }
| shape_definition { $$ = $1; }
| SHININESS expression { $$ = new ShininessNode($2); }
| SIZE vector3 { $$ = new SizeNode($2); }
| SPECULAR vector3 { $$ = new SpecularNode($2); }
| stmt_expression { $$ = $1; } | stmt_expression { $$ = $1; }
| transform_block { $$ = $1; }
| TRANSLATE vector3 { $$ = new TranslateNode($2); }
| TRANSPARENCY expression { $$ = new TransparencyNode($2); }
| UP vector3 { $$ = new UpNode($2); }
| vector2 { $$ = $1; }
| VFOV expression { $$ = new VFOVNode($2); }
| WIDTH expression { $$ = new WidthNode($2); }
; ;
intersect: INTERSECT LCURLY bool_items RCURLY {
intersect: INTERSECT LCURLY general_items RCURLY {
$$ = new IntersectNode(); $$ = new IntersectNode();
$$->addChildren($3); $$->addChildren($3);
} }
; ;
jitter: JITTER expression { light: LIGHT LCURLY general_items RCURLY {
$$ = new JitterNode($2);
}
;
light: LIGHT LCURLY light_items RCURLY {
$$ = new LightNode(); $$ = new LightNode();
$$->addChildren($3); $$->addChildren($3);
} }
; ;
light_items: /* empty */ material: MATERIAL LCURLY general_items RCURLY {
| light_item light_items {
$$ = new ItemsNode();
$$->addChild($1);
$$->addChildren($2);
}
;
light_item: POSITION vector3 {
$$ = new PositionNode($2);
}
| DIFFUSE vector3 {
$$ = new DiffuseNode($2);
}
| SPECULAR vector3 {
$$ = new SpecularNode($2);
}
| COLOR vector3 {
$$ = new ColorNode($2);
}
| radius {
$$ = $1;
}
| jitter {
$$ = $1;
}
;
material: MATERIAL LCURLY material_items RCURLY {
$$ = new MaterialNode(); $$ = new MaterialNode();
$$->addChildren($3); $$->addChildren($3);
} }
; ;
material_items: /* empty */ material_definition: DEFINE MATERIAL IDENTIFIER LCURLY general_items RCURLY {
| material_item material_items {
$$ = new ItemsNode();
$$->addChild($1);
$$->addChildren($2);
}
;
material_item: COLOR vector3 {
$$ = new ColorNode($2);
}
| AMBIENT vector3 {
$$ = new AmbientNode($2);
}
| DIFFUSE vector3 {
$$ = new DiffuseNode($2);
}
| SPECULAR vector3 {
$$ = new SpecularNode($2);
}
| REFLECTANCE expression {
$$ = new ReflectanceNode($2);
}
| SHININESS expression {
$$ = new ShininessNode($2);
}
| TRANSPARENCY expression {
$$ = new TransparencyNode($2);
}
;
material_definition: DEFINE MATERIAL IDENTIFIER LCURLY material_items RCURLY {
$$ = new MaterialDefinitionNode($3->getString()); $$ = new MaterialDefinitionNode($3->getString());
$$->addChildren($5); $$->addChildren($5);
} }
@ -355,124 +253,30 @@ ngon: NGON expression COMMA expression {
offset: OFFSET expression { offset: OFFSET expression {
$$ = new OffsetNode($2); $$ = new OffsetNode($2);
} }
| OFFSET expression LCURLY offset_items RCURLY { | OFFSET expression LCURLY general_items RCURLY {
$$ = new OffsetNode($2); $$ = new OffsetNode($2);
$$->addChildren($4); $$->addChildren($4);
} }
; ;
offset_items: /* empty */ options: OPTIONS LCURLY general_items RCURLY {
| offset_item offset_items {
$$ = new ItemsNode();
$$->addChild($1);
$$->addChildren($2);
}
;
offset_item: SCALE expression {
$$ = new ScaleNode(new ScaleScalarNode($2));
}
| SCALE vector2 {
$$ = new ScaleNode($2);
}
| POSITION vector2 {
$$ = new PositionNode($2);
}
;
options: OPTIONS LCURLY options_items RCURLY {
$$ = new OptionsNode(); $$ = new OptionsNode();
$$->addChildren($3); $$->addChildren($3);
} }
; ;
options_items: /* empty */ plane: PLANE LCURLY general_items RCURLY {
| options_item options_items {
$$ = new ItemsNode();
$$->addChild($1);
$$->addChildren($2);
}
;
options_item: WIDTH expression {
$$ = new WidthNode($2);
}
| HEIGHT expression {
$$ = new HeightNode($2);
}
| MULTISAMPLE expression {
$$ = new MultisampleNode($2);
}
| MAXDEPTH expression {
$$ = new MaxDepthNode($2);
}
| EXPOSURE expression {
$$ = new ExposureNode($2);
}
| AMBIENT vector3 {
$$ = new AmbientNode($2);
}
| AMBIENT_OCCLUSION expression {
$$ = new AmbientOcclusionNode($2);
}
;
plane: PLANE LCURLY plane_items RCURLY {
$$ = new PlaneNode(); $$ = new PlaneNode();
$$->addChildren($3); $$->addChildren($3);
} }
; ;
plane_items: /* empty */ polygon: POLYGON LCURLY general_items RCURLY {
| plane_item plane_items {
$$ = new ItemsNode();
$$->addChild($1);
$$->addChildren($2);
}
;
plane_item: POSITION vector3 COMMA expression {
$$ = new PlanePositionNode($2, $4);
}
| shape_item { $$ = $1; }
;
polygon: POLYGON LCURLY polygon_items RCURLY {
$$ = new PolygonNode(); $$ = new PolygonNode();
$$->addChildren($3); $$->addChildren($3);
} }
; ;
polygon_items: /* empty */
| polygon_item polygon_items {
$$ = new ItemsNode();
$$->addChild($1);
$$->addChildren($2);
}
;
polygon_item: vector2 { $$ = $1; }
;
radius: RADIUS expression {
$$ = new RadiusNode($2);
}
;
scene_items: /* empty */
| scene_item scene_items {
$$ = new ItemsNode();
$$->addChild($1);
$$->addChildren($2);
}
;
scene_item: camera { $$ = $1; }
| light { $$ = $1; }
| options { $$ = $1; }
| general_item { $$ = $1; }
;
shape: plane { $$ = $1; } shape: plane { $$ = $1; }
| sphere { $$ = $1; } | sphere { $$ = $1; }
| box { $$ = $1; } | box { $$ = $1; }
@ -497,60 +301,21 @@ shape_ref: SHAPE IDENTIFIER shape_ref_more {
; ;
shape_ref_more: /* empty */ shape_ref_more: /* empty */
| LCURLY shape_ref_items RCURLY { $$ = $2; } | LCURLY general_items RCURLY { $$ = $2; }
; ;
shape_ref_items: /* empty */ sphere: SPHERE LCURLY general_items RCURLY {
| shape_item shape_ref_items {
$$ = new ItemsNode();
$$->addChild($1);
$$->addChildren($2);
}
;
shape_item: material { $$ = $1; }
| material_ref { $$ = $1; }
| transform { $$ = $1; }
;
sphere: SPHERE LCURLY sphere_items RCURLY {
$$ = new SphereNode(); $$ = new SphereNode();
$$->addChildren($3); $$->addChildren($3);
} }
; ;
sphere_items: /* empty */ subtract: SUBTRACT LCURLY general_items RCURLY {
| sphere_item sphere_items {
$$ = new ItemsNode();
$$->addChild($1);
$$->addChildren($2);
}
;
sphere_item: radius { $$ = $1; }
| shape_item { $$ = $1; }
;
subtract: SUBTRACT LCURLY bool_items RCURLY {
$$ = new SubtractNode(); $$ = new SubtractNode();
$$->addChildren($3); $$->addChildren($3);
} }
; ;
transform: TRANSLATE vector3 {
$$ = new TranslateNode($2);
}
| ROTATE expression COMMA vector3 {
$$ = new RotateNode($2, $4);
}
| SCALE vector3 {
$$ = new ScaleNode($2);
}
| SCALE expression {
$$ = new ScaleNode(new ScaleScalarNode($2));
}
;
transform_block: TRANSLATE vector3 LCURLY general_items RCURLY { transform_block: TRANSLATE vector3 LCURLY general_items RCURLY {
$$ = new TranslateBlockNode($2); $$ = new TranslateBlockNode($2);
$$->addChildren($4); $$->addChildren($4);
@ -569,7 +334,7 @@ transform_block: TRANSLATE vector3 LCURLY general_items RCURLY {
} }
; ;
union: UNION LCURLY bool_items RCURLY { union: UNION LCURLY general_items RCURLY {
$$ = new UnionNode(); $$ = new UnionNode();
$$->addChildren($3); $$->addChildren($3);
} }