📄 pov.y
字号:
| expr '+' expr {$$=new vector; *$$=*$1+*$3; delete $1; delete $3;} | expr '-' expr {$$=new vector; *$$=*$1-*$3; delete $1; delete $3;} | expr '*' expr {$$=new vector; *$$=*$1*(*$3); delete $1; delete $3;} | expr '/' expr {$$=new vector; *$$=*$1/(*$3); delete $1; delete $3;} | '-' expr %prec UMINUS {$$=new vector; *$$=-*$2; delete $2;} | '(' expr ')' {$$=$2;} ;/** CAMERA DEFINITION*/camera : CAMERA '{' cameraitems '}' {$$=$3;} ;cameraitems : /* empty */ {$$=new camera;} | cameraitems identifier {$$=$1; *$$=actcamera /* *camdecls[$2] */ ; delete $2;} | cameraitems LOCATION expr {$$=$1; $$->setl(*$3); delete $3;} | cameraitems SKY expr {$$=$1; $$->sets(*$3); delete $3;} | cameraitems DIRECTION expr {$$=$1; $$->setd(*$3); delete $3;} | cameraitems UP expr {$$=$1; $$->setu(*$3); delete $3;} | cameraitems RIGHT expr {$$=$1; $$->setr(*$3); delete $3;} | cameraitems LOOK_AT expr {$$=$1; $$->seta(*$3); delete $3;} | cameraitems TRANSLATE expr {$$=$1; $$->traT(*$3); delete $3;} | cameraitems ROTATE expr {$$=$1; $$->rotT(*$3); delete $3;} | cameraitems SCALE expr {$$=$1; $$->scaT(*$3); delete $3;} ;/** LIGHTSOURCE*/lightsource : LIGHT_SOURCE '{' expr color lightsrcitems '}' {$$=$5; $$->setp(*$3); $$->setc(*$4); delete $3; delete $4;} ;lightsrcitems : /* empty */ {$$=new lightsource;} | lightsrcitems lightsrctype {$$=$2; *$$=*$1; delete $1;} | lightsrcitems TRANSLATE expr {$$=$1; $$->traT(*$3); delete $3;} | lightsrcitems ROTATE expr {$$=$1; $$->rotT(*$3); delete $3;} | lightsrcitems SCALE expr {$$=$1; $$->scaT(*$3); delete $3;} ;lightsrctype : spotlight {$$=$1;} ;spotlight : SPOTLIGHT POINT_AT expr RADIUS expr FALLOFF expr tightness {$$=new spotlight(*$3,(double)*$5,(double)*$7, (double)*$8); delete $3; delete $5; delete $7; delete $8;} ;tightness : /* empty */ {$$=new vector(10.,10.,10.);} | TIGHTNESS expr {$$=$2;} ;/** OBJECT GEOMETRY*/object : OBJECT '{' identifier objopts '}' {$$=odecls[$3]->copy(); *$$=*$4; delete $3; delete $4;} | SPHERE '{' expr ',' expr objopts '}' {$$=new sphere(*$3,(double)*$5); *$$=*$6; delete $3; delete $5; delete $6;} | UNION '{' objects objopts '}' {$$=new csguni($3); *$$=*$4; delete $4;} | MERGE '{' objects objopts '}' {$$=new csgmer($3); *$$=*$4; delete $4;} | INTERSECTION '{' objects objopts '}' {$$=new csgint($3); *$$=*$4; delete $4;} | DIFFERENCE '{' objects objopts '}' {$$=new csgdif($3); *$$=*$4; delete $4;} ;objects : object object moreobjects {$$=$3; *$$+=$2; *$$+=$1;} ; moreobjects : /* empty */ {$$=new list<object*>;} | moreobjects object {$$=$1; *$$+=$2;} ;/** OBJECT OPTIONS*/objopts : /* empty */ {$$=new object; $$->sett(*deftexture);} | objopts texture {$$=$1; $$->sett(*$2); delete $2;} | objopts pigment {$$=$1; $$->setp(*$2); delete $2;} | objopts normal {$$=$1; $$->setn(*$2); delete $2;} | objopts finish {$$=$1; $$->setf(*$2); delete $2;} | objopts TRANSLATE expr {$$=$1; $$->traT(*$3); delete $3;} | objopts ROTATE expr {$$=$1; $$->rotT(*$3); delete $3;} | objopts SCALE expr {$$=$1; $$->scaT(*$3); delete $3;} ;/** TEXTURES*/texture : TEXTURE '{' textureitems '}' {$$=$3;} | texture TEXTURE '{' textureitems '}' {$$=$1; *$$+=$4;} ;textureitems : /* empty */ {$$=new texture; *$$=*deftexture;} | textureitems identifier {delete $1; $$=tdecls[$2]->copy(); delete $2;} | textureitems PIGMENT '{' pigmentitems '}' {$$=$1; $$->setp(*$4); delete $4;} | textureitems NORMAL '{' normalitems '}' {$$=$1; $$->setn(*$4); delete $4;} | textureitems FINISH '{' finishitems '}' {$$=$1; $$->setf(*$4); delete $4;} | textureitems TRANSLATE expr {$$=$1; $$->traT(*$3); delete $3;} | textureitems ROTATE expr {$$=$1; $$->rotT(*$3); delete $3;} | textureitems SCALE expr {$$=$1; $$->scaT(*$3); delete $3;} ;/** PIGMENT*/pigment : PIGMENT '{' pigmentitems '}' {$$=$3;} ;pigmentitems : /* empty */ {$$=deftexture->copyp();} | pigmentitems identifier {delete $1; $$=pdecls[$2]->copy(); delete $2;} | pigmentitems pigmentpatt {$$=$2; *$$|=*$1; delete $1;} | pigmentitems TURBULENCE expr {$$=$1; $$->sett(*$3); delete $3;} | pigmentitems OCTAVES expr {$$=$1;$$->seto((int)((double)*$3));delete $3;} | pigmentitems OMEGA expr {$$=$1; $$->setm((double)*$3); delete $3;} | pigmentitems LAMBDA expr {$$=$1; $$->setl((double)*$3); delete $3;} | pigmentitems FREQUENCY expr {$$=$1; $$->setf((double)*$3); delete $3;} | pigmentitems PHASE expr {$$=$1; $$->setp((double)*$3); delete $3;} | pigmentitems TRANSLATE expr {$$=$1; $$->traT(*$3); delete $3;} | pigmentitems ROTATE expr {$$=$1; $$->rotT(*$3); delete $3;} | pigmentitems SCALE expr {$$=$1; $$->scaT(*$3); delete $3;} ;pigmentpatt : color {$$=new solid(*$1); delete $1;} | CHECKER {$$=new checker;} | CHECKER color {$$=new checker(*$2); delete $2;} | CHECKER color color {$$=new checker(*$2,*$3);delete $2;delete $3;} ;color : COLOR identifier {$$=new color; *$$=*cdecls[$2]; delete $2;} | COLOR RGB '<' expr ',' expr ',' expr '>' {$$=new color((double)*$4,(double)*$6, (double)*$8); delete $4; delete $6; delete $8;} | COLOR RGBF '<' expr ',' expr ',' expr ',' expr '>' {$$=new color((double)*$4,(double)*$6, (double)*$8,(double)*$10); delete $4; delete $6; delete $8; delete $10;} | COLOR colorvalues {$$=$2;} ;colorvalues : RED expr {$$=new color;$$->setr((double)*$2);delete $2;} | GREEN expr {$$=new color;$$->setg((double)*$2);delete $2;} | BLUE expr {$$=new color;$$->setb((double)*$2);delete $2;} | FILTER expr {$$=new color;$$->setf((double)*$2);delete $2;} | colorvalues RED expr {$$=$1; $$->setr((double)*$3); delete $3;} | colorvalues GREEN expr {$$=$1; $$->setg((double)*$3); delete $3;} | colorvalues BLUE expr {$$=$1; $$->setb((double)*$3); delete $3;} | colorvalues FILTER expr {$$=$1; $$->setf((double)*$3); delete $3;} ;colormap : COLOR_MAP '{' identifier colormapitems '}' {$$=cmdecls[$3]->copy(); delete $3; delete $4;} | COLOR_MAP '{' colormapitems '}' {$$=$3;} ;colormapitems : /* empty */ {$$=new colormap;} ;/** NORMAL*/normal : NORMAL '{' normalitems '}' {$$=$3;} ;normalitems : /* empty */ {$$=deftexture->copyn();} | normalitems identifier {delete $1; $$=ndecls[$2]->copy(); delete $2;} | normalitems normalpatt {$$=$2; *$$|=*$1; delete $1;} | normalitems TURBULENCE expr {$$=$1; $$->sett(*$3); delete $3;} | normalitems FREQUENCY expr {$$=$1; $$->setf((double)*$3); delete $3;} | normalitems PHASE expr {$$=$1; $$->setp((double)*$3); delete $3;} | normalitems TRANSLATE expr {$$=$1; $$->traT(*$3); delete $3;} | normalitems ROTATE expr {$$=$1; $$->rotT(*$3); delete $3;} | normalitems SCALE expr {$$=$1; $$->scaT(*$3); delete $3;} ;normalpatt : BUMPS expr {$$=new bumps((double)*$2); delete $2;} | DENTS expr {$$=new dents((double)*$2); delete $2;} ;/** FINISH*/finish : FINISH '{' finishitems '}' {$$=$3;} ;finishitems : /* empty */ {$$=deftexture->copyf();} | finishitems identifier {delete $1; $$=fdecls[$2]->copy(); delete $2;} | finishitems DIFFUSE expr {$$=$1; $$->setkd((double)*$3); delete $3;} | finishitems BRILLIANCE expr {$$=$1; $$->setkb((double)*$3); delete $3;} | finishitems CRAND expr {$$=$1; $$->setkc((double)*$3); delete $3;} | finishitems AMBIENT expr {$$=$1; $$->setka((double)*$3); delete $3;} | finishitems REFLECTION expr {$$=$1; $$->setkr((double)*$3); delete $3;} | finishitems PHONG expr {$$=$1; $$->setks((double)*$3); delete $3;} | finishitems PHONG_SIZE expr {$$=$1; $$->setkp((double)*$3); delete $3;} | finishitems SPECULAR expr {$$=$1; $$->setkh((double)*$3); delete $3;} | finishitems ROUGHNESS expr {$$=$1; $$->setkg((double)*$3); delete $3;} | finishitems METALLIC {$$=$1; $$->setkm(1);} | finishitems REFRACTION expr {$$=$1; $$->setkt((double)*$3); delete $3;} | finishitems IOR expr {$$=$1; $$->setki((double)*$3); delete $3;} ;%%void yyerror(char* s) {cout<<s<<"\n";}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -