Analisador Lexico- Como Declarar as Variáveis?

: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 :cry:

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+

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