Advertisement
Guest User

Untitled

a guest
Sep 1st, 2015
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.73 KB | None | 0 0
  1. public class Main {
  2.  
  3.     // busca char em vetor e retorna indice
  4.     public static int get_char_ref (char[] vet, char ref ){
  5.         for (int i=0; i<vet.length; i++ ){
  6.             if (vet[i] == ref){
  7.                 return i;
  8.             }
  9.         }
  10.         return -1;
  11.     }
  12.  
  13.     // busca string em vetor e retorna indice
  14.     public static int get_string_ref (String[] vet, String ref ){
  15.         for (int i=0; i<vet.length; i++ ){
  16.             if (vet[i].equals(ref)){
  17.                 return i;
  18.             }
  19.         }
  20.         return -1;
  21.     }
  22.  
  23.    
  24.  
  25.     //retorna o próximo estado, dado o estado atual e o símbolo lido
  26.     public static int proximo_estado(char[] alfabeto, int[][] matriz,int estado_atual,char simbolo){
  27.         int simbol_indice = get_char_ref(alfabeto, simbolo);
  28.         if (simbol_indice != -1){
  29.             return matriz[estado_atual][simbol_indice];
  30.         }else{
  31.             return -1;
  32.         }
  33.     }
  34.  
  35.     /*
  36.      * @param args the command line arguments
  37.      */
  38.     public static void main(String[] args) {
  39.         //instancia e usa objeto que captura código-fonte de páginas Web
  40.         CapturaRecursosWeb crw = new CapturaRecursosWeb();
  41.         crw.getListaRecursos().add("http://www.terra.com.br");
  42.         ArrayList<String> listaCodigos = crw.carregarRecursos();
  43.  
  44.         String codigoHTML = listaCodigos.get(0);
  45.  
  46.         //mapa do alfabeto
  47.         char[] alfabeto = new char[10];
  48.         alfabeto[0] = '0';
  49.         alfabeto[1] = '1';
  50.         alfabeto[2] = '2';
  51.         alfabeto[3] = '3';
  52.         alfabeto[4] = '4';
  53.         alfabeto[5] = '5';
  54.         alfabeto[6] = '6';
  55.         alfabeto[7] = '7';
  56.         alfabeto[8] = '8';
  57.         alfabeto[9] = '9';
  58.  
  59.  
  60.         //mapa de estados
  61.         String[] estados = new String[3];
  62.         estados[0] = "q0";
  63.         estados[1] = "q1";
  64.         estados[2] = "q2";
  65.  
  66.         String estado_inicial = "q0";
  67.  
  68.         //estados finais
  69.         String[] estados_finais = new String[1];
  70.         estados_finais[0] = "q2";
  71.  
  72.         //tabela de transição de AFD para reconhecimento números de dois dígitos
  73.         int[][] matriz = new int[3][10];
  74.         //transições de q0
  75.         matriz[get_string_ref(estados, "q0")][get_char_ref(alfabeto, '0')] = get_string_ref(estados, "q1");
  76.         matriz[get_string_ref(estados, "q0")][get_char_ref(alfabeto, '1')] = get_string_ref(estados, "q1");
  77.         matriz[get_string_ref(estados, "q0")][get_char_ref(alfabeto, '2')] = get_string_ref(estados, "q1");
  78.         matriz[get_string_ref(estados, "q0")][get_char_ref(alfabeto, '3')] = get_string_ref(estados, "q1");
  79.         matriz[get_string_ref(estados, "q0")][get_char_ref(alfabeto, '4')] = get_string_ref(estados, "q1");
  80.         matriz[get_string_ref(estados, "q0")][get_char_ref(alfabeto, '5')] = get_string_ref(estados, "q1");
  81.         matriz[get_string_ref(estados, "q0")][get_char_ref(alfabeto, '6')] = get_string_ref(estados, "q1");
  82.         matriz[get_string_ref(estados, "q0")][get_char_ref(alfabeto, '7')] = get_string_ref(estados, "q1");
  83.         matriz[get_string_ref(estados, "q0")][get_char_ref(alfabeto, '8')] = get_string_ref(estados, "q1");
  84.         matriz[get_string_ref(estados, "q0")][get_char_ref(alfabeto, '9')] = get_string_ref(estados, "q1");
  85.         //transições de q1
  86.         matriz[get_string_ref(estados, "q1")][get_char_ref(alfabeto, '0')] = get_string_ref(estados, "q2");
  87.         matriz[get_string_ref(estados, "q1")][get_char_ref(alfabeto, '1')] = get_string_ref(estados, "q2");
  88.         matriz[get_string_ref(estados, "q1")][get_char_ref(alfabeto, '2')] = get_string_ref(estados, "q2");
  89.         matriz[get_string_ref(estados, "q1")][get_char_ref(alfabeto, '3')] = get_string_ref(estados, "q2");
  90.         matriz[get_string_ref(estados, "q1")][get_char_ref(alfabeto, '4')] = get_string_ref(estados, "q2");
  91.         matriz[get_string_ref(estados, "q1")][get_char_ref(alfabeto, '5')] = get_string_ref(estados, "q2");
  92.         matriz[get_string_ref(estados, "q1")][get_char_ref(alfabeto, '6')] = get_string_ref(estados, "q2");
  93.         matriz[get_string_ref(estados, "q1")][get_char_ref(alfabeto, '7')] = get_string_ref(estados, "q2");
  94.         matriz[get_string_ref(estados, "q1")][get_char_ref(alfabeto, '8')] = get_string_ref(estados, "q2");
  95.         matriz[get_string_ref(estados, "q1")][get_char_ref(alfabeto, '9')] = get_string_ref(estados, "q2");
  96.         //transições de q2
  97.         matriz[get_string_ref(estados, "q2")][get_char_ref(alfabeto, '0')] = -1;
  98.         matriz[get_string_ref(estados, "q2")][get_char_ref(alfabeto, '1')] = -1;
  99.         matriz[get_string_ref(estados, "q2")][get_char_ref(alfabeto, '2')] = -1;
  100.         matriz[get_string_ref(estados, "q2")][get_char_ref(alfabeto, '3')] = -1;
  101.         matriz[get_string_ref(estados, "q2")][get_char_ref(alfabeto, '4')] = -1;
  102.         matriz[get_string_ref(estados, "q2")][get_char_ref(alfabeto, '5')] = -1;
  103.         matriz[get_string_ref(estados, "q2")][get_char_ref(alfabeto, '6')] = -1;
  104.         matriz[get_string_ref(estados, "q2")][get_char_ref(alfabeto, '7')] = -1;
  105.         matriz[get_string_ref(estados, "q2")][get_char_ref(alfabeto, '8')] = -1;
  106.         matriz[get_string_ref(estados, "q2")][get_char_ref(alfabeto, '9')] = -1;
  107.  
  108.        
  109.         int estado = get_string_ref (estados, estado_inicial);
  110.         int estado_anterior = -1;
  111.         ArrayList<String> palavras_reconhecidas = new ArrayList();
  112.  
  113.  
  114.         String palavra = "";
  115.  
  116.         //varre o código-fonte de um código
  117.         for (int i=0; i<codigoHTML.length(); i++){
  118.  
  119.             estado_anterior = estado;
  120.             estado = proximo_estado(alfabeto, matriz, estado, codigoHTML.charAt(i));
  121.             //se o não há transição
  122.             if (estado == -1){
  123.                 //pega estado inicial
  124.                 estado = get_string_ref(estados, estado_inicial);
  125.                 // se o estado anterior foi um estado final
  126.                 if (get_string_ref(estados_finais, estados[estado_anterior]) != -1){
  127.                     //se a palavra não é vazia adiciona palavra reconhecida
  128.                     if ( ! palavra.equals("")){
  129.                         palavras_reconhecidas.add(palavra);
  130.                     }
  131.                     // se ao analisar este caracter não houve transição
  132.                     // teste-o novamente, considerando que o estado seja inicial
  133.                     i--;
  134.                 }
  135.                 //zera palavra
  136.                 palavra = "";
  137.                
  138.             }else{
  139.                 //se houver transição válida, adiciona caracter a palavra
  140.                 palavra += codigoHTML.charAt(i);
  141.             }
  142.         }
  143.  
  144.  
  145.         //foreach no Java para exibir todas as palavras reconhecidas
  146.         for (String p: palavras_reconhecidas){
  147.             System.out.println (p);
  148.         }
  149.  
  150.  
  151.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement