Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Galera meu professor passou uma mega atividade, ele quer que traduza o famoso portugol para C, pode utilizar qualquer outra linguagem para fazer essa conversão exemplo.
Eu crio um Form Text ai colo o algoritmo em portugol, e converter tudo que está ali em C, eu gostaria de saber so o ponto de partida.
Se no algoritmo tem enquanto, entao aparecer na outra página while, eu até consegui fazer isso porém se eu digitar algo na frente do enquanto ele ja nao converte mais.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>$algoritmos = $_POST['algoritmo'];
$enquanto = "while";
$se = "if";
?>
<body>
<p>Conversor Algoritmos em C - Em Construção. </p>
<p>
<textarea name="textfield" cols="100" rows="10"><?
if ($algoritmos == "enquanto")
{ echo $enquanto;
}
if ($algoritmos == "se")
{ echo $se;
}
?> </textarea>
</p>
<p>
<label>
</label>
</p>
</form>
<p> </p>
</body>
</html>
Agradeço o help...
Mais eu quero fazer a conversão usando a plataforma do PHP oO...
Não precisa saber C para fazer isso, tem que saber como fazer em php para converter o "x para Y"(exemplo).
É como se fosse uma conversão de ingles para português, só que eu alimentarei as palavras manualmente.
Exemplo se eu digito: água no form, então na conversão aparecerá water, isso eu consegui fazer, mais se eu digitar um texto no form como fazer para o script achar as palavras do form e traduzir(converter).
já pensou em utilizar arrays?
algo como:
$arr = Array();
$arr['enquanto'] = 'while';
$arr['se'] = 'if';
creio que ou assim, procurando 'palavra por palavra', e varrendo com um loop. Ou então utilizando um str_replace(), sei lá..
não parei para pensar num bom algoritmo ainda, mas essas 2 idéias me vieram aqui enqnto eu lia o teu post.
O buraco é bem mais embaixo, você está querendo projetar um compilador, vai precisar de conhecimentos sobre linguagens formais, gramáticas, análise léxica, sintática e semântica, geração de código-alvo.
Não é tão simples como criar um array de palavras, isso funciona apenas para palavras e símbolos reservados. E quanto a identificadores e declarações de variáveis e funções?
A gramática do Portugol eu encontrei aqui:
:seta: http://gpt.berlios.de/manual_nodes/node7.html
A gramática do C ISO-9x está aqui:
:seta: http://www.vendian.org/mncharity/ccode/grammar/html/n2794_s.y.html
Já é um começo... obrigado, vou continuar batendo cabeça, mais agradeço a quem puder dar mais dicas.
Resolvi já adiantar um pouco de Compiladores II no semestre que vem:
Se der tempo, planejo chegar até a análise semântica.
Nossa!
Nunca pensei que seria tão extenso assim, vi que o buraco é mais em baixo msm.
Me diz uma coisa, eu tenho este form:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>
<body>
<p>Conversor Algoritmos em C - Em Construção. </p>
<form id="form1" name="form1" method="post" action="converter.php">
<p>
<textarea name="algoritmo" cols="100" rows="10"></textarea>
</p>
<p>
<label>
<input type="submit" name="Submit" value="Converter" />
</label>
</p>
</form>
<p> </p>
</body>
</html>
Como faço para o submit ser direcionado ao LexicalAnaliser.php?
Irei utilizar seu script, e mostrar na minha turma, logicamente colocando os devidos créditos.
no action (na linha do form) você coloca o endereco da pagina de processamento....
Não não, não vai adiantar só redirecionar o action para o arquivo, pois ele contém só a classe.
Dá uma olhada no meu index.php e você vai ver...
Você tem que ter algo parecido com aquilo, só que invés de usar o
$input = file_get_contents('[url="php://stdin"]php://stdin[/url]');
use:
$input = $_POST['algoritmo']
Outra coisa, esse é só o analisador léxico, sozinho não faz nada...
Precisamos implementar ainda os analisadores sintático e semântico e o gerador de código-alvo.
Fiz o direcionamento e deu certo... porém está apresentando este erro.
Warning: preg_match() [function.preg-match]: Compilation failed: nothing to repeat at offset 11 in C:\AppServ\www\conversor\LexicalAnaliser.php on line 482
Já olhei na linha 482, porém nao entendo muito de php não sei qual é o motivo deste...
Eu ainda não testei no Windows, assim que possível, eu texto e posto o feedback...
Ai galera, depois de um tempo parado, hoje tentei mexer em algo, e fiz isto:
Só que... há vários problemas, se tentarem converter um algoritmo simples, converterá 50%.
Mais há problemas...
Se você colocar uma das palavras que fazem parte da gramática do portugol, o script irá converter também...
Alguem sabe de algo para que o script não converta as palavras que esteja dentro do parenteses com aspas exemplo:
escreva("Hello World!").
Agradeço. a todos que ajudarem.
<?php
//Loop de procura das palavras e simbolos do algoritmos, e a conversão.
$procura = array(
'<-' => '=',
'inicio' => 'main()
{',
'enquanto' => 'while',
'caso' => 'case',
'escreva' => 'printf',
'Escreva' => 'printf',
'se ' => 'if',
'entao' => '{',
'senao' => '} else {',
'fimse' => '}',
'leia' => 'scanf',
'fimalgoritmo' => '}'
);
//Imprime as palavras convertidas e o algoritmo.
//stripslashes, foi utilizado pois onde o magic_quote estiver on, ele colocará uma contrabarra ao lado da aspa ou do apóstrofo.
echo stripslashes(strtr("$algoritmos",$procura));
?>Cara, parta do que eu te falei...
:seta: https://github.com/henriquejpb/projeto_compilador_alg2c
Dei uma mexida pra corrigir alguns problemas.
Partindo disso aí, pelo menos vocẽ consegue obter todos os tokens do programa. Entretanto, sei um analisador sintático, um semântico e um gerador de códigos vai ficar impossível.
Como traduzir
var
x : inteiro
para
int x;
?
Compiladores não são tão triviais, sugiro que procure algum livro, qualquer um.
Além disso, existem ferramentas que te ajudam no processo:
Iterando sobre arrays você não chegará a lugar nenhum.
mas aki eh php, ja postou no forum de C?