Пример #1
0
/* create quadruple representing instruction */
void gen3ai(OPCODE op_code,SYM_ENTRY* arg1, SYM_ENTRY* arg2, SYM_ENTRY* result)
{
	DEBUG("Function: %s --- File: %s \n ", __func__, __FILE__);
	// allocate memory for this instruction
	INSTRUCTION* inst = fmalloc(sizeof(INSTRUCTION));
	// populate the instruction
	inst->op_code = op_code;
	inst->args[0] = arg1;
	inst->args[1] = arg2;
	inst->result = result;
	// Then put it in the instruction memory
	instruction_memory_insert(inst);
	printf("%d. ", current3ai()); /* print the index */
	switch(op_code)
	{
	case A2PLUS:
		print3ai("+", arg1,arg2,result);
		break;
	case A2MINUS:
		print3ai("-", arg1,arg2,result);
		break;
	case A2TIMES:
		print3ai("*", arg1,arg2,result);
		break;
	case A2DIVIDE:
		print3ai("/", arg1,arg2,result);
		break;
	case A0:
		print3ai(" ", arg1,arg2,result);
		break;
	case IFEQ:
		printIf("==", arg1, arg2, result);
		break;
	case IFNEQ:
		printIf("!=", arg1, arg2, result);
		break;
	case IFGT:
		printIf(">", arg1, arg2, result);
		break;
	case IFLT:
		printIf("<", arg1, arg2, result);
		break;
	case A1NOT:
		print3ai("!", arg1,arg2,result);
		break;
	case GOTO:
		printGOTO("GOTO",arg1, arg2, result);
		break;
	case PARAM:
		printParam("PARAM",result);
		break;
	case CALL:
		printParam("CALL",result);
		break;
	}
}
Пример #2
0
void printStmtList (struct STMT *st) {
	if (st == NULL) {
		//fprintf (stderr, "Statement list does not exist.\n");
		return;
	}

	if (st->prev != NULL)
		printStmtList (st->prev);

	if (st->s == eAssign) {
		printAssi (st->stmt.assign_);
		fprintf (fp, ";\n");
	}
	else if (st->s == eCall) {
		printCall (st->stmt.call_);
		fprintf (fp, ";\n");
	}
	else if (st->s == eRet) {
		printRet (st->stmt.return_);
		fprintf (fp, ";\n");
	}
	else if (st->s == eWhile) {
		printWhil (st->stmt.while_);
		fprintf (fp, "\n");
	}
	else if (st->s == eFor) {
		printFor (st->stmt.for_);
		fprintf (fp, "\n");
	}
	else if (st->s == eIf) {
		printIf (st->stmt.if_);
		fprintf (fp, "\n");
	}
	else if (st->s == eCompound) {
		printCompStmt (st->stmt.cstmt_);
	}
	else if (st->s == eSwitch) {
		printSwit (st->stmt.switch_);
		fprintf (fp, "\n");
	}
	else
		fprintf (fp, ";\n");
}
Пример #3
0
void printPowerups(void)
{
	printf("%d Power-ups:\n", g_iPowerUpCount);
	for(int ii = 0; ii < g_iPowerUpCount; ++ii)
	{
		printf("%10s  ", g_PowerUps[ii].szName);
		printf("%16s  ", g_PowerUps[ii].szImage);
//		if(g_PowerUps[ii].fHealth != 0.0)
//            printf("Health[%f] ", g_PowerUps[ii].fHealth);
		printIf(g_PowerUps[ii].iHealth, "Health[%d] ");
		printIf(g_PowerUps[ii].iInvulnerability, "Invulnerability[%d] ");
		printIf(g_PowerUps[ii].iFastMove, "FastMove[%d] ");
		printIf(g_PowerUps[ii].iHighJump, "HighJump[%d] ");
		printIf(g_PowerUps[ii].iStunPlayer, "Stun[%d] ");
		printIf(g_PowerUps[ii].iLifeUp, "LifeUp[%d] ");
		printf("\n");
	}
}
Пример #4
0
void ASTPrint( int lev, ASTNode node )
{
	if (! node)
	{
		indent( lev ); ec_stderr_printf( "NULL" );
		return;
	}

	/* Simplify our lives ... */
	if (currentScope)
	{
		if (currentScope->type == PackageScope)
		{
			currentPackage  = currentScope->target;
			currentBytecode = EC_PACKAGECODE(currentScope->target);
		} else
		{
			currentBytecode = currentScope->target;
		}
		currentLiteral  = EC_COMPILEDLFRAME(currentBytecode);
	}

	switch ( node->type )
	{
	case nullType:
		indent( lev ); ec_stderr_printf( "<nullType>" );
		break;

	case symbolType:
		printSymbol( lev, node );
		break;

	case qualifiedSymbolType:
		printQualifiedSymbol( lev, node );
		break;

	case constExprType:
		printConstant( lev, node );
		break;

	case variableExprType:
		printVariable( lev, node );
		break;

	case arrayConstructionExprType:
		printArrayCons( lev, node );
		break;

	case hashConstructionExprType:
		printHashCons( lev, node );
		break;

	case unaryExprType:
		printUnary( lev, node );
		break;

	case binaryExprType:
		printBinary( lev, node );
		break;

	case conditionalExprType:
		printConditional( lev, node );
		break;

	case orExprType:
		printOr( lev, node );
		break;

	case andExprType:
		printAnd( lev, node );
		break;

	case assignExprType:
		printAssign( lev, node );
		break;

	case simAssignExprType:
		printSimAssign( lev, node );
		break;

	case arrayRefExprType:
		printArrayRef( lev, node );
		break;

	case declNodeType:
		printDecl( lev, node );
		break;

	case declAtomNodeType:
		printDeclAtom( lev, node );
		break;

	case statementType:
		printStatement( lev, node );
		break;

	case labeledStmtType:
		printLabeledStmt( lev, node );
		break;

	case exprStmtType:
		printExprStmt( lev, node );
		break;

	case ifStmtType:
		printIf( lev, node );
		break;

	case whileStmtType:
		printWhile( lev, node );
		break;

	case doStmtType:
		printDo( lev, node );
		break;

	case forStmtType:
		printFor( lev, node );
		break;

	case forInStmtType:
		printForIn( lev, node );
		break;

	case breakStmtType:
		printBreak( lev, node );
		break;

	case continueStmtType:
		printContinue( lev, node );
		break;

	case gotoStmtType:
		printGoto( lev, node );
		break;

	case tryStmtType:
		printTry( lev, node );
		break;

	case catchStmtType:
		printCatch( lev, node );
		break;

	case throwStmtType:
		printThrow( lev, node );
		break;

	case importStmtType:
		printImport( lev, node );
		break;

	case paramNodeType:
		printParam( lev, node );
		break;

	case paramListType:
		printParamList( lev, node );
		break;

	case callNodeType:
		printCall( lev, node );
		break;

	case methodCallNodeType:
		printMethodCall( lev, node );
		break;

	case stmtListType:
		printStmtList( lev, node );
		break;

	case funcNodeType:
		printFunction( lev, node );
		break;

	case returnNodeType:
		printReturn( lev, node );
		break;

	case classNodeType:
		printClass( lev, node );
		break;

	case methodNodeType:
		printMethod( lev, node );
		break;

	case packageNodeType:
		printPackage( lev, node );
		break;
	}
}