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

📄 swf5compiler.flex

📁 flash swf file player
💻 FLEX
字号:
%{#include <math.h>#include <string.h>#include <stdlib.h>#include "compile.h"#include "action.h"#include "blocks/error.h"#include "swf5compiler.tab.h" /* defines token types */static int swf5debug;static const char *lexBuffer = NULL;static int lexBufferLen = 0;static int  sLineNumber = 0;static char szLine[1024];static char msgbufs[2][1024] = { {0}, {0} }, *msgline = {0};static int  column = 0;static void comment();static void comment1();static void count();static void countline();static void warning(char *msg);#define YY_INPUT(buf,result,max_size) result=lexBufferInput(buf, max_size)/* thanks to the prolific and brilliant Raff: */static int lexBufferInput(char *buf, int max_size){  int l = lexBufferLen > max_size ? max_size : lexBufferLen;  if (lexBufferLen <= 0)    return YY_NULL;  memcpy(buf, lexBuffer, l);  lexBuffer += l;  lexBufferLen -= l;  return l;}        /* very inefficient method of unescaping strings */static void unescape(char *buf){  char *p, *p1;  for (p1=buf; (p=strchr(p1, '\\')) != 0; p1 = p+1) {    switch(p[1])    {    case 'b' : p[1] = '\b'; break;    case 'f' : p[1] = '\f'; break;    case 'n' : p[1] = '\n'; break;    case 'r' : p[1] = '\r'; break;    case 't' : p[1] = '\t'; break;    case 'x' :    case 'u' : warning("unsupported escape sequence");    }    strcpy(p, p+1);  }}void swf5ParseInit(const char *script, int debug){  checkByteOrder();  yyrestart(NULL);  swf5debug = debug;  lexBuffer = script;  lexBufferLen = strlen(script);  sLineNumber = 0;  column = 0;  msgline = msgbufs[0];}%}%s asm%{ // forward declaration needed by the following function#ifndef YY_PROTO#ifdef YY_USE_PROTOS#define YY_PROTO(proto) proto#else#define YY_PROTO(proto) ()#endif#endif static void yyunput YY_PROTO(( int c, char *buf_ptr )); void do_unput5(const char c) { unput(c); }%}DIGIT    [0-9]ID       [a-zA-Z_][a-zA-Z0-9_]*%%0x[0-9a-fA-F]+	{ count();	swf5lval.intVal = strtoul(yytext, NULL, 0);					return INTEGER;		}0[0-7]+			{ count();	swf5lval.intVal = strtoul(yytext, NULL, 0);					return INTEGER;		}{DIGIT}+		{ count();	swf5lval.intVal = atoi(yytext);					return INTEGER;		}{DIGIT}+"."{DIGIT}*	{ count();	swf5lval.doubleVal = atof(yytext);					return DOUBLE; 		}true			{ count();	swf5lval.intVal = 1;					return BOOLEAN;		}false			{ count();	swf5lval.intVal = 0;					return BOOLEAN;		}null			{ count();	return NULLVAL;		}break			{ count();	return BREAK;		}continue		{ count();	return CONTINUE;	}function		{ count();	return FUNCTION;	}else			{ count();	return ELSE;		}switch			{ count();	return SWITCH;		}case			{ count();	return CASE;		}default			{ count();	return DEFAULT;		}for			{ count();	return FOR;		}in			{ count();	return IN;		}if			{ count();	return IF;		}while			{ count();	return WHILE;		}do			{ count();	return DO;		}var			{ count();	return VAR;		}new			{ count();	return NEW;		}delete			{ count();	return DELETE;		}return			{ count();	return RETURN;		}with			{ count();	return WITH;		}asm			{ count();	BEGIN(asm); return ASM;		}eval			{ count();	return EVAL;		}typeof			{ count();	return TYPEOF; }instanceof			{ count();	return INSTANCEOF; }  /* legacy functions */random			{ count();	return RANDOM;	}getTimer		{ count();	return GETTIMER;	}length			{ count();	return LENGTH;	}concat			{ count();	return CONCAT;	}substr			{ count();	return SUBSTR;	}trace			{ count();	return TRACE;	}int			{ count();	return INT;	}ord			{ count();	return ORD;	}chr			{ count();	return CHR;	}getURL			{ count();	return GETURL;	}getURL1			{ count();	return GETURL1;	}nextFrame		{ count();	return NEXTFRAME;	}prevFrame		{ count();	return PREVFRAME;	}play			{ count();	return PLAY;		}stop			{ count();	return STOP;		}toggleQuality		{ count();	return TOGGLEQUALITY;	}stopSounds		{ count();	return STOPSOUNDS;	}callFrame		{ count();	return CALLFRAME;	}gotoFrame		{ count();	return GOTOFRAME;	}setTarget		{ count();	return SETTARGET;	}loadVariables		{ count();	return LOADVARIABLES;	}loadMovie		{ count();	return LOADMOVIE;	}loadVariablesNum	{ count();	return LOADVARIABLESNUM;	}loadMovieNum		{ count();	return LOADMOVIENUM;	}duplicateMovieClip	{ count();	return DUPLICATEMOVIECLIP; }removeMovieClip		{ count();	return REMOVEMOVIECLIP; }  /* assembler ops */<asm>{dup			{ count();	return DUP; }swap			{ count();	return SWAP; }pop			{ count();	return POP; }push			{ count();	return PUSH; }setregister		{ count();	return SETREGISTER; }callfunction		{ count();	return CALLFUNCTION; }callmethod		{ count();	return CALLMETHOD; }and			{ count();	return AND; }or			{ count();	return OR; }xor			{ count();	return XOR; }modulo			{ count();	return MODULO; }add			{ count();	return ADD; }newadd			{ count();	return ADD; }lessthan		{ count();	return LESSTHAN; }newlessthan		{ count();	return LESSTHAN; }equals			{ count();	return EQUALS; }newequals		{ count();	return EQUALS; }inc			{ count();	return INC; }dec			{ count();	return DEC; }enumerate		{ count();	return ENUMERATE; }initobject		{ count();	return INITOBJECT; }initarray		{ count();	return INITARRAY; }getmember		{ count();	return GETMEMBER; }setmember		{ count();	return SETMEMBER; }shiftleft		{ count();	return SHIFTLEFT; }shiftright		{ count();	return SHIFTRIGHT; }shiftright2		{ count();	return SHIFTRIGHT2; }varequals		{ count();	return VAREQUALS; }oldadd			{ count();	return OLDADD; }subtract		{ count();	return SUBTRACT; }multiply		{ count();	return MULTIPLY; }divide			{ count();	return DIVIDE; }oldequals		{ count();	return OLDEQUALS; }oldlessthan		{ count();	return OLDLESSTHAN; }logicaland		{ count();	return LOGICALAND; }logicalor		{ count();	return LOGICALOR; }not			{ count();	return NOT; }stringeq		{ count();	return STRINGEQ; }stringlength		{ count();	return STRINGLENGTH; }substring		{ count();	return SUBSTRING; }getvariable		{ count();	return GETVARIABLE; }setvariable		{ count();	return SETVARIABLE; }settargetexpr		{ count();	return SETTARGETEXPRESSION; }startdrag		{ count();	return STARTDRAG; }stopdrag		{ count();	return STOPDRAG; }stringlessthan		{ count();	return STRINGLESSTHAN; }mblength		{ count();	return MBLENGTH; }mbsubstring		{ count();	return MBSUBSTRING; }mbord			{ count();	return MBORD; }mbchr			{ count();	return MBCHR; }branch			{ count();	return BRANCHALWAYS; }branchalways		{ count();	return BRANCHALWAYS; }branchiftrue		{ count();	return BRANCHIFTRUE; }post			{ count();	return POST; }get			{ count();	return GET; }end			{ count();	return END;		}}r\:{DIGIT}+		{ count();	swf5lval.str = strdup(yytext+2);					return REGISTER;	}{ID}			{ count();	swf5lval.str = strdup(yytext);					return IDENTIFIER;	}\"(\\.|[^\\"])*\"	{ count();	swf5lval.str = strdup(yytext+1);					swf5lval.str[strlen(swf5lval.str)-1]=0;                                        unescape(swf5lval.str);					return STRING;		}\'(\\.|[^\\'])*\'	{ count();	swf5lval.str = strdup(yytext+1);					swf5lval.str[strlen(swf5lval.str)-1]=0;                                        unescape(swf5lval.str);					return STRING; 		}\"(\\.|[^\\"])*$	{ count();	swf5lval.str = strdup("");					warning("Unterminated string!");					return STRING;		}\'(\\.|[^\\'])*$	{ count();	swf5lval.str = strdup("");					warning("Unterminated string!");					return STRING;		}"/*"			{ count();	comment();		}"//"			{ count();	comment1();		}[ \t\v\f]		{ count(); }"++"			{ count();	return INCR; }"--"			{ count();	return DECR; }"<="			{ count();	return LE; }">="			{ count();	return GE; }"==" 			{ count();	return EQ; }"!=" 			{ count();	return NE; }"&&" 			{ count();	return LAN; }"||" 			{ count();	return LOR; }"*="			{ count();	return MEQ; }"/="			{ count();	return DEQ; }"+="			{ count();	return IEQ; }"-="			{ count();	return SEQ; }"&="			{ count();	return AEQ; }"|="			{ count();	return OEQ; }"<<"			{ count();	return SHL; }">>"			{ count();	return SHR; }">>>"			{ count();	return SHR2; }"<<="			{ count();	return SHLEQ; }">>="			{ count();	return SHREQ; }">>>="			{ count();	return SHR2EQ; }"<"			{ count();	return '<'; }">"			{ count();	return '>'; }";"			{ count();	return ';'; }"="			{ count();	return '='; }"+"			{ count();	return '+'; }"-"			{ count();	return '-'; }"&"			{ count();	return '&'; }"|"			{ count();	return '|'; }"^"			{ count();	return '^'; }"*"			{ count();	return '*'; }"/"			{ count();	return '/'; }"%"			{ count();	return '%'; }"!"			{ count();	return '!'; }"("			{ count();	return '('; }")"			{ count();	return ')'; }"["			{ count();	return '['; }"]"			{ count();	return ']'; }"{"			{ count();	return '{'; }"}"			{ count();	BEGIN(0); return '}'; }","			{ count();	return ','; }"."			{ count();	return '.'; }"?"			{ count();	return '?'; }":"			{ count();	return ':'; }"~"			{ count();	return '~'; }\r?\n			{ count();	strcpy(szLine, yytext + 1);					countline();	yyless(1);	}.			SWF_error("Unrecognized character: %s\n", yytext);%%static int getinput() {#ifdef __cplusplus					return yyinput();#else					return input();#endif}int swf5wrap(){  return 1;}static void countline(){  if(sLineNumber != 0)    msgline[column] = 0;  ++sLineNumber;  column = 0;  msgline = msgbufs[sLineNumber & 1];}static int LineNumber(void){   return (sLineNumber + 1);}static int ColumnNumber(void){   return column;}static char *LineText(void){  msgline[column] = 0;  return msgline;}static void comment(){   // Handle block comments   int c, c1;loop:   // We have the start of a comment so look skip everything up to the   // end of the comment character   while ((c = getinput()) != '*' && c != EOF)   {      if(column < 1023)         msgline[column] = c;      ++column;      // keep the line number in synch      if (c == '\n')      {         // start the output (matches the algorithim in the lexx above)	 countline();      }      if (swf5debug) putchar(c);   }   // is this the end of comment character   if ((c1 = getinput()) != '/' && c != EOF)   {      // false start as this was no end of comment      do_unput5(c1);      goto loop;   }   // write out the start of the end of comment   if (c != EOF)      if (swf5debug) putchar(c);   // write out the end of the end of comment   if (c1 != EOF)       if (swf5debug) putchar(c1);}static void comment1(){   // Handle comment of type 1 (ie '//')   int c;   // this is a line comment   while ((c = getinput()) != '\n' && c != EOF)   {      if (swf5debug) putchar(c);      if(column < 1023)         msgline[column] = c;      ++column;   };   // keep the line number in synch   if (c == '\n')   {      if (swf5debug) putchar(c);      countline();   }}static void count(void){   int n;   // Count the characters to maintain the current column position   if (yytext[0] == '\n')   {      if (swf5debug) printf("\n");   }   else   {      if (swf5debug) printf("%s", yytext);      for(n=0; n<yyleng; ++n, ++column)      {	if(column < 1023)	  msgline[column] = yytext[n];      }      //-- keep writing the stuff to standard output      //column += yyleng;   }}static void printprog(){  if(sLineNumber)    SWF_warn("\n%s", msgbufs[(sLineNumber-1)&1]);  if(column < 1023)    msgline[column] = 0;  SWF_warn("\n%s", msgline);}static void warning(char *msg){   // print a warning message   printprog();   SWF_warn("\n%*s", ColumnNumber(), "^");   SWF_warn("\nLine %4.4d:  Reason: '%s' \n", LineNumber(), msg);}void swf5error(char *msg){  // report a error  if(strlen(yytext))  {    SWF_error("\n%s\n%*s\nLine %i:  Reason: '%s'\n",	      LineText(), ColumnNumber(), "^", LineNumber(), msg);  }  else  {    SWF_error("\nLine %d: Reason: 'Unexpected EOF found while looking for input.'\n", LineNumber());  }}

⌨️ 快捷键说明

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