merged in branch flat-parser
git-svn-id: svn://anubis/fart/trunk@356 7f9b0f55-74a9-4bce-be96-3c2cd072584d
This commit is contained in:
commit
8aaeb8d0fa
373
parser/parser.yy
373
parser/parser.yy
@ -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,123 +253,29 @@ 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 */
|
|
||||||
| 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();
|
|
||||||
$$->addChildren($3);
|
|
||||||
}
|
|
||||||
;
|
|
||||||
|
|
||||||
plane_items: /* empty */
|
|
||||||
| 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();
|
|
||||||
$$->addChildren($3);
|
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
polygon_items: /* empty */
|
plane: PLANE LCURLY general_items RCURLY {
|
||||||
| polygon_item polygon_items {
|
$$ = new PlaneNode();
|
||||||
$$ = new ItemsNode();
|
$$->addChildren($3);
|
||||||
$$->addChild($1);
|
}
|
||||||
$$->addChildren($2);
|
;
|
||||||
}
|
|
||||||
;
|
|
||||||
|
|
||||||
polygon_item: vector2 { $$ = $1; }
|
polygon: POLYGON LCURLY general_items RCURLY {
|
||||||
;
|
$$ = new PolygonNode();
|
||||||
|
$$->addChildren($3);
|
||||||
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; }
|
||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user