From e3087bb26c0e6ebf211907ae156e6e9f0b3c1eee Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Thu, 7 Oct 2010 16:37:02 +0000 Subject: [PATCH 2/2] making parser flat git-svn-id: svn://anubis/fart/branches/flat-parser@354 7f9b0f55-74a9-4bce-be96-3c2cd072584d --- parser/parser.yy | 373 +++++++++-------------------------------------- 1 file changed, 69 insertions(+), 304 deletions(-) diff --git a/parser/parser.yy b/parser/parser.yy index 83fbd36..a1f8eec 100644 --- a/parser/parser.yy +++ b/parser/parser.yy @@ -124,115 +124,37 @@ refptr parser_scope; %% -scene: SCENE LCURLY scene_items RCURLY { +scene: SCENE LCURLY general_items RCURLY { $$ = new SceneNode(); $$->addChildren($3); parsed_scene_node = $$; } ; -bool_items: /* empty */ - | 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 { +box: BOX LCURLY general_items RCURLY { $$ = new BoxNode(); $$->addChildren($3); } ; -box_items: /* empty */ - | 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 { +camera: CAMERA LCURLY general_items RCURLY { $$ = new CameraNode(); $$->addChildren($3); } ; -camera_items: /* empty */ - | 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 { +cyl: CYL LCURLY general_items RCURLY { $$ = new CylNode(); $$->addChildren($3); } ; -cyl_items: /* empty */ - | 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 { +extrude: EXTRUDE LCURLY general_items RCURLY { $$ = new ExtrudeNode(); $$->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_item general_items { $$ = new ItemsNode(); @@ -241,98 +163,74 @@ general_items: /* empty */ } ; -general_item: transform_block { $$ = $1; } - | material_definition { $$ = $1; } - | shape_definition { $$ = $1; } - | shape { $$ = $1; } +general_item: AMBIENT vector3 { $$ = new AmbientNode($2); } + | AMBIENT_OCCLUSION expression { + $$ = new AmbientOcclusionNode($2); + } + | camera { $$ = $1; } + | COLOR vector3 { $$ = new ColorNode($2); } + | DIFFUSE vector3 { $$ = new DiffuseNode($2); } + | EXPOSURE expression { $$ = new ExposureNode($2); } | for { $$ = $1; } + | HEIGHT expression { $$ = new HeightNode($2); } | 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; } + | 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(); $$->addChildren($3); } ; -jitter: JITTER expression { - $$ = new JitterNode($2); - } - ; - -light: LIGHT LCURLY light_items RCURLY { +light: LIGHT LCURLY general_items RCURLY { $$ = new LightNode(); $$->addChildren($3); } ; -light_items: /* empty */ - | 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 { +material: MATERIAL LCURLY general_items RCURLY { $$ = new MaterialNode(); $$->addChildren($3); } ; -material_items: /* empty */ - | 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 { +material_definition: DEFINE MATERIAL IDENTIFIER LCURLY general_items RCURLY { $$ = new MaterialDefinitionNode($3->getString()); $$->addChildren($5); } @@ -355,123 +253,29 @@ ngon: NGON expression COMMA expression { offset: OFFSET expression { $$ = new OffsetNode($2); } - | OFFSET expression LCURLY offset_items RCURLY { + | OFFSET expression LCURLY general_items RCURLY { $$ = new OffsetNode($2); $$->addChildren($4); } ; -offset_items: /* empty */ - | 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 { +options: OPTIONS LCURLY general_items RCURLY { $$ = new OptionsNode(); $$->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 */ - | polygon_item polygon_items { - $$ = new ItemsNode(); - $$->addChild($1); - $$->addChildren($2); - } - ; +plane: PLANE LCURLY general_items RCURLY { + $$ = new PlaneNode(); + $$->addChildren($3); + } + ; -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; } - ; +polygon: POLYGON LCURLY general_items RCURLY { + $$ = new PolygonNode(); + $$->addChildren($3); + } + ; shape: plane { $$ = $1; } | sphere { $$ = $1; } @@ -497,60 +301,21 @@ shape_ref: SHAPE IDENTIFIER shape_ref_more { ; shape_ref_more: /* empty */ - | LCURLY shape_ref_items RCURLY { $$ = $2; } + | LCURLY general_items RCURLY { $$ = $2; } ; -shape_ref_items: /* empty */ - | 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 { +sphere: SPHERE LCURLY general_items RCURLY { $$ = new SphereNode(); $$->addChildren($3); } ; -sphere_items: /* empty */ - | sphere_item sphere_items { - $$ = new ItemsNode(); - $$->addChild($1); - $$->addChildren($2); - } - ; - -sphere_item: radius { $$ = $1; } - | shape_item { $$ = $1; } - ; - -subtract: SUBTRACT LCURLY bool_items RCURLY { +subtract: SUBTRACT LCURLY general_items RCURLY { $$ = new SubtractNode(); $$->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 { $$ = new TranslateBlockNode($2); $$->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(); $$->addChildren($3); }