Trabalho 1 - Estatísticas de linhas em arquivos texto

Introdução

O objetivo deste trabalho é propiciar ao aluno uma oportunidade de escrever o mesmo programa com duas linguagens de programação distintas: uma com vinculação estática de tipo e outra com vinculação dinâmica de tipo. Isto ajudará o aluno a entender as diferentes características, as vantagens e as desvantagens destes dois tipos de linguagens.

O trabalho é individual. O compartilhamento de informações entre os alunos é permitido (e aconselhado), mas o compartilhamento de código não é permitido. Trabalhos que tenham porções significativas de código iguais, ou copiados da internet, serão anulados. Veja a resolução Nº 008/2007-COU para as possíveis sansões disciplinares.

Este trabalho vale 1,0 ponto extra na nota do primeiro bimestre. Apesar deste trabalho ser opcional, recomendo a todos que o façam. Isto porque nos próximos bimestres, os trabalhos de implementação valerão 50% da nota. Fazendo este trabalho o aluno estará se ambientando com a forma e se preparando para os próximos trabalhos.

Data de entrega: até o dia 16/05/2012 às 23:00h.

Descrição

Implementar um programa chamado sstat que computa estatísticas de linhas de arquivos texto.

O programa deve receber como parâmetro na linha de comando uma lista de caminhos (arquivos ou diretórios) e escrever na saída padrão a quantidade de linhas em cada tipo de arquivo e o total das linhas, considerando todos os arquivos passados na linha de comando e todos os arquivos na árvore dos diretórios passados na linha de comando.

Por exemplo, considere a existência dos seguintes arquivos com os respectivos números de linhas

Arquivo Número de linhas
tests/hello/hello.c 5
tests/hello/hello.cpp 7
tests/command-line/sum/sum.c 10

Se o programa for chamado com os parâmetros tests/hello/hello.c e tests/command-line/sum/sum.c, a saída deve ser

15 c
15 total

O que significa que os arquivos com extensão .c têm 15 linhas, e o total de linhas dos arquivos também foi 15 (só tinha um tipo de arquivo).

Se o programa for chamado com o parâmetro tests/, a saída deve ser

15 c
 7 cpp
22 total

Neste caso, todos os arquivos da árvore do diretório tests/ foram contabilizados.

A saída deve ser ordenada pelo número de linhas do tipo de arquivo (maior número de linhas primeiro), e em caso de número de linhas iguais, pela ordem alfabética do tipo (extensão) do arquivo. Os aquivos sem extensão devem ser ignorados. Observe que os números de linhas estão alinhados a esquerda e as extensões alinhadas a direita.

Linguagens

Duas versões deste programa devem ser escritas. Uma na linguagem Ada 2005 e outra na linguagem Lua 5.1. O compilador usado para o Ada deve ser o gnat (4.4 ou superior) e o interpretador do Lua deve ser o oficial da linguagem.

Não é permitido a utilização de nenhuma biblioteca que não seja padrão da linguagem, exceto a biblioteca LuaFileSystem para a versão do programa em Lua (necessária para listar as entradas de um diretório).

Os programas serão testados em um sistema Linux. Apesar de ser possível o desenvolvimento em outros sistemas, os programas utilizados pelos scripts fornecidos pelo professor (veja a seção download) para teste e envio do trabalho podem ser instalados facilmente em um sistema Linux.

Desenvolvimento

Para facilitar o desenvolvimento dos programas, está disponível um “projeto” com os arquivos iniciais de código, um programa testador e um Makefile para compilar, testar e enviar os programas.

Para fazer o download do projeto é necessário ter o git instalado. Se você utiliza um sistema GNU/Linux baseado no Debian (Mint, Ubuntu, etc), o git pode ser instalado com o comando

sudo apt-get install git

Para fazer o download do projeto, execute o comando

git clone http://malbarbo.pro.br/git/sstat

Após a execução deste comando, um diretório chamado sstat terá sido criado. Dentro deste diretório existem diversos arquivos, em especial os arquivos src/sstat.adb, onde o programa principal em Ada deve ser escrito, e o arquivo src/sstat.lua, onde o programa principal em Lua deve ser escrito. Você pode dividir os seus programas em mais de um arquivo, mas todos os arquivos de código devem ficar no diretório src.

Todos os programas necessários para compilar os programas em Ada, interpretar os programas em Lua, executar o testador e enviar o trabalho podem ser instalados com o comando

sudo aptitude install git python2.7 make lua5.1 liblua5.1-filesystem0 gnat

Execução dos testes

Para executar os testes, entre no diretório sstat e execute um dos comandos

make tests     # para testar os programas em Ada e Lua
make test-ada  # para testar apenas o programa em Ada
make test-lua  # para testar apenas o programa em Lua

Estes comandos compilam o programa em Ada antes de executá-lo.

Envio do trabalho

Para enviar o trabalho, execute o comando

make enviar

O script de envio criará um arquivo compactado com os arquivos a serem entregues para correção e enviará para a página do professor.

Após enviar o trabalho, o aluno deverá entrar na página da disciplina, imprimir e assinar o termo de autoria. O termo de autoria é um documento em que o aluno afirma que ele é o autor do código do trabalho que ele enviou. E que portanto, não copiou parte significativa do programa de outra pessoa ou da internet.

O trabalho deve ser enviado até as 23:00h do dia 16/05/2012. O termo de autoria assinado deve ser entregue pessoalmente ao professor no dia 17/05/12 no horário de aula.

Avaliação

Este trabalho vale 1,0 ponto (extra) na nota do primeiro bimestre. O trabalho será avaliado de acordo com os critérios:

Segue alguns links sobre as linguagens de programa Ada, Lua e do programa git.

Ada

Lua

Git