Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Main {
- // busca char em vetor e retorna indice
- public static int get_char_ref (char[] vet, char ref ){
- for (int i=0; i<vet.length; i++ ){
- if (vet[i] == ref){
- return i;
- }
- }
- return -1;
- }
- // busca string em vetor e retorna indice
- public static int get_string_ref (String[] vet, String ref ){
- for (int i=0; i<vet.length; i++ ){
- if (vet[i].equals(ref)){
- return i;
- }
- }
- return -1;
- }
- //retorna o próximo estado, dado o estado atual e o símbolo lido
- public static int proximo_estado(char[] alfabeto, int[][] matriz,int estado_atual,char simbolo){
- int simbol_indice = get_char_ref(alfabeto, simbolo);
- if (simbol_indice != -1){
- return matriz[estado_atual][simbol_indice];
- }else{
- return -1;
- }
- }
- /*
- * @param args the command line arguments
- */
- public static void main(String[] args) {
- //instancia e usa objeto que captura código-fonte de páginas Web
- CapturaRecursosWeb crw = new CapturaRecursosWeb();
- crw.getListaRecursos().add("http://www.terra.com.br");
- ArrayList<String> listaCodigos = crw.carregarRecursos();
- String codigoHTML = listaCodigos.get(0);
- //mapa do alfabeto
- char[] alfabeto = new char[10];
- alfabeto[0] = '0';
- alfabeto[1] = '1';
- alfabeto[2] = '2';
- alfabeto[3] = '3';
- alfabeto[4] = '4';
- alfabeto[5] = '5';
- alfabeto[6] = '6';
- alfabeto[7] = '7';
- alfabeto[8] = '8';
- alfabeto[9] = '9';
- //mapa de estados
- String[] estados = new String[3];
- estados[0] = "q0";
- estados[1] = "q1";
- estados[2] = "q2";
- String estado_inicial = "q0";
- //estados finais
- String[] estados_finais = new String[1];
- estados_finais[0] = "q2";
- //tabela de transição de AFD para reconhecimento números de dois dígitos
- int[][] matriz = new int[3][10];
- //transições de q0
- matriz[get_string_ref(estados, "q0")][get_char_ref(alfabeto, '0')] = get_string_ref(estados, "q1");
- matriz[get_string_ref(estados, "q0")][get_char_ref(alfabeto, '1')] = get_string_ref(estados, "q1");
- matriz[get_string_ref(estados, "q0")][get_char_ref(alfabeto, '2')] = get_string_ref(estados, "q1");
- matriz[get_string_ref(estados, "q0")][get_char_ref(alfabeto, '3')] = get_string_ref(estados, "q1");
- matriz[get_string_ref(estados, "q0")][get_char_ref(alfabeto, '4')] = get_string_ref(estados, "q1");
- matriz[get_string_ref(estados, "q0")][get_char_ref(alfabeto, '5')] = get_string_ref(estados, "q1");
- matriz[get_string_ref(estados, "q0")][get_char_ref(alfabeto, '6')] = get_string_ref(estados, "q1");
- matriz[get_string_ref(estados, "q0")][get_char_ref(alfabeto, '7')] = get_string_ref(estados, "q1");
- matriz[get_string_ref(estados, "q0")][get_char_ref(alfabeto, '8')] = get_string_ref(estados, "q1");
- matriz[get_string_ref(estados, "q0")][get_char_ref(alfabeto, '9')] = get_string_ref(estados, "q1");
- //transições de q1
- matriz[get_string_ref(estados, "q1")][get_char_ref(alfabeto, '0')] = get_string_ref(estados, "q2");
- matriz[get_string_ref(estados, "q1")][get_char_ref(alfabeto, '1')] = get_string_ref(estados, "q2");
- matriz[get_string_ref(estados, "q1")][get_char_ref(alfabeto, '2')] = get_string_ref(estados, "q2");
- matriz[get_string_ref(estados, "q1")][get_char_ref(alfabeto, '3')] = get_string_ref(estados, "q2");
- matriz[get_string_ref(estados, "q1")][get_char_ref(alfabeto, '4')] = get_string_ref(estados, "q2");
- matriz[get_string_ref(estados, "q1")][get_char_ref(alfabeto, '5')] = get_string_ref(estados, "q2");
- matriz[get_string_ref(estados, "q1")][get_char_ref(alfabeto, '6')] = get_string_ref(estados, "q2");
- matriz[get_string_ref(estados, "q1")][get_char_ref(alfabeto, '7')] = get_string_ref(estados, "q2");
- matriz[get_string_ref(estados, "q1")][get_char_ref(alfabeto, '8')] = get_string_ref(estados, "q2");
- matriz[get_string_ref(estados, "q1")][get_char_ref(alfabeto, '9')] = get_string_ref(estados, "q2");
- //transições de q2
- matriz[get_string_ref(estados, "q2")][get_char_ref(alfabeto, '0')] = -1;
- matriz[get_string_ref(estados, "q2")][get_char_ref(alfabeto, '1')] = -1;
- matriz[get_string_ref(estados, "q2")][get_char_ref(alfabeto, '2')] = -1;
- matriz[get_string_ref(estados, "q2")][get_char_ref(alfabeto, '3')] = -1;
- matriz[get_string_ref(estados, "q2")][get_char_ref(alfabeto, '4')] = -1;
- matriz[get_string_ref(estados, "q2")][get_char_ref(alfabeto, '5')] = -1;
- matriz[get_string_ref(estados, "q2")][get_char_ref(alfabeto, '6')] = -1;
- matriz[get_string_ref(estados, "q2")][get_char_ref(alfabeto, '7')] = -1;
- matriz[get_string_ref(estados, "q2")][get_char_ref(alfabeto, '8')] = -1;
- matriz[get_string_ref(estados, "q2")][get_char_ref(alfabeto, '9')] = -1;
- int estado = get_string_ref (estados, estado_inicial);
- int estado_anterior = -1;
- ArrayList<String> palavras_reconhecidas = new ArrayList();
- String palavra = "";
- //varre o código-fonte de um código
- for (int i=0; i<codigoHTML.length(); i++){
- estado_anterior = estado;
- estado = proximo_estado(alfabeto, matriz, estado, codigoHTML.charAt(i));
- //se o não há transição
- if (estado == -1){
- //pega estado inicial
- estado = get_string_ref(estados, estado_inicial);
- // se o estado anterior foi um estado final
- if (get_string_ref(estados_finais, estados[estado_anterior]) != -1){
- //se a palavra não é vazia adiciona palavra reconhecida
- if ( ! palavra.equals("")){
- palavras_reconhecidas.add(palavra);
- }
- // se ao analisar este caracter não houve transição
- // teste-o novamente, considerando que o estado seja inicial
- i--;
- }
- //zera palavra
- palavra = "";
- }else{
- //se houver transição válida, adiciona caracter a palavra
- palavra += codigoHTML.charAt(i);
- }
- }
- //foreach no Java para exibir todas as palavras reconhecidas
- for (String p: palavras_reconhecidas){
- System.out.println (p);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement