rc1.0_grammar.y

来自「赫赫大名的 OGRE 游戏引擎」· Y 代码 · 共 683 行 · 第 1/2 页

Y
683
字号
Sum : Register equals sumString openParen closeParen semicolon
		{
			OpStruct sumFunction;
			sumFunction.Init(RCP_SUM, $1);
			$$ = sumFunction;
		}
		;
 
BiasScale	: bias_by_negative_one_half_scale_by_two openParen closeParen semicolon
		{
			$$ = $1;
		}
		| bias_by_negative_one_half openParen closeParen semicolon
		{
			$$ = $1;
		}
		| scale_by_one_half openParen closeParen semicolon
		{
			$$ = $1;
		}
		| scale_by_two openParen closeParen semicolon
		{
			$$ = $1;
		}
		| scale_by_four openParen closeParen semicolon
		{
			$$ = $1;
		}
		;

FinalMappedRegister : Register
		{
			MappedRegisterStruct reg;
			reg.Init($1, GL_UNSIGNED_IDENTITY_NV);
			$$ = reg;
		}
		| unsignedString openParen Register closeParen
		{
			MappedRegisterStruct reg;
			reg.Init($3, GL_UNSIGNED_IDENTITY_NV);
			$$ = reg;
		}
		| unsignedInvertString openParen Register closeParen
		{
			MappedRegisterStruct reg;
			reg.Init($3, GL_UNSIGNED_INVERT_NV);
			$$ = reg;
		}
		| color_sum
		{
			MappedRegisterStruct reg;
			reg.Init($1);
			$$ = reg;
		}
		| unsignedString openParen color_sum closeParen
		{
			MappedRegisterStruct reg;
			reg.Init($3, GL_UNSIGNED_IDENTITY_NV);
			$$ = reg;
		}
		| unsignedInvertString openParen color_sum closeParen
		{
			MappedRegisterStruct reg;
			reg.Init($3, GL_UNSIGNED_INVERT_NV);
			$$ = reg;
		}
		| final_product
		{
			MappedRegisterStruct reg;
			reg.Init($1);
			$$ = reg;
		}
		| unsignedString openParen final_product closeParen
		{
			MappedRegisterStruct reg;
			reg.Init($3, GL_UNSIGNED_IDENTITY_NV);
			$$ = reg;
		}
		| unsignedInvertString openParen final_product closeParen
		{
			MappedRegisterStruct reg;
			reg.Init($3, GL_UNSIGNED_INVERT_NV);
			$$ = reg;
		}
		;

