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

📄 script_dec.c

📁 一个用于智能手机的多媒体库适合S60 WinCE的跨平台开发库
💻 C
📖 第 1 页 / 共 2 页
字号:
	SFS_AddString(parser, "while (");	SFS_CompoundExpression(parser);	SFS_AddString(parser, ")");	SFS_StatementBlock(parser, 0);}void SFS_ReturnStatement(ScriptParser *parser){	if (parser->codec->LastError) return;	SFS_AddString(parser, "return");	if (gf_bs_read_int(parser->bs, 1)) {		SFS_AddString(parser, " ");		SFS_CompoundExpression(parser);	}	SFS_AddString(parser, ";");	SFS_Line(parser);}void SFS_CompoundExpression(ScriptParser *parser){	if (parser->codec->LastError) return;	SFS_Expression(parser);	if (! gf_bs_read_int(parser->bs, 1)) return;	SFS_AddString(parser, ",");	SFS_CompoundExpression(parser);}void SFS_OptionalExpression(ScriptParser *parser){	if (parser->codec->LastError) return;	if (gf_bs_read_int(parser->bs, 1)) {		SFS_CompoundExpression(parser);	}}void SFS_Expression(ScriptParser *parser){	u32 val = gf_bs_read_int(parser->bs, NUMBITS_EXPR_TYPE);	if (parser->codec->LastError) return;	switch(val) {	case ET_CURVED_EXPR:		SFS_AddString(parser, "(");		SFS_CompoundExpression(parser);		SFS_AddString(parser, ")");		break;	case ET_NEGATIVE:		SFS_AddString(parser, "-");		SFS_Expression(parser);		break;	case ET_NOT:		SFS_AddString(parser, "!");		SFS_Expression(parser);		break;	case ET_ONESCOMP:		SFS_AddString(parser, "~");		SFS_Expression(parser);		break;	case ET_INCREMENT:		SFS_AddString(parser, "++");		SFS_Expression(parser);		break;	case ET_DECREMENT:		SFS_AddString(parser, "--");		SFS_Expression(parser);		break;	case ET_POST_INCREMENT:		SFS_Expression(parser);		SFS_AddString(parser, "++");		break;	case ET_POST_DECREMENT:		SFS_Expression(parser);		SFS_AddString(parser, "--");		break;	case ET_CONDTEST:		SFS_Expression(parser);		SFS_AddString(parser, " ? ");		SFS_Expression(parser);		SFS_AddString(parser, " : ");		SFS_Expression(parser);		break;	case ET_STRING:		SFS_AddString(parser, "'");		SFS_GetString(parser);		SFS_AddString(parser, "'");		break;	case ET_NUMBER:		SFS_GetNumber(parser);		break;	case ET_IDENTIFIER:		SFS_Identifier(parser);		break;	case ET_FUNCTION_CALL:		SFS_FunctionCall(parser);		break;	case ET_NEW:        SFS_NewObject(parser);		break;	case ET_OBJECT_MEMBER_ACCESS:    		SFS_ObjectMemberAccess(parser);		break;	case ET_OBJECT_METHOD_CALL:        SFS_ObjectMethodCall(parser);		break;	case ET_ARRAY_DEREFERENCE:        SFS_ArrayDeref(parser);		break;	case ET_MULTIPLY:		SFS_Expression(parser);		SFS_AddString(parser, "*");		SFS_Expression(parser);		break;	case ET_DIVIDE:		SFS_Expression(parser);		SFS_AddString(parser, "/");		SFS_Expression(parser);		break;	case ET_MOD:		SFS_Expression(parser);		SFS_AddString(parser, "%");		SFS_Expression(parser);		break;	case ET_PLUS:		SFS_Expression(parser);		SFS_AddString(parser, "+");		SFS_Expression(parser);		break;	case ET_MINUS:		SFS_Expression(parser);		SFS_AddString(parser, "-");		SFS_Expression(parser);		break;	case ET_LSHIFT:		SFS_Expression(parser);		SFS_AddString(parser, "<<");		SFS_Expression(parser);		break;	case ET_RSHIFT:		SFS_Expression(parser);		SFS_AddString(parser, ">>");		SFS_Expression(parser);		break;	case ET_RSHIFTFILL:		SFS_Expression(parser);		SFS_AddString(parser, ">>>");		SFS_Expression(parser);		break;	case ET_AND:		SFS_Expression(parser);		SFS_AddString(parser, "&");		SFS_Expression(parser);		break;	case ET_XOR:		SFS_Expression(parser);		SFS_AddString(parser, "^");		SFS_Expression(parser);		break;	case ET_OR:		SFS_Expression(parser);		SFS_AddString(parser, "|");		SFS_Expression(parser);		break;	case ET_LT:		SFS_Expression(parser);		SFS_AddString(parser, "<");		SFS_Expression(parser);		break;	case ET_LE:		SFS_Expression(parser);		SFS_AddString(parser, "<=");		SFS_Expression(parser);		break;	case ET_GT:		SFS_Expression(parser);		SFS_AddString(parser, ">");		SFS_Expression(parser);		break;	case ET_GE:		SFS_Expression(parser);		SFS_AddString(parser, ">=");		SFS_Expression(parser);		break;	case ET_EQ:		SFS_Expression(parser);		SFS_AddString(parser, "==");		SFS_Expression(parser);		break;	case ET_NE:		SFS_Expression(parser);		SFS_AddString(parser, "!=");		SFS_Expression(parser);		break;	case ET_LAND:		SFS_Expression(parser);		SFS_AddString(parser, "&&");		SFS_Expression(parser);		break;	case ET_LOR:		SFS_Expression(parser);		SFS_AddString(parser, "||");		SFS_Expression(parser);		break;	case ET_ASSIGN:		SFS_Expression(parser);		SFS_AddString(parser, "=");		SFS_Expression(parser);		break;	case ET_PLUSEQ:		SFS_Expression(parser);		SFS_AddString(parser, "+=");		SFS_Expression(parser);		break;	case ET_MINUSEQ:		SFS_Expression(parser);		SFS_AddString(parser, "-=");		SFS_Expression(parser);		break;	case ET_MULTIPLYEQ:		SFS_Expression(parser);		SFS_AddString(parser, "*=");		SFS_Expression(parser);		break;	case ET_DIVIDEEQ:		SFS_Expression(parser);		SFS_AddString(parser, "/=");		SFS_Expression(parser);		break;	case ET_MODEQ:		SFS_Expression(parser);		SFS_AddString(parser, "%=");		SFS_Expression(parser);		break;	case ET_LSHIFTEQ:		SFS_Expression(parser);		SFS_AddString(parser, "<<=");		SFS_Expression(parser);		break;	case ET_RSHIFTEQ:		SFS_Expression(parser);		SFS_AddString(parser, ">>=");		SFS_Expression(parser);		break;	case ET_RSHIFTFILLEQ:		SFS_Expression(parser);		SFS_AddString(parser, ">>>=");		SFS_Expression(parser);		break;	case ET_ANDEQ:		SFS_Expression(parser);		SFS_AddString(parser, "&=");		SFS_Expression(parser);		break;	case ET_XOREQ:		SFS_Expression(parser);		SFS_AddString(parser, "^=");		SFS_Expression(parser);		break;	case ET_OREQ:		SFS_Expression(parser);		SFS_AddString(parser, "|=");		SFS_Expression(parser);		break;    case ET_BOOLEAN: 		SFS_GetBoolean(parser);        break;	case ET_VAR:		SFS_AddString(parser, "var ");		SFS_Arguments(parser, 1);		break;	case ET_FUNCTION_ASSIGN:		SFS_AddString(parser, "function ");		SFS_Arguments(parser, 0);		SFS_StatementBlock(parser, 1);		break;	default:		assert(0);		break;	}}void SFS_NewObject(ScriptParser *parser){	if (parser->codec->LastError) return;	SFS_AddString(parser, "new ");    SFS_Identifier(parser);	SFS_AddString(parser, "(");	SFS_Params(parser);	SFS_AddString(parser, ") ");}void SFS_ArrayDeref(ScriptParser *parser){	if (parser->codec->LastError) return;	SFS_Expression(parser);    SFS_AddString(parser, "[");	SFS_CompoundExpression(parser);	SFS_AddString(parser, "]");}void SFS_FunctionCall(ScriptParser *parser){	if (parser->codec->LastError) return;	SFS_Identifier(parser);	SFS_AddString(parser, "(");	SFS_Params(parser);	SFS_AddString(parser, ")");}void SFS_ObjectMemberAccess(ScriptParser *parser){	if (parser->codec->LastError) return;	SFS_Expression(parser);	SFS_AddString(parser, ".");    SFS_Identifier(parser);}void SFS_ObjectMethodCall(ScriptParser *parser){	if (parser->codec->LastError) return;	SFS_Expression(parser);	SFS_AddString(parser, ".");	SFS_Identifier(parser);	SFS_AddString(parser, "(");	SFS_Params(parser);	SFS_AddString(parser, ")");}void SFS_Params(ScriptParser *parser){	u32 val;	if (parser->codec->LastError) return;	val = gf_bs_read_int(parser->bs, 1);	while (val) {		SFS_Expression(parser);		val = gf_bs_read_int(parser->bs, 1);		if(val) SFS_AddString(parser, ",");	}}void SFS_GetNumber(ScriptParser *parser){	u32 val, nbBits;	if (parser->codec->LastError) return;	// integer	if (gf_bs_read_int(parser->bs, 1)) { 		nbBits = gf_bs_read_int(parser->bs, 5);		val = gf_bs_read_int(parser->bs, nbBits);		SFS_AddInt(parser, val);		return;	} 	// real number	val = gf_bs_read_int(parser->bs, 4);	while ( val != 15) {		if (val>=0 && val<=9) {			SFS_AddChar(parser, (char) (val + '0') );		} else if (val==10) {			SFS_AddChar(parser, '.');		} else if (val==11) {			SFS_AddChar(parser, 'E');		} else if (val==12){			SFS_AddChar(parser, '-');		}		val = gf_bs_read_int(parser->bs, 4);	}}void SFS_GetString(ScriptParser *parser){	char name[1000];	if (parser->codec->LastError) return;	gf_bifs_dec_name(parser->bs, name);	SFS_AddString(parser, name);}void SFS_GetBoolean(ScriptParser *parser){	if (parser->codec->LastError) return;	if (gf_bs_read_int(parser->bs, 1)) {		SFS_AddString(parser, "true");	} else {		SFS_AddString(parser, "false");	}}

⌨️ 快捷键说明

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