Boa tarde, bom pela milésima vez venho no fórum perturbar vocês com minhas perguntas, mas espero que em breve eu seja mais participativo nas respostas que nas perguntas… rs
Bom estou treinando leitura e gravação de arquivos em Java, então pensei em fazer um exercício que converta um arquivo .txt em português estruturado para código Java ex:
Algoritimo Soma
var numero1 Inteiro
var numero2 Inteiro
var resultado Inteiro
Inicio
Escreva “entrar com o 1º numero”
Ler numero1
Escreva “entrar com o 2º numero”
Ler numero2
numero1 + numero2 = resultado
Escreva “o resultado da soma é: “ resultado
Fim
então leio este arquivo, palavra por palavra e substituo pelo código em Java:
para ler usei o BufferedReader e o Scanner (variavel.next())
Vejo se a primeira palavra é “Algorito” se for substituo por “public class” ou só “class” e somo com a segunda variável, depois faço o mesmo com a variável… e quando aparecer “Inicio” eu coloco o “public static void main (String [] args)”… fácil né…
só que para mim está muito complicado… só consegui mudar e ler a palavra Algoritimo e minha lógica esta completamente errada…
alguém teria um programa parecido com isso? Ou alguma ajuda… já estou desistindo do problema, mas minha curiosidade para saber a solução não deixa… rsrs
cara tah ai uma forma simples do que vc tah querendo em java …
se vc naum enteder alguma coisa eu te explico!
import javax.swing.*;
public class soma
{
public static void main(String args[])
{
int n1,n2;
n1=Integer.parseInt(JOptionPane.showInputDialog(null," Dígite o 1° número ","SOMA",JOptionPane.QUESTION_MESSAGE));
n2=Integer.parseInt(JOptionPane.showInputDialog(null," Dígite o 2° número ","SOMA",JOptionPane.QUESTION_MESSAGE));
JOptionPane.showMessageDialog(null,"A soma é "+(n1+n2),"ATENÇÂO",JOptionPane.INFORMATION_MESSAGE);
}
}
uma pergunta, você quer a equivalencia do seu pseudo código
para código java, mas isso feito por um programa que leia
um arquivo txt, no qual possui um pseudo código, sendo
a saida dessa leitura um código fonte java correspondente,
equivalente ao do pseudo código?
se for algo do genero isso é matéria de Compiladores e
o que tu está querendo é um programa: Tradutor…
Opa desculpa a demora pessoal… não seria bem o compilador… seria um “tradutor” do pseudo código para código Java… eu crio um programa no bloco de notas com o pseudo código .txt e uso um programa em Java para converter ele para código Java pronto para ser compilado…
Não sei se expliquei ou piorei a coisa… rsrs…
Eu esscrevi o pseudo código e me responderam em Java… a idéia do programa é essa…
Valeu a atenção…
Para mim esta bem complicado
Cara, tu está querendo fazer água, não? Tipo portugol não tem a mínima estrutura, organização, tipo você pode definir a mesma ação ésimas formas possíveis…
… sugiro que estude lógica de programação, comece por C, não C++ muito menos C# para depois começar com java. A manha de estudar lógica de programação não é para você aprender, que lógica ninguém aprende, mas para despertar em você como funciona a programação. Apartir daí leia alguns livrinhos de iniciação e post toda dúvida no PJ. Pronto você terá um bom futuro, desde que se empenhe, é claro.
Não estou querendo fazer água, estou apenas treinando lógica e programação, eu ainda não trabalho na área e meu professor da facu é fraco então este é um dos meios que acho para treinar o java…
vários professores ensinam o portugol de uma forma, mas tem coisas que são padrões e o que não for é só colocar regras… tipo:
O nome da classe vem depois da palavra “Algorimo”… só ir separando palavra por palavra e substituindo … achei um exemplo na net de um programa assim.
Vou postar o link… http://paginas.ispgaya.pt/~drf/pagina%20para%20o%20tipe/classes/Applet1.php
mas só postei a duvida pq achei o tema interessante…
valeu a atenção
Entendi bem o que estás querendo fazer. Só que acho que isso seria pra uma pessoa bem avançada.
Não que esteja duvidando do seu conhecimento, nem muito menos da sua capacidade. É muito interessante o seu programa que estás querendo desenvolver. Estás querendo fazer uma espécie de PascalZim avançado. Que em vez de reconhecer comandos de Pascal reconhecesse diretamente os algoritmos feitos em Portugol. Bom, não sou a pessoa indicada para resolver o seu problema. Mas se conseguires fazer isso me manda o código fonte. E com certeza se conseguires fazer isso vais ganhar um bom trocado.
bom primeiro fazer isso que tu quer um tradutor de pseudo codigo
para java é possivel sim, o porem é que envolve muitos conceitos
da matéria de compiladores os quais são necessários para construir
um tradutor…
cara tu já teve a materia de compiladores?
nessa materia você vai ver o tema de como que um compilador lê o código fonte, no caso esse interpretador é o mesmo genero de algoritmo usado
tanto por um compilador ou por um tradutor de codigo para outro
Po não imaginava que era tão complicado… sabia que o programa seria extenso, mas não tão complicado… minha ideia era bem simples só para aprender a trabalhar com arquivos…
tem um jeito de abrir um arquivo de texto, varrer ele e onde tiver a palavra ELE substitui por ELA… a idéia de inicio desse “compilador” seria essa… varrer o texto e ir substituindo palavras no portugol para código java… eu não sei ler palavra por palavra… tem um comando no java que faz isso né… o Buffered
então saiu mais ou menos um tradutor de portugol para código java, vou postar o código, mas está bem primário, tem que dar uma incrementada…
O algoritmo tem que seguir meio que um padrão então vou colocar o padrão que usei…
import java.io.*;
import java.util.*;
public class Tradutor{
public static void main(String[] args) throws IOException{
String nome=new String();
Scanner tec=new Scanner(System.in);
System.out.print("Arquivo:");
nome=tec.next();
Scanner arq=new Scanner(new BufferedReader(new FileReader(nome+".txt")));
String comando=new String();
String nomeArq=new String();
File saidaJava = new File(comando+".java");
FileWriter gravar = new FileWriter(new File(comando+".java"),true);
PrintWriter saida = new PrintWriter(gravar,true);
while (arq.hasNext()){
String aux=new String();
aux=comando;// Essa variável foi criada para receber e auxiliar o dado armazenado na variável comando para algumas condições
comando=arq.next();
if (comando.compareToIgnoreCase("Algoritimo")==0){
comando=arq.next();
System.out.println("public class " + comando + " {");
saida.println("public class " + comando + " {");
}
if (comando.compareToIgnoreCase("var")==0){
comando=arq.next();//agora comando recebe linha
String nomevar=new String();
nomevar=comando;//nomevar recebe linha
comando=arq.next();//comando recebe :
comando=arq.next();//comando recebe inteiro
String tipo=new String();
String novotipo=new String();
if (comando.compareToIgnoreCase("inteiro")==0){
novotipo="int ";
System.out.println("static " + novotipo + nomevar + ";");
saida.println("static " + novotipo + nomevar + ";\n");
}
if (comando.compareToIgnoreCase("string")==0){
novotipo="String ";
System.out.println("static " + novotipo + nomevar + ";");
saida.println("static " + novotipo + nomevar + ";");
}
if (comando.compareToIgnoreCase("boolean")==0){
novotipo="boolean ";
System.out.println("static " + novotipo + nomevar + ";");
saida.println("static " + novotipo + nomevar + ";");
}
}
if (comando.compareToIgnoreCase("inicio")==0){
comando=arq.next();
System.out.println("public static void main(String[] args) {");
saida.println("public static void main(String[] args) {");
}
if (comando.compareToIgnoreCase("escreva")==0){
System.out.print(" System.out.print( ");
saida.println(" System.out.print( ");
int cont=0;
while (cont <= 1){
comando=arq.next();
System.out.print(comando + " ");
saida.println(comando + " ");
if (comando.compareToIgnoreCase(";")==0){
cont=2;
}
}
System.out.println(" );");
saida.println(" );");
}
if (comando.compareToIgnoreCase("<-")==0){
System.out.print(aux + " = ");
saida.println(aux + " = ");
int cont=0;
while (cont <= 1){
comando=arq.next();
System.out.print(comando);
saida.println(comando);
if (comando.compareToIgnoreCase(";")==0){
cont=2;
}
}
System.out.println(" ");//coloquei so p jogar a outra linha p baixo
saida.println(" ");
}
if (comando.compareToIgnoreCase("para")==0){
comando=arq.next();
String para=new String();
para=comando;
comando=arq.next();
if (comando.compareToIgnoreCase("de")==0){
comando=arq.next();
String iniciopara=new String();
iniciopara=comando;
comando=arq.next();
if (comando.compareToIgnoreCase("ate")==0){
comando=arq.next();
String fimpara=new String();
fimpara=comando;
comando=arq.next();
if (comando.compareToIgnoreCase("passo")==0){
comando=arq.next();
comando=arq.next();
}
if (comando.compareToIgnoreCase("faca")==0){
System.out.println(" for (" + para + " = " + iniciopara + "; " + para + " <= " + fimpara + "; " + para + " += " + iniciopara + ") {");
saida.println(" for (" + para + " = " + iniciopara + "; " + para + " <= " + fimpara + "; " + para + " += " + iniciopara + ") {");
}
}
}
else{
System.out.println("Erro de comando!");
saida.println("Erro de comando!");
}
}
if (comando.compareToIgnoreCase("fimpara")==0){
System.out.println("}");
saida.println("}");
}
if (comando.compareToIgnoreCase("fim")==0){
System.out.println("}");
saida.println("}");
}
}
saida.close();
gravar.close();
arq.close();
}
}
Agora o aquirvo .txt que vamos converter para .java…
obs.: O arquivo deve ficar na mesma pasta q o programa e só escreva o nome do arquivo, sem a extensão e procura salvar o arquivo com o nome da classe… no caso Tabuada.txt
Algoritimo Tabuada
var linha : inteiro
var coluna : inteiro
var resultado : Inteiro
Inicio
Para linha de 1 ate 10 faca
Escreva “Tabuada do:”,linha ;
Para coluna de 1 ate 10 passo 1 faca
resultado <- linhacoluna ;
Escreva linha,"",coluna,"=",resultado ;
Fimpara
fimpara
fim
podemos ir melhorando este programa e ir postando o novo codigo aqui no forum…
falou e boa semana