FinalCombiner : FinalAlphaFunction FinalRgbFunction
		{
			FinalCombinerStruct finalCombinerStruct;
			finalCombinerStruct.Init($2, $1, false);
			$$ = finalCombinerStruct;
		}
		| ClampColorSum FinalAlphaFunction FinalRgbFunction
		{
			FinalCombinerStruct finalCombinerStruct;
			finalCombinerStruct.Init($3, $2, true);
			$$ = finalCombinerStruct;
		}
		| FinalProduct FinalAlphaFunction FinalRgbFunction
		{
			FinalCombinerStruct finalCombinerStruct;
			finalCombinerStruct.Init($3, $2, false, $1);
			$$ = finalCombinerStruct;
		}
		| ClampColorSum FinalProduct FinalAlphaFunction FinalRgbFunction
		{
			FinalCombinerStruct finalCombinerStruct;
			finalCombinerStruct.Init($4, $3, true, $2);
			$$ = finalCombinerStruct;
		}
		| FinalProduct ClampColorSum FinalAlphaFunction FinalRgbFunction
		{
			FinalCombinerStruct finalCombinerStruct;
			finalCombinerStruct.Init($4, $3, true, $1);
			$$ = finalCombinerStruct;
		}

		| FinalRgbFunction FinalAlphaFunction
		{
			FinalCombinerStruct finalCombinerStruct;
			finalCombinerStruct.Init($1, $2, false);
			$$ = finalCombinerStruct;
		}
		| ClampColorSum FinalRgbFunction FinalAlphaFunction
		{
			FinalCombinerStruct finalCombinerStruct;
			finalCombinerStruct.Init($2, $3, true);
			$$ = finalCombinerStruct;
		}
		| FinalProduct FinalRgbFunction FinalAlphaFunction
		{
			FinalCombinerStruct finalCombinerStruct;
			finalCombinerStruct.Init($2, $3, false, $1);
			$$ = finalCombinerStruct;
		}
		| ClampColorSum FinalProduct FinalRgbFunction FinalAlphaFunction
		{
			FinalCombinerStruct finalCombinerStruct;
			finalCombinerStruct.Init($3, $4, true, $2);
			$$ = finalCombinerStruct;
		}
		| FinalProduct ClampColorSum FinalRgbFunction FinalAlphaFunction
		{
			FinalCombinerStruct finalCombinerStruct;
			finalCombinerStruct.Init($3, $4, true, $1);
			$$ = finalCombinerStruct;
		}

		| FinalRgbFunction
		{
			FinalCombinerStruct finalCombinerStruct;
			FinalAlphaFunctionStruct finalAlphaFunctionStruct;
			finalAlphaFunctionStruct.ZeroOut();
			finalCombinerStruct.Init($1, finalAlphaFunctionStruct, false);
			$$ = finalCombinerStruct;
		}
		| ClampColorSum FinalRgbFunction
		{
			FinalCombinerStruct finalCombinerStruct;
			FinalAlphaFunctionStruct finalAlphaFunctionStruct;
			finalAlphaFunctionStruct.ZeroOut();
			finalCombinerStruct.Init($2, finalAlphaFunctionStruct, true);
			$$ = finalCombinerStruct;
		}
		| FinalProduct FinalRgbFunction
		{
			FinalCombinerStruct finalCombinerStruct;
			FinalAlphaFunctionStruct finalAlphaFunctionStruct;
			finalAlphaFunctionStruct.ZeroOut();
			finalCombinerStruct.Init($2, finalAlphaFunctionStruct, false, $1);
			$$ = finalCombinerStruct;
		}
		| ClampColorSum FinalProduct FinalRgbFunction
		{
			FinalCombinerStruct finalCombinerStruct;
			FinalAlphaFunctionStruct finalAlphaFunctionStruct;
			finalAlphaFunctionStruct.ZeroOut();
			finalCombinerStruct.Init($3, finalAlphaFunctionStruct, true, $2);
			$$ = finalCombinerStruct;
		}
		| FinalProduct ClampColorSum FinalRgbFunction
		{
			FinalCombinerStruct finalCombinerStruct;
			FinalAlphaFunctionStruct finalAlphaFunctionStruct;
			finalAlphaFunctionStruct.ZeroOut();
			finalCombinerStruct.Init($3, finalAlphaFunctionStruct, true, $1);
			$$ = finalCombinerStruct;
		}

		| FinalAlphaFunction
		{
			FinalCombinerStruct finalCombinerStruct;
			FinalRgbFunctionStruct finalRgbFunctionStruct;
			finalRgbFunctionStruct.ZeroOut();
			finalCombinerStruct.Init(finalRgbFunctionStruct, $1, false);
			$$ = finalCombinerStruct;
		}
		| ClampColorSum FinalAlphaFunction
		{
			FinalCombinerStruct finalCombinerStruct;
			FinalRgbFunctionStruct finalRgbFunctionStruct;
			finalRgbFunctionStruct.ZeroOut();
			finalCombinerStruct.Init(finalRgbFunctionStruct, $2, true);
			$$ = finalCombinerStruct;
		}
		| FinalProduct FinalAlphaFunction
		{
			FinalCombinerStruct finalCombinerStruct;
			FinalRgbFunctionStruct finalRgbFunctionStruct;
			finalRgbFunctionStruct.ZeroOut();
			finalCombinerStruct.Init(finalRgbFunctionStruct, $2, false, $1);
			$$ = finalCombinerStruct;
		}
		| ClampColorSum FinalProduct FinalAlphaFunction
		{
			FinalCombinerStruct finalCombinerStruct;
			FinalRgbFunctionStruct finalRgbFunctionStruct;
			finalRgbFunctionStruct.ZeroOut();
			finalCombinerStruct.Init(finalRgbFunctionStruct, $3, true, $2);
			$$ = finalCombinerStruct;
		}
		| FinalProduct ClampColorSum FinalAlphaFunction
		{
			FinalCombinerStruct finalCombinerStruct;
			FinalRgbFunctionStruct finalRgbFunctionStruct;
			finalRgbFunctionStruct.ZeroOut();
			finalCombinerStruct.Init(finalRgbFunctionStruct, $3, true, $1);
			$$ = finalCombinerStruct;
		}
		;

ClampColorSum	: clamp_color_sum openParen closeParen semicolon
		{
			$$ = $1;
		}
		; 

