📄 script_dec.c
字号:
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 + -