All pastes #597910 Raw Edit

AutomatoReais

public text v1 · immutable
#597910 ·published 2007-06-30 22:21 UTC
rendered paste body
/*Esse programa implementa um autômato que reconhece uma série de caracteres que representam os números reais.
 *Sintaxe:
 *	números aceitos: 0 - 9;
 *	Símbolos aceitos: "-", ".", "E";
 *
 *O Autômato reconhece números iniciados ou terminados por "."
 *O sinal de "+" é implícito.
 *O Expoente do número reconhecido pelo autômato pode ser negativo e/ou decimal.   
 */

import javax.swing.JOptionPane;


public class AutomatoReais {

	public static void main(String[] args) {
	
		int estado, indice;
		String input;
		char simbol;
		/* Agora a declaração do array.
		 * Abaixo, estão os valores da tabela de transição para o autômato descrito.
		 * O valor -99 é o inteiro que refere ao estado de erro.
		 * O valor 0 é o inteiro que refere ao Estado Final.
		 */
		int tabEstados[][] = {
				{-99, -99, -99, -99, -99},
				{  3,   2,   4, -99, -99},
				{-99,   2,   5,   6,   0},
				{-99,   2,   4, -99, -99},
				{-99,   5, -99, -99, -99},
				{-99,   5, -99,   6,   0},
				{  7,   8,   9, -99, -99},
				{-99,   8,   9, -99, -99},
				{-99,   8,  10, -99,   0},
				{-99,  10, -99, -99, -99},
				{-99,  10, -99, -99,   0}
		};
		/* A primeira linha do Array tabEstados está preenchida com "estados de erro
		 * para que os indices das linhas coincidam com os indices dos estados: linha 1, estado 1.
		 * O estado 1 (linha 1) é o estado inicial.
		 */
		
		
		JOptionPane.showMessageDialog(null, "Esse Automato reconhece numeros reais.\n\nSua sintaxe é:\n Digito: 0 - 9\n Operadores: -, E, . (pt decimal)\n\nO reconhecimento de um numero positivo está implícito, sem necessidade de acréscimo de sinal.");
		input = JOptionPane.showInputDialog("Informe a sequencia de digitos que compoe seu numero real.");
		
		input += "%";
		
		indice = 0; //essa variável é para auxiliar a leitura da cadeia de entrada.
		
		JOptionPane.showMessageDialog (null, "Essa foi é a string informada, com o marcador de final de cadeia: " + "'" + input + "'" );
		
		simbol = input.charAt(indice);
		System.out.println(simbol);
		
		estado = 1;
				
		/*A partir daqui temos os testes para validar a entrada
		 * Note que na tabela anterior, temos:
		 * Linhas = estados (linha 1, estado Q1; linha 2, estado Q2 etc).
		 * Colunas = símbolos:
		 * 	0 = hífen
		 * 	1 = dígito
		 * 	2 = ponto
		 * 	3 = E
		 * 	4 = Final de Cadeia.
		 */
		
		while (simbol !='%') {
			switch (simbol) {
		
				case '-' :
					estado = tabEstados[estado][0];
								
				case '.' :
					estado = tabEstados[estado][2];
					
					
				case 'E' :
					estado = tabEstados[estado][3];
										
				case '0' :
					estado = tabEstados[estado][1];
										
				case '1' :
					estado = tabEstados[estado][1];
										
				case '2' :
					estado = tabEstados[estado][1];
										
				case '3' :
					estado = tabEstados[estado][1];
									
				case '4' :
					estado = tabEstados[estado][1];
										
				case '5' :
					estado = tabEstados[estado][1];
										
				case '6' :
					estado = tabEstados[estado][1];
										
				case '7' :
					estado = tabEstados[estado][1];
										
				case '8' :
					estado = tabEstados[estado][1];
										
				case '9' :
					estado = tabEstados[estado][1];
				
				System.out.println (estado);
			}
			if (estado == -99) break;
			if (estado == 0) break;
			indice++;
			simbol = input.charAt(indice);
		}
		
		if (simbol == '%') {
			
			if (tabEstados[estado][4] == -99) System.out.println ("Fudeu");
			if (tabEstados[estado][4] == 0) System.out.println ("Deu!!");
		}
				
		}
}