⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 swf4compiler.y

📁 Ming is a library for generating Macromedia Flash files (.swf), written in C, and includes useful ut
💻 Y
📖 第 1 页 / 共 2 页
字号:
		{ $$ = $3;		  bufferWriteU8($$, SWFACTION_SETTARGET2); }	| TELLTARGET '(' STRING ')' stmt		{ $$ = newBuffer();			/* SetTarget(STRING) */		  bufferWriteU8($$, SWFACTION_SETTARGET);		  bufferWriteS16($$, strlen($3)+1);		  bufferWriteHardString($$, $3, strlen($3)+1);			/* stmt */		  bufferConcat($$, $5);			/* SetTarget('') */		  bufferWriteU8($$, SWFACTION_SETTARGET);		  bufferWriteS16($$, 1);		  bufferWriteU8($$, 0);		  free($3); }	| TELLTARGET '(' expr ')' stmt		{ $$ = $3;			/* SetTarget(expr) */		  bufferWriteU8($$, SWFACTION_SETTARGET2); 			/* stmt */		  bufferConcat($$, $5);			/* SetTarget('') */		  bufferWriteU8($$, SWFACTION_SETTARGET);		  bufferWriteS16($$, 1);		  bufferWriteU8($$, 0); }	;function_call	: EVAL '(' expr ')'		{ $$ = $3;		  bufferWriteU8($$, SWFACTION_GETVARIABLE); }	| TIME '(' ')'		{ $$ = newBuffer();		  bufferWriteU8($$, SWFACTION_GETTIME); }	| RANDOM '(' expr ')'		{ $$ = $3;		  bufferWriteU8($$, SWFACTION_RANDOMNUMBER); }	| LENGTH '(' expr ')'		{ $$ = $3;		  bufferWriteU8($$, SWFACTION_STRINGLENGTH); }	| INT '(' expr ')'		{ $$ = $3;		  bufferWriteU8($$, SWFACTION_INT); }	| ORD '(' expr ')'		{ $$ = $3;		  bufferWriteU8($$, SWFACTION_ORD); }	| CHR '(' expr ')'		{ $$ = $3;		  bufferWriteU8($$, SWFACTION_CHR); }	| CONCAT '(' expr ',' expr ')'		{ $$ = $3;		  bufferConcat($$, $5);		  bufferWriteU8($$, SWFACTION_STRINGCONCAT); }	| SUBSTR '(' expr ',' expr ',' expr ')'		{ $$ = $3;		  bufferConcat($$, $5);		  bufferConcat($$, $7);		  bufferWriteU8($$, SWFACTION_SUBSTRING); }	| GETPROPERTY '(' expr ',' STRING ')'		{ $$ = newBuffer();		  bufferConcat($$, $3);		  bufferWriteProperty($$, $5);		  bufferWriteU8($$, SWFACTION_GETPROPERTY);		  free($5); }	;pf_expr	: lhs_expr "++" %prec POSTFIX		{ $$ = newBuffer();		  bufferWriteBuffer($$, $1);		  bufferWriteU8($$, SWFACTION_GETVARIABLE);		  bufferWriteBuffer($$, $1);		  bufferConcat($$, $1);		  bufferWriteU8($$, SWFACTION_GETVARIABLE);		  bufferWriteString($$, "1", 2);		  bufferWriteU8($$, SWFACTION_ADD);		  bufferWriteU8($$, SWFACTION_SETVARIABLE); }	| lhs_expr "--" %prec POSTFIX		{ $$ = newBuffer();		  bufferWriteBuffer($$, $1);		  bufferWriteU8($$, SWFACTION_GETVARIABLE);		  bufferWriteBuffer($$, $1);		  bufferConcat($$, $1);		  bufferWriteU8($$, SWFACTION_GETVARIABLE);		  bufferWriteString($$, "1", 2);		  bufferWriteU8($$, SWFACTION_SUBTRACT);		  bufferWriteU8($$, SWFACTION_SETVARIABLE); }	;/* these leave a value on the stack */rhs_expr	: function_call	| '(' rhs_expr ')'		{ $$ = $2; }	| NUMBER		{ $$ = newBuffer();		  bufferWriteString($$, $1, strlen($1)+1);		  free($1); }	| '-' NUMBER %prec NEGATE		{ $$ = newBuffer();		  bufferWriteString($$, "-", 2);		  bufferWriteString($$, $2, strlen($2)+1);		  free($2); }	| STRING		{ $$ = newBuffer();		  bufferWriteString($$, $1, strlen($1)+1);		  free($1); }	| variable		{ $$ = newBuffer();		  bufferWriteString($$, $1, strlen($1)+1);		  bufferWriteU8($$, SWFACTION_GETVARIABLE);		  free($1); }	| sprite		{ $$ = newBuffer();		  bufferWriteString($$, $1, strlen($1)+1);		  free($1); }	| sprite '.' IDENTIFIER		{ $$ = newBuffer();		  bufferWriteString($$, $1, strlen($1)+1);		  bufferWriteProperty($$, $3);		  bufferWriteU8($$, SWFACTION_GETPROPERTY);		  free($3);		  free($1); }	| "++" sprite '.' IDENTIFIER		{ $$ = newBuffer();		  bufferWriteString($$, $2, strlen($2)+1);		  bufferWriteProperty($$, $4);		  bufferWriteString($$, $2, strlen($2)+1);		  bufferWriteProperty($$, $4);		  bufferWriteString($$, $2, strlen($2)+1);		  bufferWriteProperty($$, $4);		  bufferWriteString($$, "1", 2);		  bufferWriteU8($$, SWFACTION_ADD);		  bufferWriteU8($$, SWFACTION_SETPROPERTY);		  bufferWriteU8($$, SWFACTION_GETPROPERTY);		  free($2);		  free($4); }	| "++" lhs_expr		{ $$ = $2;		  bufferWriteU8($$, SWFACTION_PUSHDUP);		  bufferWriteU8($$, SWFACTION_PUSHDUP);		  bufferWriteU8($$, SWFACTION_GETVARIABLE);		  bufferWriteString($$, "1", 2);		  bufferWriteU8($$, SWFACTION_ADD);		  bufferWriteU8($$, SWFACTION_SETVARIABLE);		  bufferWriteU8($$, SWFACTION_GETVARIABLE); }	| "--" sprite '.' IDENTIFIER		{ $$ = newBuffer();		  bufferWriteString($$, $2, strlen($2)+1);		  bufferWriteProperty($$, $4);		  bufferWriteString($$, $2, strlen($2)+1);		  bufferWriteProperty($$, $4);		  bufferWriteString($$, $2, strlen($2)+1);		  bufferWriteProperty($$, $4);		  bufferWriteString($$, "1", 2);		  bufferWriteU8($$, SWFACTION_ADD);		  bufferWriteU8($$, SWFACTION_SETPROPERTY);		  bufferWriteU8($$, SWFACTION_GETPROPERTY);		  free($2);		  free($4); }	| "--" lhs_expr		{ $$ = $2;		  bufferWriteU8($$, SWFACTION_PUSHDUP);		  bufferWriteU8($$, SWFACTION_PUSHDUP);		  bufferWriteU8($$, SWFACTION_GETVARIABLE);		  bufferWriteString($$, "1", 2);		  bufferWriteU8($$, SWFACTION_SUBTRACT);		  bufferWriteU8($$, SWFACTION_SETVARIABLE);		  bufferWriteU8($$, SWFACTION_GETVARIABLE); }	| '-' rhs_expr %prec UMINUS		{ $$ = $2;		  bufferWriteString($2, "-1", 3);		  bufferWriteU8($2, SWFACTION_MULTIPLY); }	| '!' rhs_expr		{ $$ = $2;		  bufferWriteU8($2, SWFACTION_LOGICALNOT); }	| lhs_expr '=' rhs_expr /* assign and leave copy on stack */		{ $$ = $1;		  bufferConcat($$, $3);		  bufferWriteU8($$, SWFACTION_PUSHDUP);		  bufferWriteU8($$, SWFACTION_SETVARIABLE); }	| rhs_expr '*' rhs_expr		{ $$ = $1;		  bufferConcat($$, $3);		  bufferWriteU8($$, SWFACTION_MULTIPLY); }	| rhs_expr '/' rhs_expr		{ $$ = $1;		  bufferConcat($$, $3);		  bufferWriteU8($$, SWFACTION_DIVIDE); }	| rhs_expr '+' rhs_expr		{ $$ = $1;		  bufferConcat($$, $3);		  bufferWriteU8($$, SWFACTION_ADD); }	| rhs_expr '-' rhs_expr		{ $$ = $1;		  bufferConcat($$, $3);		  bufferWriteU8($$, SWFACTION_SUBTRACT); }	| rhs_expr '&' rhs_expr		{ $$ = $1;		  bufferConcat($$, $3);		  bufferWriteU8($$, SWFACTION_STRINGCONCAT); }	| rhs_expr '<' rhs_expr		{ $$ = $1;		  bufferConcat($$, $3);		  bufferWriteU8($$, SWFACTION_LESSTHAN); }	| rhs_expr '>' rhs_expr		{ $$ = $3;		  bufferConcat($$, $1);		  bufferWriteU8($$, SWFACTION_LESSTHAN); }	| rhs_expr "<=" rhs_expr		{ $$ = $3;		  bufferConcat($$, $1);		  bufferWriteU8($$, SWFACTION_LESSTHAN);		  bufferWriteU8($$, SWFACTION_LOGICALNOT); }	| rhs_expr ">=" rhs_expr		{ bufferConcat($1, $3);		  bufferWriteU8($1, SWFACTION_LESSTHAN);		  bufferWriteU8($1, SWFACTION_LOGICALNOT); }	| rhs_expr "!==" rhs_expr		{ bufferConcat($1, $3);		  bufferWriteU8($1, SWFACTION_STRINGEQ);		  bufferWriteU8($1, SWFACTION_LOGICALNOT); }	| rhs_expr "===" rhs_expr		{ bufferConcat($1, $3);		  bufferWriteU8($1, SWFACTION_STRINGEQ); }	| rhs_expr "<=>" rhs_expr		{ bufferConcat($1, $3);		  bufferWriteU8($1, SWFACTION_STRINGCOMPARE); }	| rhs_expr "==" rhs_expr		{ bufferConcat($1, $3);		  bufferWriteU8($1, SWFACTION_EQUAL); }	| rhs_expr "!=" rhs_expr		{ bufferConcat($1, $3);		  bufferWriteU8($1, SWFACTION_EQUAL);		  bufferWriteU8($1, SWFACTION_LOGICALNOT); }	| rhs_expr "&&" rhs_expr		{ bufferConcat($1, $3);		  bufferWriteU8($1, SWFACTION_LOGICALAND); }	| rhs_expr "||" rhs_expr		{ bufferConcat($1, $3);		  bufferWriteU8($1, SWFACTION_LOGICALOR); }	| rhs_expr '?' rhs_expr ':' rhs_expr		{ bufferWriteU8($1, SWFACTION_IF);		  bufferWriteS16($1, 2);		  bufferWriteS16($1, bufferLength($5)+5);		  bufferConcat($1, $5);		  bufferWriteU8($1, SWFACTION_JUMP);		  bufferWriteS16($1, 2);		  bufferWriteS16($1, bufferLength($3));		  bufferConcat($1, $3); }	;variable	: IDENTIFIER	| sprite ':' IDENTIFIER		{ $$ = $1;		  $$ = stringConcat($$, strdup(":"));		  $$ = stringConcat($$, $3); }	;sprite	: THIS		{ $$ = strdup(""); }	| '.'		{ $$ = strdup(""); }	| '/'		{ $$ = strdup("/"); }	| PARENT		{ $$ = strdup(".."); }	| IDENTIFIER		{ $$ = $1; }	| PATH		{ $$ = $1; }	;lhs_expr	: variable		{ $$ = newBuffer();		  bufferWriteString($$, $1, strlen($1)+1);		  free($1); }	| STRING		{ $$ = newBuffer();		  bufferWriteString($$, $1, strlen($1)+1);		  free($1); }	| '(' rhs_expr ')'	{ $$ = $2; }	;assign_stmt	: pf_expr	| ASM '{'		{ asmBuffer = newBuffer(); }	  opcode_list '}'		{ $$ = asmBuffer; }	| void_function_call	| "++" lhs_expr		{ $$ = $2;		  bufferWriteBuffer($$, $2);		  bufferWriteU8($$, SWFACTION_GETVARIABLE);		  bufferWriteString($$, "1", 2);		  bufferWriteU8($$, SWFACTION_ADD);		  bufferWriteU8($$, SWFACTION_SETVARIABLE); }	| "--" lhs_expr                { $$ = $2;		  bufferWriteBuffer($$, $2);		  bufferWriteU8($$, SWFACTION_GETVARIABLE);		  bufferWriteString($$, "1", 2);		  bufferWriteU8($$, SWFACTION_SUBTRACT);		  bufferWriteU8($$, SWFACTION_SETVARIABLE); }	| "++" sprite '.' IDENTIFIER		{ $$ = newBuffer();		  bufferWriteString($$, $2, strlen($2)+1);		  bufferWriteProperty($$, $4);		  bufferWriteU8($$, SWFACTION_GETPROPERTY);		  bufferWriteString($$, "1", 2);		  bufferWriteU8($$, SWFACTION_ADD);		  bufferWriteString($$, $2, strlen($2)+1);		  bufferWriteProperty($$, $4);		  bufferWriteU8($$, SWFACTION_SETPROPERTY);		  free($2);		  free($4); }	| "--" sprite '.' IDENTIFIER		{ $$ = newBuffer();		  bufferWriteString($$, $2, strlen($2)+1);		  bufferWriteProperty($$, $4);		  bufferWriteU8($$, SWFACTION_GETPROPERTY);		  bufferWriteString($$, "1", 2);		  bufferWriteU8($$, SWFACTION_SUBTRACT);		  bufferWriteString($$, $2, strlen($2)+1);		  bufferWriteProperty($$, $4);		  bufferWriteU8($$, SWFACTION_SETPROPERTY);		  free($2);		  free($4); }	| lhs_expr '=' rhs_expr		{ bufferConcat($1, $3);		  bufferWriteU8($1, SWFACTION_SETVARIABLE); }	| lhs_expr "*=" rhs_expr		{ bufferWriteBuffer($1, $1);		  bufferWriteU8($1, SWFACTION_GETVARIABLE);		  bufferConcat($1, $3);		  bufferWriteU8($1, SWFACTION_MULTIPLY);		  bufferWriteU8($1, SWFACTION_SETVARIABLE); }	| lhs_expr "/=" rhs_expr		{ bufferWriteBuffer($1, $1);		  bufferWriteU8($1, SWFACTION_GETVARIABLE);		  bufferConcat($1, $3);		  bufferWriteU8($1, SWFACTION_DIVIDE);		  bufferWriteU8($1, SWFACTION_SETVARIABLE); }	| lhs_expr "+=" rhs_expr		{ bufferWriteBuffer($1, $1);		  bufferWriteU8($1, SWFACTION_GETVARIABLE);		  bufferConcat($1, $3);		  bufferWriteU8($1, SWFACTION_ADD);		  bufferWriteU8($1, SWFACTION_SETVARIABLE); }	| lhs_expr "-=" rhs_expr		{ bufferWriteBuffer($1, $1);		  bufferWriteU8($1, SWFACTION_GETVARIABLE);		  bufferConcat($1, $3);		  bufferWriteU8($1, SWFACTION_SUBTRACT);		  bufferWriteU8($1, SWFACTION_SETVARIABLE); }	| sprite '.' IDENTIFIER '=' rhs_expr                { $$ = newBuffer();		  bufferWriteString($$, $1, strlen($1)+1);		  bufferWriteProperty($$, $3);		  bufferConcat($$,$5);		  bufferWriteU8($$, SWFACTION_SETPROPERTY);		  free($1);		  free($3); }	| sprite '.' IDENTIFIER "*=" rhs_expr		{ $$ = newBuffer();		  bufferWriteString($$, $1, strlen($1)+1);		  bufferWriteProperty($$, $3);		  bufferWriteString($$, $1, strlen($1)+1);		  bufferWriteProperty($$, $3);		  bufferWriteU8($$, SWFACTION_GETPROPERTY);		  bufferConcat($$, $5);		  bufferWriteU8($$, SWFACTION_MULTIPLY);		  bufferWriteU8($$, SWFACTION_SETPROPERTY);		  free($1);		  free($3); }	| sprite '.' IDENTIFIER "/=" rhs_expr		{ $$ = newBuffer();		  bufferWriteString($$, $1, strlen($1)+1);		  bufferWriteProperty($$, $3);		  bufferWriteString($$, $1, strlen($1)+1);		  bufferWriteProperty($$, $3);		  bufferWriteU8($$, SWFACTION_GETPROPERTY);		  bufferConcat($$, $5);		  bufferWriteU8($$, SWFACTION_DIVIDE);		  bufferWriteU8($$, SWFACTION_SETPROPERTY);		  free($1);		  free($3); }	| sprite '.' IDENTIFIER "+=" rhs_expr		{ $$ = newBuffer();		  bufferWriteString($$, $1, strlen($1)+1);		  bufferWriteProperty($$, $3);		  bufferWriteString($$, $1, strlen($1)+1);		  bufferWriteProperty($$, $3);		  bufferWriteU8($$, SWFACTION_GETPROPERTY);		  bufferConcat($$, $5);		  bufferWriteU8($$, SWFACTION_ADD);		  bufferWriteU8($$, SWFACTION_SETPROPERTY);		  free($1);		  free($3); }	| sprite '.' IDENTIFIER "-=" rhs_expr		{ $$ = newBuffer();		  bufferWriteString($$, $1, strlen($1)+1);		  bufferWriteProperty($$, $3);		  bufferWriteString($$, $1, strlen($1)+1);		  bufferWriteProperty($$, $3);		  bufferWriteU8($$, SWFACTION_GETPROPERTY);		  bufferConcat($$, $5);		  bufferWriteU8($$, SWFACTION_SUBTRACT);		  bufferWriteU8($$, SWFACTION_SETPROPERTY);		  free($1);		  free($3); }	;expr	: rhs_expr	;push_item	: STRING		{ $$ = bufferWriteU8(asmBuffer, PUSH_STRING);				  $$ += bufferWriteHardString(asmBuffer, $1, strlen($1) + 1); } push_list	: push_item			{ $$ = $1; }	| push_list ',' push_item	{ $$ = $1 + $3; }opcode_list	: opcode	| opcode_list opcode	{ $$ = $1 + $2; }	;opcode	: ASMPUSH 		{ $$ = bufferWritePushOp(asmBuffer);				  $$ += bufferWriteS16(asmBuffer, 0); }	  push_list		{ $$ = $<len>2 + $3;							  bufferPatchLength(asmBuffer, $3); }	| ASMADD		{ $$ = bufferWriteOp(asmBuffer, SWFACTION_ADD); }	| ASMSUBSTRACT		{ $$ = bufferWriteOp(asmBuffer, SWFACTION_SUBTRACT); }	| ASMMULTIPLY		{ $$ = bufferWriteOp(asmBuffer, SWFACTION_MULTIPLY); }	| ASMDIVIDE		{ $$ = bufferWriteOp(asmBuffer, SWFACTION_DIVIDE); }	| ASMEQUALS		{ $$ = bufferWriteOp(asmBuffer, SWFACTION_EQUAL); }	| ASMLESS		{ $$ = bufferWriteOp(asmBuffer, SWFACTION_LESSTHAN); }	| ASMLOGICALAND		{ $$ = bufferWriteOp(asmBuffer, SWFACTION_LOGICALAND); }	| ASMLOGICALOR		{ $$ = bufferWriteOp(asmBuffer, SWFACTION_LOGICALOR); }	| ASMLOGICALNOT		{ $$ = bufferWriteOp(asmBuffer, SWFACTION_LOGICALNOT); }	| ASMSTRINGAND		{ $$ = bufferWriteOp(asmBuffer, SWFACTION_STRINGCONCAT); }	| ASMSTRINGEQUALS	{ $$ = bufferWriteOp(asmBuffer, SWFACTION_STRINGEQ); }	| ASMSTRINGLENGTH	{ $$ = bufferWriteOp(asmBuffer, SWFACTION_STRINGLENGTH); }	| ASMSTRINGEXTRACT	{ $$ = bufferWriteOp(asmBuffer, SWFACTION_SUBSTRING); }	| ASMMBSTRINGEXTRACT	{ $$ = bufferWriteOp(asmBuffer, SWFACTION_MBSUBSTRING); }	| ASMMBSTRINGLENGTH	{ $$ = bufferWriteOp(asmBuffer, SWFACTION_MBLENGTH); }	| ASMSTRINGLESS		{ $$ = bufferWriteOp(asmBuffer, SWFACTION_STRINGCOMPARE); }	| ASMPOP		{ $$ = bufferWriteOp(asmBuffer, SWFACTION_POP); }	| ASMASCIITOCHAR	{ $$ = bufferWriteOp(asmBuffer, SWFACTION_CHR); }	| ASMCHARTOASCII	{ $$ = bufferWriteOp(asmBuffer, SWFACTION_ORD); }	| ASMTOINTEGER		{ $$ = bufferWriteOp(asmBuffer, SWFACTION_INT); }	| ASMMBASCIITOCHAR	{ $$ = bufferWriteOp(asmBuffer, SWFACTION_MBCHR); }	| ASMMBCHARTOASCII	{ $$ = bufferWriteOp(asmBuffer, SWFACTION_MBORD); }	| ASMCALL		{ $$ = bufferWriteOp(asmBuffer, SWFACTION_CALLFRAME); }	| ASMGETVARIABLE	{ $$ = bufferWriteOp(asmBuffer, SWFACTION_GETVARIABLE); }	| ASMSETVARIABLE	{ $$ = bufferWriteOp(asmBuffer, SWFACTION_SETVARIABLE); }	| ASMGETPROPERTY	{ $$ = bufferWriteOp(asmBuffer, SWFACTION_GETPROPERTY); }	| ASMSETPROPERTY	{ $$ = bufferWriteOp(asmBuffer, SWFACTION_SETPROPERTY); }	| ASMREMOVESPRITE	{ $$ = bufferWriteOp(asmBuffer, SWFACTION_REMOVECLIP); }	| ASMSETTARGET2		{ $$ = bufferWriteOp(asmBuffer, SWFACTION_SETTARGET2); }	| ASMSTARTDRAG		{ $$ = bufferWriteOp(asmBuffer, SWFACTION_STARTDRAG); }	| ASMENDDRAG		{ $$ = bufferWriteOp(asmBuffer, SWFACTION_ENDDRAG); }	| ASMCLONESPRITE	{ $$ = bufferWriteOp(asmBuffer, SWFACTION_DUPLICATECLIP); }	| ASMGETTIME		{ $$ = bufferWriteOp(asmBuffer, SWFACTION_GETTIME); }	| ASMRANDOMNUMBER	{ $$ = bufferWriteOp(asmBuffer, SWFACTION_RANDOMNUMBER); }	| ASMTRACE		{ $$ = bufferWriteOp(asmBuffer, SWFACTION_TRACE); }		| ASMIF	NUMBER		{ $$ = ( 					bufferWriteOp(asmBuffer, SWFACTION_IF)					+ bufferWriteS16(asmBuffer, 2)					+ bufferWriteS16(asmBuffer, atoi($2))); }	| ASMJUMP NUMBER	{ $$ =  ( 					bufferWriteOp(asmBuffer, SWFACTION_JUMP)					+ bufferWriteS16(asmBuffer, 2)					+ bufferWriteS16(asmBuffer, atoi($2))); }	| ASMGETURL2 NUMBER	{ $$ =  (bufferWriteOp(asmBuffer, SWFACTION_GETURL2)					+ bufferWriteS16(asmBuffer, 1) 					+ bufferWriteU8(asmBuffer, atoi($2))); }	| ASMGOTOFRAME2	NUMBER	{ $$ =  (bufferWriteOp(asmBuffer, SWFACTION_GOTOFRAME2) 					+ bufferWriteS16(asmBuffer, 1)					+ bufferWriteU8(asmBuffer, atoi($2))); 					/* SceneBias missing */ }	| ASMWAITFORFRAME2 NUMBER { $$ = (bufferWriteOp(asmBuffer, SWFACTION_WAITFORFRAME2) 					+ bufferWriteS16(asmBuffer, 1)					+ bufferWriteU8(asmBuffer, atoi($2))); }	;%%

⌨️ 快捷键说明

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