示例#1
0
void inicializarSintatico()
{
    inicializarListaAutomatos(&listaAutomatos);
    inicializarAutomato(&automatoEmUso);
    inicializarEstado(&estadoEmUso,0,0,1);
    inicializaPilha(&pilhaEstados);

    //carregarAutomatos(&listaAutomatos);
    carregarAutomatosJFLAP(&listaAutomatos);

    //Extrai o primeiro automato da lista
    automatoEmUso = listaAutomatos->automato;

    //Extrai o primeiro estado do primeiro automato
    estadoEmUso = estadoInicial(automatoEmUso);

    /*
    ListaAutomatos *lAux;
    inicializarListaAutomatos(&lAux);

    lAux = listaAutomatos;


    while(lAux!=NULL)
    {
        printAutomato(lAux->automato);
        lAux = lAux ->prox;
    }
    */


}
int main(int argc, char *argv[]) {


	bool runTests = false;

	if (runTests == true) {
		CU_initialize_registry();

		CU_register_suites(suites);

		CU_basic_set_mode(CU_BRM_VERBOSE);
		CU_basic_run_tests();
		CU_cleanup_registry();

		return CU_get_error();
	}

	puts("Inicializando");
	conf_nodo* configuracion = cargarConfiguracion(argc, argv);
	estadoGlobal= inicializarEstado(configuracion);

	int resultado = ejecutarProgramaPrincipal(estadoGlobal);

	return resultado;
}
示例#3
0
void carregarAutomatos(ListaAutomatos **L)
{

    /*
        E = T "+" E | T.

        initial: 0
        final: 1, 3
        (0, T) -> 1
        (1, "+") -> 2
        (2, E) -> 3

    */



    /*
        T = "int" | "int" "*" T | "(" E ")".

        initial: 0
        final: 1, 5
        (0, "int") -> 1
        (0, "(") -> 2
        (1, "*") -> 3
        (2, E) -> 4
        (3, T) -> 5
        (4, ")") -> 5

    */

    Automato *automatoT = buscarAutomatoPorID(*L,"T");

    Automato *automatoE = buscarAutomatoPorID(*L,"E");


    Estado* estadoE0;
    Estado* estadoE1;
    Estado* estadoE2;
    Estado* estadoE3;

    inicializarEstado(&estadoE0,0,0,1);

    inicializarEstado(&estadoE1,1,1,0);

    inicializarEstado(&estadoE2,2,0,0);

    inicializarEstado(&estadoE3,3,1,0);

    Transicao* transicaoE0 = (Transicao *) malloc (sizeof(Transicao));
    transicaoE0->proximoEstado = estadoE2;

    strcpy(transicaoE0->terminal,"+");

    ListaTransicao* listaTransicaoE;
    inicializarListaTransicao(&listaTransicaoE);

    adicionarListaTransicao(transicaoE0,&listaTransicaoE);

    estadoE1->listaTransicao = (ListaTransicao *) malloc (sizeof(ListaTransicao));
    estadoE1->listaTransicao = listaTransicaoE;


    ChamadaSubMaquina* chamada1 = (ChamadaSubMaquina *) malloc (sizeof(ChamadaSubMaquina));
    chamada1->proxAutomato = automatoT;
    chamada1->estadoRetorno = estadoE1;

    estadoE0->chamadaSubMaquina = (ChamadaSubMaquina *) malloc (sizeof(ChamadaSubMaquina));
    estadoE0->chamadaSubMaquina = chamada1;

    ChamadaSubMaquina* chamada2 = (ChamadaSubMaquina *) malloc (sizeof(ChamadaSubMaquina));
    chamada2->proxAutomato = automatoE;
    chamada2->estadoRetorno = estadoE3;

    estadoE2->chamadaSubMaquina = (ChamadaSubMaquina *) malloc (sizeof(ChamadaSubMaquina));
    estadoE2->chamadaSubMaquina = chamada2;


    ListaEstados *listaEstadosE;

    inicializarListaEstados(&listaEstadosE);

    adicionarListaEstados(estadoE0,&listaEstadosE);
    adicionarListaEstados(estadoE1,&listaEstadosE);
    adicionarListaEstados(estadoE2,&listaEstadosE);
    adicionarListaEstados(estadoE3,&listaEstadosE);

    automatoE->listaEstados = (ListaEstados *) malloc (sizeof(ListaEstados));
    automatoE->listaEstados = listaEstadosE;


    Estado* estadoT0;
    Estado* estadoT1;
    Estado* estadoT2;
    Estado* estadoT3;
    Estado* estadoT4;
    Estado* estadoT5;

    inicializarEstado(&estadoT0,0,0,1);
    inicializarEstado(&estadoT1,1,1,0);
    inicializarEstado(&estadoT2,2,0,0);
    inicializarEstado(&estadoT3,3,0,0);
    inicializarEstado(&estadoT4,4,0,0);
    inicializarEstado(&estadoT5,5,1,0);


    Transicao* transicaoT00 = (Transicao *) malloc (sizeof(Transicao));
    transicaoT00->proximoEstado = estadoT1;

    strcpy(transicaoT00->terminal,"int");


    Transicao* transicaoT01 = (Transicao *) malloc (sizeof(Transicao));
    transicaoT01->proximoEstado = estadoT2;

    strcpy(transicaoT01->terminal,"(");

    ListaTransicao* listaTransicaoT0;

    inicializarListaTransicao(&listaTransicaoT0);

    adicionarListaTransicao(transicaoT00,&listaTransicaoT0);
    adicionarListaTransicao(transicaoT01,&listaTransicaoT0);

    estadoT0->listaTransicao = (ListaTransicao *) malloc (sizeof(ListaTransicao));
    estadoT0->listaTransicao = listaTransicaoT0;

    Transicao* transicaoT10 = (Transicao *) malloc (sizeof(Transicao));
    transicaoT10->proximoEstado = estadoT3;

    strcpy(transicaoT10->terminal,"*");

    ListaTransicao* listaTransicaoT1;

    inicializarListaTransicao(&listaTransicaoT1);

    adicionarListaTransicao(transicaoT10,&listaTransicaoT1);

    estadoT1->listaTransicao = (ListaTransicao *) malloc (sizeof(ListaTransicao));
    estadoT1->listaTransicao = listaTransicaoT1;

    Transicao* transicaoT40 = (Transicao *) malloc (sizeof(Transicao));
    transicaoT40->proximoEstado = estadoT5;

    strcpy(transicaoT40->terminal,")");

    ListaTransicao* listaTransicaoT4;

    inicializarListaTransicao(&listaTransicaoT4);

    adicionarListaTransicao(transicaoT40,&listaTransicaoT4);

    estadoT4->listaTransicao = (ListaTransicao *) malloc (sizeof(ListaTransicao));
    estadoT4->listaTransicao = listaTransicaoT4;


    ChamadaSubMaquina* chamadaT2 = (ChamadaSubMaquina *) malloc (sizeof(ChamadaSubMaquina));
    chamadaT2->proxAutomato = automatoE;
    chamadaT2->estadoRetorno = estadoT4;

    estadoT2->chamadaSubMaquina = (ChamadaSubMaquina *) malloc (sizeof(ChamadaSubMaquina));
    estadoT2->chamadaSubMaquina = chamadaT2;

    ChamadaSubMaquina* chamadaT3 = (ChamadaSubMaquina *) malloc (sizeof(ChamadaSubMaquina));
    chamadaT3->proxAutomato = automatoT;
    chamadaT3->estadoRetorno = estadoT5;

    estadoT3->chamadaSubMaquina = (ChamadaSubMaquina *) malloc (sizeof(ChamadaSubMaquina));
    estadoT3->chamadaSubMaquina = chamadaT3;



    ListaEstados *listaEstadosT;

    inicializarListaEstados(&listaEstadosT);

    adicionarListaEstados(estadoT0,&listaEstadosT);
    adicionarListaEstados(estadoT1,&listaEstadosT);
    adicionarListaEstados(estadoT2,&listaEstadosT);
    adicionarListaEstados(estadoT3,&listaEstadosT);
    adicionarListaEstados(estadoT4,&listaEstadosT);
    adicionarListaEstados(estadoT5,&listaEstadosT);

    automatoT->listaEstados = (ListaEstados *) malloc (sizeof(ListaEstados));
    automatoT->listaEstados = listaEstadosT;




}
示例#4
0
void carregarAutomatosJFLAP(ListaAutomatos **listaAutomatos)
{
    ListaAutomatos *lAux;
    lAux = *listaAutomatos;

    while(lAux!=NULL)
    {
        printf("\n\n Arquivo do automato : %s ",lAux->automato->XML_File_Name);



        int lendoEstados = 0;
            int estadoNum = 0;
            int estadoInicial= 0;
            int estadoFinal= 0;

        int lendoTransicoes = 0;
            int from = 0;
            int fromNum = 0;
            int to = 0;
            int toNum = 0;
            int read = 0;
            char readTerminal[40] = "\0";


        ListaEstados *listaEstados;


        inicializaLista(&listaEstados);


        char *fname = lAux->automato->XML_File_Name;
        //strcpy(fname,);

        char tag[MaxStr], contents[MaxStr], tagname[MaxStr], attrname[MaxStr], value[MaxStr];

        float x1, y1, z1, x2, y2, z2, t0, t1;
        int linum=0;
        FILE *infile=0, *outfile=0;

        infile = fopen(fname,"r");
        if (infile==0) {printf("Error: Cannot open input file '%s'.\n",fname); exit(1);}
        xml_parse( infile, tag, contents, MaxStr, &linum );
        while (tag[0]!='\0')
        {
            xml_grab_tag_name( tag, tagname, MaxStr );	/* Get tag name. */

            /* Add your application code here to accept tag-name, such as: */
            //printf("Tag name = '%s'\n", tagname );

            if(strcmp(tagname,"state")==0)
            {
                lendoEstados = 1;

                //printf("Tag name comparaao = '%s'\n", tagname );
            }

            if((lendoEstados==1)&&(strcmp(tagname,"initial")==0))
            {
                estadoInicial = 1;

                //printf("Tag name comparaao = '%s'\n", tagname );
            }

            if((lendoEstados==1)&&(strcmp(tagname,"final")==0))
            {
                estadoFinal = 1;

                //printf("Tag name comparaao = '%s'\n", tagname );
            }

            if((lendoEstados==1)&&(strcmp(tagname,"/state")==0))
            {
                Estado *novoEstado;
                inicializarEstado(&novoEstado,estadoNum,estadoFinal,estadoInicial);
                adicionarListaEstados(novoEstado,&listaEstados);

                //printf("\n Criou estado %d, estado inicial %d, estado final %d",novoEstado->estado,novoEstado->estadoInicial,novoEstado->estadoFinal);

                lendoEstados = 0;
                estadoNum = 0;
                estadoInicial = 0;
                estadoFinal = 0;


                //printf("Tag name comparaao = '%s'\n", tagname );
            }

            if(strcmp(tagname,"transition")==0)
            {
                lendoTransicoes = 1;

                //printf("Tag name comparaao = '%s'\n", tagname );
            }

            if((lendoTransicoes==1)&&(strcmp(tagname,"from")==0))
            {
                from = 1;
            }

            if((lendoTransicoes==1)&&(strcmp(tagname,"/from")==0))
            {
                from = 0;
            }

            if((lendoTransicoes==1)&&(strcmp(tagname,"to")==0))
            {
                to = 1;
            }

            if((lendoTransicoes==1)&&(strcmp(tagname,"/to")==0))
            {
                to = 0;
            }

            if((lendoTransicoes==1)&&(strcmp(tagname,"read")==0))
            {
                read = 1;
            }

            if((lendoTransicoes==1)&&(strcmp(tagname,"/read")==0))
            {
                read = 0;
            }

            if((lendoTransicoes==1)&&(strcmp(tagname,"/transition")==0))
            {
                lendoTransicoes = 0;

                Estado *estadoFrom = buscarEstadoPorNumero(listaEstados,fromNum);
                Estado *estadoTo = buscarEstadoPorNumero(listaEstados,toNum);

                if(readTerminal[0]=='"')
                {

                    //Cria uma transicao
                    Transicao* transicao = (Transicao *) malloc (sizeof(Transicao));
                    transicao->proximoEstado = estadoTo;

                    int i = 0;
                    char terminalSemAspas[40] = "\0";

                    for(i= 1;i<strlen(readTerminal)-1;i++)
                    {
                        terminalSemAspas[i-1] = readTerminal[i];
                    }

                    strcpy(transicao->terminal,terminalSemAspas);

                    ListaTransicao *listaTransicao = estadoFrom->listaTransicao;

                    adicionarListaTransicao(transicao,&listaTransicao);

                    estadoFrom->listaTransicao = listaTransicao;

                    //printf("\n Criou transicao from %d to %d com o terminal %s ",estadoFrom->estado,estadoTo->estado,transicao->terminal);

                }
                else
                {
                    ChamadaSubMaquina* chamadaSubMaquina = (ChamadaSubMaquina *) malloc (sizeof(ChamadaSubMaquina));
                    Automato *automatoAux = buscarAutomatoPorID(*listaAutomatos,readTerminal);
                    if(automatoAux!=NULL)
                    {
                        chamadaSubMaquina->proxAutomato = automatoAux;
                    }

                    chamadaSubMaquina ->estadoRetorno = estadoTo;

                    estadoFrom->chamadaSubMaquina = chamadaSubMaquina;

                    //printf("\n Criou chamada submaquina from %d para o automato %s com retorno em %d",estadoFrom->estado,automatoAux->ID,estadoTo->estado);

                    //Cria uma chamada de submaquina

                }

                char readTerminal[40] = "\0";


                //printf("Tag name comparaao = '%s'\n", tagname );
            }

            xml_grab_attrib( tag, attrname, value, MaxStr );	/* Get any attributes within tag. */
            while (value[0] != '\0')
            {
                /* Add application code here to accept attribute attrname and value, such as: */
                //printf(" Attribute: %s = '%s'\n", attrname, value );

               if((lendoEstados==1) && (strcmp(attrname,"id")==0))
               {
                    estadoNum = atoi(value);
               }

                xml_grab_attrib( tag, attrname, value, MaxStr );	 /* Get next attribute, if any. */
            }

            /* Add application code here to accept contents between tags, such as: */
            //printf("\n Contents = '%s'\n", contents );

            if(from == 1)
            {
                fromNum = atoi(contents);
            }

            if(to == 1)
            {
                toNum = atoi(contents);
            }

            if(read==1)
            {
                strcpy(readTerminal,contents);

            }

            xml_parse( infile, tag, contents, MaxStr, &linum );


        }
        fclose(infile);

        Automato *automatoAux = buscarAutomatoPorID(*listaAutomatos,lAux->automato->ID);
        automatoAux->listaEstados = listaEstados;

        lAux = lAux->prox;
    }

}
示例#5
0
int main( int argc, char** argv )
{
   GLenum glewInitResult;

   /* Inicializacao do GLUT */

   glutInit( &argc, argv );

   inicializarJanela();

   /* Criar os menus */

   criarMenus();

   /* Inicializacao do GLEW */

   glewInitResult = glewInit();

   if( GLEW_OK != glewInitResult )
   {
        fprintf(

            stderr,

            "ERROR: %s\n",

            glewGetErrorString( glewInitResult )

        );

        exit( EXIT_FAILURE );
    }

    /* Qual a versao do OpenGL? */

    fprintf(

        stdout,

        "INFO: OpenGL Version: %s\n",

         glGetString( GL_VERSION )

    );

    /* Inicializar o estado da aplicacao */

    inicializarEstado();

    /* Inicializar os objectos a representar */

    inicializarModelos();

    /* Inicializar os shaders */

    if ( initResources() == 1 )
    {
        /* Registando callback functions se OK */

        registarCallbackFunctions();

        infosConsola();

        glutMainLoop();

   }

   /* Housekeeping */

   freeResources();

   libertarArraysGlobais();

   return EXIT_SUCCESS;
}