All pastes #420515 Raw Edit

Something

public text v1 · immutable
·published 2007-04-02 05:54 UTC
rendered paste body
/**
 * 
 */
package exercicios.johann;

import exercicios.johann.*;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.StringReader;
import java.io.FileReader;
import java.io.FileWriter;

/**
 * Programa Analisador Lexico
 * 
 * @author carapan
 * 
 */



public class AnalisadorLexico {
	public enum TipoEstado {
		EINICIO, ECOMENTARIO, ERESERVADA, ENUM, EFIM,EOPERADOR
	}

	public void executar(InputStream in) throws IOException {
		Reader reader = new InputStreamReader(in);
		executar(reader);
	}


        
        
        

	private void executar(Reader reader) throws IOException {
		
                
                Gravador saida = new Gravador();
                boolean primeiraLeitura = true;
                int n;
                TipoEstado estado = TipoEstado.EINICIO;
                
                Palavra palavra = new Palavra();
                Operador operador = new Operador();
                String concatenador = "";
                String numero = "";
                String op = "";
                String atribuicao = "";

		while (-1 != (n = reader.read())) {
			char ch = (char) n;
			
			TipoEstado estadoOriginal = estado;

			switch (estado) {
			case EINICIO: {
				if (Character.isLetter(ch)) {
					estado = TipoEstado.ERESERVADA;
                                        if (primeiraLeitura) {
                                            concatenador = concatenador + ch;
                                            primeiraLeitura = false;
                                        }
                                       
                                        
				} else if (Character.isDigit(ch)) {
					estado = TipoEstado.ENUM;
                                        numero = numero + ch;
				} else if ('{' == ch) {
					estado = TipoEstado.ECOMENTARIO;
				}
                                else if (';' == ch)
                                        estado = TipoEstado.EINICIO;
                                else if (operador.isOperador(op = "" + ch)) {
                                            estado = TipoEstado.EOPERADOR;
                                          
                                       
                               }
                                    
                                        
				break;
			}
			case ECOMENTARIO: {
				if (ch == '}')
					estado = TipoEstado.EINICIO;
				break;
			}
			case ERESERVADA: {
				//estado = TipoEstado.EFIM;
                                
                                if (ch != ';')
                                    concatenador = concatenador + ch;
                                
                                if (palavra.isReservada(concatenador)) {
                                    System.out.print("Palavra Reservada: " + concatenador + "\n");
                                    saida.escreve("Palavra Reservada: " + concatenador);
                                    concatenador = "";
                                    estado = TipoEstado.EINICIO;
                                    primeiraLeitura = true;
                                    
                                    
                                }
				
                                if (!Character.isLetter(ch)) {
                                    if (ch != ';') {
                                        estado = TipoEstado.EINICIO;
                                        primeiraLeitura = true;
                                        concatenador = "";
                                    }
                                }
				break;
			}
			case ENUM: {
                                
                                if (ch != ';')
                                    numero = numero + ch;
				if (!Character.isDigit(ch)) {
					estado = TipoEstado.EINICIO;
                                        saida.escreve("Numero: " + numero);
                                        numero = "";
				}
				break;
			}
                        case EOPERADOR: {
                            
                           if (!op.equals(":")) {
                                if (":=".equals(atribuicao + op )) {
                                    saida.escreve("Operador: " + atribuicao);
                                    atribuicao = "";
                                    estado = TipoEstado.EINICIO;
                                }
                                else {
                                saida.escreve("Operador: " + op);
                                estado = TipoEstado.EINICIO;
                                }
                           }
                            else if (op.equals(":")) {
                                atribuicao = atribuicao + op;
                                estado = TipoEstado.EINICIO;    
                            }
                        break;
                        }
			case EFIM: {
                            
				break;
			}
                        }
			
			if (estado != estadoOriginal) {
				System.out.print(" * " + estadoOriginal.name() + " -> " + estado.name() + " ");
                                
			}
				
			System.out.println("ch: " + ch);
		}
	}
        


	/**
	 * @param args
	 * @throws IOException
	 */
	public static void main(String[] args) throws IOException {
		new AnalisadorLexico().executar(new FileReader("entrada.txt"));
	}
}