:oops: Estou com um problemão, tenho que construir um compilador e não sei nem como começar…
Gostaria de saber como devo declarar as variáveis, por exemplo:
letra = a | b| c | …| z | A | B| C | …| Z ;
char digito = 0 | 1 | 2 | … | 9;
É preciso criar alguma classe?
Preciso Muito de Ajuda
Um Forte Abraço - Sheyla_DF 
Olá, Sheyla_DF,
Construir um compilador é uma tarefa monumental.
Por favor, explique o que você realmente deseja: um compilador de verdade? Um programinha de demonstração? Para que possamos lhe ajudar.
A sigla ANTRL (http://www.antlr.org/) tem tudo a ver.
T+
Sei que não será uma tarefa fácil construir um compilador, por isso quero fazer cada passo de uma vez, o primeiro será construir o analisador léxico, o programa deve receber um arquivo e verificar quais caracteres representam as palavras reservadas, os números, os símbolos, etc…
:oops: Mas infelizmente, não sei nem como começar… Fiz um programinha que lê um arquivo texto, mas não verifica os caracteres, simplismente copia o texto para o outro quadro como uma STRING.
Estou precisando de muita AJUDA :roll: :?:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class Comp5 extends JFrame {
private GridBagLayout gbLayout;
Container c = getContentPane();
private JTextArea t1, t2;
private JButton comp, abrir;
private File file;
private cLeitor teste;
private File arquivo; // arquivo que será lido
private String conteudo; // string para armazenar o arquivo texto lido
public Comp5()
{
super ("Organização de Computadores IV");
GridBagConstraints gbConstraints = new GridBagConstraints();
gbLayout = new GridBagLayout();
c.setLayout( gbLayout );
gbConstraints.fill = GridBagConstraints.CENTER;
Box te1 = Box. createVerticalBox();
Box te2 = Box. createVerticalBox();
Box b = Box. createVerticalBox();
//criar área de texto 1
t1 = new JTextArea (29,25); //(linha, coluna)
te1.add(new JScrollPane (t1));
c.add(te1);
//criar botão abrir
abrir = new JButton("Abrir >>");
abrir.addActionListener( new ActionListener()
{
public void actionPerformed (ActionEvent e)
{
openFile();
teste = new cLeitor(file);
t1.setText(String.valueOf(teste.getConteudo()));
}
});
b.add(abrir);
//criar botão compilar
comp = new JButton("Compilar >>");
comp.addActionListener( new ActionListener()
{
public void actionPerformed (ActionEvent e)
{
t2.setText(t1.getText());
}
});
b.add(comp);
c.add(b); //Caixa colocada no Centro da Janela
//criar área de texto 2
t2 = new JTextArea (29,25);
te2.add(new JScrollPane (t2));
c.add(te2);
//Container c = getContentPane();
setSize(725,500);// configura o tamanho da janela
show(); //exibe a janela
}
private void openFile()
{
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(
JFileChooser.FILES_ONLY );
int result = fileChooser.showOpenDialog( this );
// user clicked Cancel button on dialog
if ( result == JFileChooser.CANCEL_OPTION )
file = null;
else
file = fileChooser.getSelectedFile();
}
public class cLeitor {
private File arquivo; // arquivo que será lido
private String conteudo; // string para armazenar o arquivo texto lido
/** arquivo a ser aberto
* utilizei um JFileChooser pra localizar o arquivo
*/
public cLeitor(File arq) {
setArquivo( arq );
setConteudo(null);
if(this.arquivo != null) {
leArquivo();
}
}
// contrutor nulo
public cLeitor() {
setArquivo(null);
setConteudo(null);
}
// método para determinar o arquivo que será lido o seu conteudo
public void setArquivo(File arquivo) {
this.arquivo = arquivo;
}
// método que retorna o arquivo que está sendo manipulado
public File getArquivo() {
return arquivo;
}
// por formalismo de OO tem esse método( no caso não utilizado )
public void setConteudo(String conteudo) {
this.conteudo = conteudo;
}
// com esse método vc pega a String montada do arquivo lido
public String getConteudo() {
return conteudo;
}
// método de leitura do arquivo texto
public void leArquivo() {
try {
File entrada = arquivo;
BufferedReader buffer = new BufferedReader(new FileReader(entrada));
String texto = "";
String linha = "";
do {
linha = buffer.readLine();
if(linha != null) {
texto += linha + " \n";
}
}while(linha != null);
setConteudo(texto);
} catch( IOException e ) {
JOptionPane.showMessageDialog( null, "Não foi possivel ler o arquivo.", "Aviso", JOptionPane.INFORMATION_MESSAGE);
}
}
}
public static void main (String arg[])
{
Comp5 app = new Comp5();
app.addWindowListener( new WindowAdapter()
{
public void windwClosing (WindowEvent e)
{
System.exit(0);
}
});
}
}
Sheyla…
Recentemente navegando pelo site do submarino encontrei o seguinte livro:
Como Construir um Compilador: Utilizando Ferramentas JavaMARCIO EDUARDO DELAMARO
Eu terei a disciplina de compiladores ano que vem…pretendo fazer em Java tb. Pessoal aqui costuma usar DELPHI para implementar o compilador nessa disciplina.
Sheyla…vc está fazendo esse trabalho sozinha???No meu curso esse trabalho de implementação de um compilador é feito em grupo.
Bom…esse ano estou tendo a experiência de fazer as implementações de CG usando Java. Depois de descobrir +/- como trabalhar com uma BufferedImage estamos implementando os algoritmos básicos de construção de retas, circunferências, elipses…não é facil HeHeHe. Principalmente pq eu comecei a aprender Java faz uns 2, 3 meses.