183 lines
4.4 KiB
PHP
Executable File
183 lines
4.4 KiB
PHP
Executable File
<?php
|
|
|
|
// Este programa normaliza programas C conforme especificacoes do arquivo de entrada arquivonormalizacao.txt
|
|
// Data: 04/07/2013
|
|
// Autora: Márcia Gonçalves de Oliveira
|
|
// Entrada: diretorio de tarefa com subpastas com contendo cada um as submissoes de alunos
|
|
// Saida: diretorios das tarefas, contendo cada uma as submissões normalizadas.
|
|
|
|
|
|
// Função para executar a normalizacao
|
|
|
|
|
|
function normalizaarquivo($diretorioorigem, $diretoriodestino)
|
|
{
|
|
// Nomes dos arquivos e diretorios utilizados para processamento
|
|
|
|
$listanormalizacoes= "arquivosnormalizacao/arquivonormalizacao.txt";
|
|
$arqconfirmafunciona = "sucesso.txt";
|
|
$arquivoexecutavel="executavel";
|
|
|
|
// Arquivo que conterá codigo normalizado
|
|
|
|
$arqnormalizado=$diretoriodestino.basename($diretorioorigem).".txt";
|
|
|
|
$f= fopen($arqnormalizado,'w');
|
|
|
|
|
|
|
|
|
|
// Obter o código C do diretorio origem de copiar para arquivo. Se não existir o codigo .C, grava um arquivo normalizado vazio.
|
|
|
|
$pointer = opendir($diretorioorigem);
|
|
|
|
$achou=false;
|
|
|
|
$copiaarq="";
|
|
|
|
while (($arqlido = readdir($pointer)) && $achou==false)
|
|
{
|
|
// verifica se extensão do arquivo é .c
|
|
|
|
$extensao=strtoupper(substr($arqlido, -2));
|
|
|
|
if ($extensao==".C")
|
|
{
|
|
$fp = fopen($diretorioorigem.$arqlido,'r');
|
|
$tarq=filesize($diretorioorigem.$arqlido);
|
|
if ($tarq>0)
|
|
{
|
|
$copiaarq = fread($fp, $tarq);
|
|
}
|
|
fclose($fp);
|
|
|
|
$achou=true;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
// Se o arquivo .c não está vazio, insere tokens confirmando compilação e execucao; normaliza retirando comentarios e strings e substituindo palavras ambiguas
|
|
|
|
|
|
if (!($copiaarq==""))
|
|
{
|
|
|
|
// Verificar se roda. ==> Se sim, inserir token @compila, @funciona
|
|
// Se não, verifica apenas se compila ==> Se sim, Inserir token @compila
|
|
|
|
if (file_exists($diretorioorigem.$arqconfirmafunciona) )
|
|
{
|
|
fwrite($f,"@compila @funciona \n");
|
|
}
|
|
else
|
|
{
|
|
if (file_exists($diretorioorigem.$arquivoexecutavel))
|
|
{
|
|
fwrite($f,"@compila");
|
|
}
|
|
|
|
}
|
|
// Retira comentários e textos entre aspas
|
|
|
|
$textonormalizado = preg_replace('/\".*\\n*.*\"/', ' @textostr ', $copiaarq);
|
|
|
|
// Substitui os tokens e símbolos que geram redundâncias conforme lista de normalizações
|
|
|
|
$arqnormaliza = file($listanormalizacoes);
|
|
|
|
foreach($arqnormaliza as $linhaarquivo)
|
|
{
|
|
$str = explode(';', $linhaarquivo);
|
|
|
|
$original = $str[0];
|
|
$novo = trim($str[1]);
|
|
$textonormalizado= str_replace($original,$novo, $textonormalizado);
|
|
|
|
|
|
}
|
|
|
|
$textonormalizado = preg_replace('/@icoment.*@fcoment/s', ' @comentario ', $textonormalizado);
|
|
$textonormalizado = preg_replace('/@comentlinha.*\\n/', ' @comentario ', $textonormalizado);
|
|
|
|
// Gravar arquivo normalizado
|
|
|
|
fwrite($f, $textonormalizado);
|
|
unset($textonormalizado);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Fechar arquivo normalizado
|
|
fclose($f);
|
|
} // Fim da função
|
|
|
|
|
|
// Endereço de entrada
|
|
|
|
$diretorioentrada = "questoesseparadas/";
|
|
|
|
// Endereço do diretorio de saida ==> o que conterá os códigos normalizados
|
|
|
|
$diretoriosaida = "normalizados/";
|
|
|
|
// Entrar em diretorio de entrada
|
|
|
|
$ponteiro1 = opendir($diretorioentrada);
|
|
|
|
|
|
if (!(file_exists($diretoriosaida)))
|
|
{
|
|
mkdir($diretoriosaida);
|
|
}
|
|
// Para cada subdiretorio de submissoes (isto é, as tarefas), verifique se diretorio da questao já foi normalizado. Se não, envia
|
|
// endereço do diretorio para ser normalizado
|
|
|
|
while (($nometarefa = readdir($ponteiro1)))
|
|
{
|
|
|
|
if ( ($nometarefa<>".") && ($nometarefa<>".."))
|
|
{
|
|
|
|
$ponteiro2 = opendir($diretorioentrada.$nometarefa);
|
|
|
|
while ($submissao = readdir($ponteiro2))
|
|
{
|
|
|
|
if ( ($submissao<>".") && ($submissao<>"..") )
|
|
{
|
|
|
|
$diretoriosubm= $diretorioentrada.$nometarefa."/".$submissao."/";
|
|
$diretoriosaida= "normalizados/".$nometarefa."/";
|
|
|
|
if (!(file_exists($diretoriosaida)))
|
|
{
|
|
mkdir($diretoriosaida);
|
|
}
|
|
|
|
if (is_dir($diretoriosubm))
|
|
{
|
|
normalizaarquivo($diretoriosubm, $diretoriosaida);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
?>
|