Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marcelo Pessoa

Portugol para C

Recommended Posts

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>
<? 
//recebendo dados do form.
$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...

Compartilhar este post


Link para o post
Compartilhar em outros sites

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).

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvi já adiantar um pouco de Compiladores II no semestre que vem:

:seta: http://henriquebarcelos.in/blog/2012/04/15/construindo-um-compilador-portugol-para-c-em-php-analisador-lexico/

 

Se der tempo, planejo chegar até a análise semântica.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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...

Compartilhar este post


Link para o post
Compartilhar em outros sites

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));

?> 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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:

  • Lex: analisador léxico
  • Yacc: analisador sintático

Iterando sobre arrays você não chegará a lugar nenhum.

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.