コード例 #1
0
ファイル: main.c プロジェクト: letrungkien211/AI
int main()
{
  init();

  initSentence( "the man washed the blue car" );
  parseSentence();
  emitFrame();
  destroySentence();

  initSentence( "a dog chased a dirty cat" );
  parseSentence();
  emitFrame();
  destroySentence();

  return 0;
}
コード例 #2
0
ファイル: main.c プロジェクト: elmadjian/hashing_party
int main(int argc, char **argv)
{
	/*============= Variaveis =========================================*/
	/*                                                                 */
    /* token -> linha temporaria para ser concatenada a uma frase      */
	/* filename -> guarda o nome do arquivo aberto pelo usuario        */
	/* opcao -> armazena a opcao do menu digitada pelo usuario         */
	/* primPalavra -> utilizada para guardar uma palavra qualquer      */
	/* id -> guarda os ponteiros identificadores da sentenca           */
	/* frase -> guarda os ponteiros para inicio e fim de uma frase     */
	/* info -> guarda os ponteiros para sentenca anotada               */
	/* copia -> copia temporaria de uma palavra                        */
	/* linha -> armazena temporariamente uma linha do STREAM           */
	/* temp -> guarda os dados retirados de um token                   */
	/* i, j, k -> contadores                                           */
	/* Nsnt -> guarda o numero total de sentencas                      */
 	/* arquivo -> descritor de filename (STREAM)                       */
	/*                                                                 */
	/*=================================================================*/
	char *token;
	char filename[32];
	char opcao[8];
	char primPalavra[256];
	int id[2];
	int frase[2];
	int info[2];
	char copia[256];
	char linha[BUFFER];
	char temp[2][256];
	int i, j, k, Nsnt; 
	FILE *arquivo;

	/*==== Testando parametros de entrada ===*/
	if (argc <= 1)
	{
		printf(">> Utilize: <%s> -f<nome_do_arquivo> para executar o programa\n\n", argv[0]);
		exit (EXIT_FAILURE);
	}
	else
		sscanf(argv[1], "%*[-f]%s", filename); 

	/*==== Checando integridade do arquivo ===*/
	arquivo = fopen(filename, "rb");
	if (arquivo == NULL)
	{
		fprintf(stderr, ">> ERRO: nao consegui abrir o arquivo %s\n", filename);
		exit(EXIT_FAILURE);
	}
	fprintf(stdout, "\n>> Abrindo o arquivo < %s >...\n\n", filename);
	
	/*==== Adquirindo o numero total de sentencas ===*/
	while (fgets(linha, BUFFER, arquivo) != NULL)
	{
		sscanf(linha, "%s #%d", primPalavra, &i);
		if (strcmp(primPalavra, "Sentence") == 0)
			Nsnt = i;
	}
	/* inicializando o vetor de sentencas e as STs */
	initSentence(Nsnt);
	ST_t1_init();
	ST_t2_init();
	
	/*==== Adquirindo informacoes para a tabela de simbolos ===*/
	rewind(arquivo);
	/*arquivo = fopen(filename, "r");*/
	while (fgets(linha, BUFFER, arquivo) != NULL)
	{
		/*limpando primPalavra*/
		strcpy(primPalavra, " ");

		/* extraindo informacoes relativas a sentencas */
		sscanf(linha, "%s #%d (%d", primPalavra, &i, &j);
		if (strcmp(primPalavra, "Sentence") == 0)
		{
			/* encontrando o id da sentenca */
			id[1] = ftell(arquivo);
			id[0] = id[1] - strlen(linha);
	
			/* encontrando a frase da sentenca */
			fgets(linha, BUFFER, arquivo);
			sscanf(linha, "%s", copia);
			frase[0] = ftell(arquivo) - strlen(linha);
			while (strcmp(copia, "[Text=") != 0)
			{
				frase[1] = ftell(arquivo);
				fgets(linha, BUFFER, arquivo);
				sscanf(linha, "%s", copia);
				copia[6] = '\0';
			}
			/* encontrando a sentenca anotada */
			info[1] = ftell(arquivo);
			info[0] = info[1] - strlen(linha);

			/* inserindo a sentenca completa no vetor */ 
			insertSentence(i-1, id, frase, info);
		}

		/*==== Construindo chaves da tabela de simbolos ===*/
		if (strcmp(copia, "[Text=") == 0)
		{
			k = 0;
			token = strtok(linha, " ");
			while (token != NULL && strcmp(token, "\n") != 0) 
			{
				k++;
				sscanf(token, "%*[^=]=%[^]]", primPalavra);
				/* o mesmo perfil de informacao se repete em mod 5 */
				switch(k % 5)
				{
					case 1: /* palavra */
						strcpy(temp[0], primPalavra);
						break;
					case 0: /* lema */
						strcpy(temp[1], primPalavra);
						break;
					default: 
						break;
				}

				/* salvando as informacoes nas tabelas de palavra(t1) e lema(t2) */
				if (k % 5 == 0) 
				{
					ST_t1_insert(buildVal(temp[0], temp[1], i-1));
					ST_t2_insert(buildVal(temp[0], temp[1], i-1));
				}
				token = strtok(NULL, " ");
			}
		}
	}
	k = 1; /* para garantir... */

	/*==== MENU ===*/
	while (k != 0)
	{
		strcpy(primPalavra, " ");
		printf("================================\n"
			   "|             MENU             |\n"
			   "| -e: busca exata              |\n"
			   "| -a: busca lema               |\n"
			   "| -{e,a}v: busca exata + id    |\n"
			   "| -{e,a}V: -{e,a}v + info      |\n"
			   "| -t: tokens (ordenados)       |\n"
			   "| -d: palavras (ordenadas)     |\n"
			   "| -l: lemas (ordenados)        |\n"
			   "| -L: -l + derivacoes          |\n"
			   "| -s: estatisticas             |\n"
			   "| -F: sair do programa         |\n"
			   "================================\n"
			   "sua opcao: ");
		/* recebe opcao do usuario */
		fgets(linha, 256, stdin);
		sscanf(linha, "%s %s", opcao, primPalavra);
	
		/* faz o hash do id devolvendo um composto de numeros primos (id unico) para o switch */
		if (strcmp(primPalavra, " ") != 0)
		{
			switch(hashOption(opcao))
			{
				case 6: /*opcao -e*/
					printValor(ST_t1_search(primPalavra), arquivo, 0);
					break;
				case 10: /*opcao -a*/
					printValor(ST_t2_search(primPalavra), arquivo, 0);
					break;
				case 42: /*opcao -ev*/
					printValor(ST_t1_search(primPalavra), arquivo, 1);
					break;
				case 66: /*opcao -eV*/
					printValor(ST_t1_search(primPalavra), arquivo, 2);
					break;
				case 70: /*opcao -av*/
					printValor(ST_t2_search(primPalavra), arquivo, 1);
					break;
				case 110: /*opcao -aV*/
					printValor(ST_t2_search(primPalavra), arquivo, 2);
					break;
				default:
					printf("Desculpe, nao entendi...\n");
					break;			
			}
		}
		/* hash das opcoes que nao dependem de dois parametros */
		else if (strcmp(primPalavra, " ") == 0)
		{
			switch(hashOption(opcao))
			{
				case 26: /*sair do programa*/
					k = 0;
					break;
				case 34: /*opcao -t*/
					ST_t1_list(0);
					break;
				case 38: /*opcao -d*/
					ST_t1_list(1);
					break;
				case 46: /*opcao -l*/
					ST_t2_list(0);
					break;
				case 58: /*opcao -L*/
					ST_t2_list(1);
					break;
				case 62: /*opcao -s*/
					printf("-----------------------------------\n"
						   "|          Estatisticas:          |\n"
						   "-----------------------------------\n"
						   "-> Numero de sentencas: %d\n"
						   "-> Numero de tokens: %d\n"
						   "-> Numero de palavras: %d\n"
						   "-> Total de tokens distintos: %d\n"
						   "-> Total de palavras distintas: %d\n"
						   "-> Total de lemas distintos: %d\n"
						   "-----------------------------------\n\n",
						   Nsnt, 
						   ST_t1_count(0), 
						   ST_t1_count(1),
						   ST_t1_count(2),
						   ST_t1_count(3),
						   ST_t2_count());
					break;
				default:
					printf("Desculpe, nao entendi...\n");
					break;
			}
		}	
		else
			printf("Desculpe, nao entendi...\n");
	}
	/*Saindo... do programa*/
	fclose(arquivo);
	printf("\n>> Saindo...\n\n");
	return 0;
}