/BARES

Primary LanguageC++

Natal, 06/Outubro/2015

# Identificação #
	
	* Instituição: Universidade Federal do Rio Grande do Norte (UFRN)
	* Disciplina:  Estrutura de Dados Básicos I (IMD0029)

	* Aluno:       Vinícius Campos Tinoco Ribeiro
	* Matrícula:   2014025284

	* Aluno:       Vitor Rodrigues Greati
	* Matrícula:   2015034967

# Introdução #

O projeto consiste no desenvolvimento de um BARES (Basic ARithmetic Expression
Evaluator based on Stacks), que significa Avaliador de Expressões Aritiméticas 
Básicas baseado em Pilhas. A tarefa consiste em ler expressões (strings), realizar
o possível cálculo e se a expressão estiver correta, deve-se retornar o valor da expressão, 
senão os erros da expressão.

# Operações Permitidas #

	* - (Unário) : Negação do operando
	* + (Binário): Adição entre dois operandos
	* - (Binário): Subtração entre dois operandos
	* * (Binário): Multiplicação entre dois operandos
	* / (Binário): Divisão entre dois operandos
	* % (Binário): Módulo entre dois operandos
	* ^ (Binário): Potência entre dois operandos (base e expoente)

# Outros operadores #
	
	* ( : Quebra precedência
	* ) : Quebra precedência 

# Erros detectáveis #

	1 Constante numérica inválida: Algum dos operandos da expressão está 
	fora do intervalo permitido (-32.767 a 32.767)
	2 Falta de operando: Falta de algum operando para utilizar um operador
	3 Operando inválido: Operando não permitido, algum digito diferente de (0 1 2 3 4 5 6 7 8 9)
	4 Operador inválido: Operador não permitido, operador diferente de ( ( ) - + * / % ^)
	5 Falta operador: Falta algum operador entre operandos
	6 Fechamento de escopo inválido: Fechamento de escopo sem abertura
	7 Escopo aberto: Escopo sem fechamento
	8 Divisão por zero: Quando é realizado uma operãção de divisão e o denominador é 0. 

# Estrutura #

O projeto está sub-dividido em 6 pastas:
	
	* bin: Possui os executáveis do projeto
	* data: Possui arquivos que servem como entrada e saida para a execução do programa
	* documentation: Possui toda a documentação do projeto com doxygen
	* include: Possui o arquivo de cabeçalho das classes do projeto
	* lib: Possui os objetos do sistema
	* src: Possui o arquivo de implementação dos métodos das classes do projeto

# Guia de utilização(MODO TEXTO) - Linux #
	
	1 - Descompactar o projeto na pasta de preferência
	1 - Abra o terminal
	2 - make
	3 - Para executar, tem-se quatro maneiras:
		* sem make:  
		./bin/bares data/<arquivo_de_entrada>
		- O comando acima apenas executa o programa com a entrada de arquivos.
		ou 
		./bin/bares /data/<arquivo_de_entrada> data/<arquivo_de_saida>
		- O comando acima apenas executa o programa com a entrada de arquivos e salva na pasta de data

		* com make:
		make run data/<arquivo_de_entrada>
		- O comando acima apenas executa o programa com a entrada de arquivos.
		ou
		make run /data/<arquivo_de_entrada> data/<arquivo_de_saida>
		- O comando acima apenas executa o programa com a entrada de arquivos e salva na pasta de data

		Obs: <arquivo_de_entrada> é um arquivo de texto com entradas das expressões
			 <arquivo_de_saida> será o arquivo que armazenará os resultados das expressões
	4 - Para limpar os arquivos de compilação:
		make clean

# Erros tratados
	* Quando não se informa o arquivo de entrada ou um caminho inválido para ele
	* Quando não se informa um caminho válido para o arquivo de saída

# Resultado no valgrind(MODO TEXTO) #

	* O projeto passou no valgrind sem vazamento de memória,
	resposta no terminal ao fim de uma execução: 

	==5906== 
	==5906== HEAP SUMMARY:
	==5906==     in use at exit: 0 bytes in 0 blocks
	==5906==   total heap usage: 477 allocs, 477 frees, 90,519 bytes allocated
	==5906== 
	==5906== All heap blocks were freed -- no leaks are possible
	==5906== 
	==5906== For counts of detected and suppressed errors, rerun with: -v
	==5906== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

	* Para fazer o teste basta rodar o comando
	make run_valgrind <arquivo_de_entrada> 
	ou
	make run_valgrind <arquivo_de_entrada> <arquivo_de_saida>
  	
  	Obs: É preciso ter pelo menos rodado o comando make antes de testar o make run_valgrind