Exemple #1
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");
}
void startDijkstra(char *startStation, char *destStation) // startNode ~ destNode까지의 최단거리
{
   mysubway *temp;
   int shortestNode = -1;
   int prevNode = -1;
   int sum = 0;
   int cnt = 0;
   char change[10];
   char cname[30];
   //  ** 시작노드 **
   Dijkstra *temper = Dlist;
   Dijkstra *show = NULL;
   Dijkstra *startNode = NULL;


   while (temper != NULL)
   {
      if (strcmp(temper->name, startStation) == 0)
      {
         startNode = temper;
         //printf("\ntemper->name: %s\n", startNode->name);
         break;
      }
      temper = temper->next;
   }

   startNode->found = 1; // 최단 경로를 찾았다.
   startNode->dist = 0;
   startNode->prev = NULL; // 자기 이전 녀석은 없다.
   //   printf("시작역 : %s\n", startNode->name);
   // ** startNode에 직접적으로 연결되 있는 노드 탐색  **
   temper = Dlist;
   while (temper != NULL)
   {
      temper->dist = findDist(startStation, temper->name, temper->kind);
      if (temper->dist < 999999 && temper->dist > 0)
      {
         temper->prev = startNode;
      }
      temper = temper->next;
   }
   // -------------여기까지 점검 완료 ---------------//

   while (1)
   {
      temper = findShortestNotFound();
      if (temper == NULL)
      {
         return;
      }
      temper->found = 1;
      temp = map;
      // ----------- Original 을 불러옴 ------------- //
      while (temp != NULL)
      {
         if (strcmp(temper->name, temp->name) == 0 && strcmp(temper->kind, temp->kind) == 0)
         {
            //      printf("%s 환승 %s\n", temp->name, temp->kind);
            break;
         }
         temp = temp->next;
      }
      while (temp->connect != NULL)
      {
         show = Dlist;
         while (show != NULL)
         {
            if (strcmp(show->name, temp->connect->name) == 0 && strcmp(show->kind, temp->connect->kind) == 0)
            {
               //      printf("%s 환승2 %s\n", temp->name, temp->kind);
               break;
            }
            show = show->next;
         }
         if (show->dist > temper->dist + temp->connect->weight) // 더 짧은걸 발견 햇을때
         {
            show->dist = temper->dist + temp->connect->weight;
            show->prev = temper;
            show->real = temp->connect->weight;
         }
         temp = temp->connect;
      }


      if (strcmp(temper->name, destStation) == 0)
      {
         Dijkstra *find = temper;
         // startNode부터 destNode까지의 최단거리를 찾았으니 //
         // destNode부터 prev해서 startNode로 길을 찾아감      //
         do
         {
            addDLL(find->name, find->real);
            if (find->real == 5 && strcmp(find->name, find->prev->name) == 0)
            {
               addFor(find->name);
               transflag = 1;
            }
            find = find->prev;
         } while (find != NULL);
         if (transflag == 1)
         {
            printFor();
         }
         printRDLL();
         if (startrans == 1)
         {
            temper->dist = temper->dist - 5;
         }
         printf("\n");
         printf(">> 소요 거리:  %d distance \n", temper->dist);
         printf("\n");
         return;
      }
   }
}s
Exemple #3
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;
	}
}