FinalProduct	: final_product equals FinalMappedRegister times FinalMappedRegister semicolon
		{
			FinalProductStruct finalProductStruct;
			finalProductStruct.Init($3, $5);
			$$ = finalProductStruct;
		}
		;

FinalRgbFunction	: fragment_rgb equals lerp openParen FinalMappedRegister comma FinalMappedRegister comma FinalMappedRegister closeParen plus FinalMappedRegister semicolon
		{
			FinalRgbFunctionStruct finalRgbFunctionStruct;
			finalRgbFunctionStruct.Init($5, $7, $9, $12);
			$$ = finalRgbFunctionStruct;
		}
		| fragment_rgb equals FinalMappedRegister plus lerp openParen FinalMappedRegister comma FinalMappedRegister comma FinalMappedRegister closeParen semicolon
		{
			FinalRgbFunctionStruct finalRgbFunctionStruct;
			finalRgbFunctionStruct.Init($7, $9, $11, $3);
			$$ = finalRgbFunctionStruct;
		}
		| fragment_rgb equals lerp openParen FinalMappedRegister comma FinalMappedRegister comma FinalMappedRegister closeParen semicolon
		{
			RegisterEnum zero;
			zero.word = RCP_ZERO;
			MappedRegisterStruct reg;
			reg.Init(zero, GL_UNSIGNED_IDENTITY_NV);
			FinalRgbFunctionStruct finalRgbFunctionStruct;
			finalRgbFunctionStruct.Init($5, $7, $9, reg);
			$$ = finalRgbFunctionStruct;
		}
		| fragment_rgb equals FinalMappedRegister times FinalMappedRegister semicolon
		{
			RegisterEnum zero;
			zero.word = RCP_ZERO;
			MappedRegisterStruct reg1;
			reg1.Init(zero, GL_UNSIGNED_IDENTITY_NV);
			MappedRegisterStruct reg2;
			reg2.Init(zero, GL_UNSIGNED_IDENTITY_NV);
			FinalRgbFunctionStruct finalRgbFunctionStruct;
			finalRgbFunctionStruct.Init($3, $5, reg1, reg2);
			$$ = finalRgbFunctionStruct;
		}
		| fragment_rgb equals FinalMappedRegister times FinalMappedRegister plus FinalMappedRegister semicolon
		{
			RegisterEnum zero;
			zero.word = RCP_ZERO;
			MappedRegisterStruct reg1;
			reg1.Init(zero, GL_UNSIGNED_IDENTITY_NV);
			FinalRgbFunctionStruct finalRgbFunctionStruct;
			finalRgbFunctionStruct.Init($3, $5, reg1, $7);
			$$ = finalRgbFunctionStruct;
		}
		| fragment_rgb equals FinalMappedRegister semicolon
		{
			RegisterEnum zero;
			zero.word = RCP_ZERO;
			MappedRegisterStruct reg1;
			reg1.Init(zero, GL_UNSIGNED_IDENTITY_NV);
			MappedRegisterStruct reg2;
			reg2.Init(zero, GL_UNSIGNED_IDENTITY_NV);
			MappedRegisterStruct reg3;
			reg3.Init(zero, GL_UNSIGNED_IDENTITY_NV);
			FinalRgbFunctionStruct finalRgbFunctionStruct;
			finalRgbFunctionStruct.Init(reg1, reg2, reg3, $3);
			$$ = finalRgbFunctionStruct;
		}
		| fragment_rgb equals FinalMappedRegister plus FinalMappedRegister semicolon
		{
			RegisterEnum zero;
			zero.word = RCP_ZERO;
			MappedRegisterStruct reg2;
			reg2.Init(zero, GL_UNSIGNED_INVERT_NV);
			MappedRegisterStruct reg3;
			reg3.Init(zero, GL_UNSIGNED_IDENTITY_NV);
			FinalRgbFunctionStruct finalRgbFunctionStruct;
			finalRgbFunctionStruct.Init($3, reg2, reg3, $5);
			$$ = finalRgbFunctionStruct;
		}
		;

FinalAlphaFunction	: fragment_alpha equals FinalMappedRegister semicolon
		{
			FinalAlphaFunctionStruct finalAlphaFunctionStruct;
			finalAlphaFunctionStruct.Init($3);
			$$ = finalAlphaFunctionStruct;
		}
		;

Register : constVariable
		{
			$$ = $1;
		}
		| regVariable
		{
			$$ = $1;
		}
		;

%%
void yyerror(char* s)
{
     errors.set("unrecognized token");
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?