Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package br.pucpr;
- import java.io.*;
- import java.util.*;
- /**
- * Implementação de uma tabela hash de palavras reservadas da linguagem
- *
- * @author Luis Henrique
- */
- public class MainCls {
- // Criando uma tabela hash com uma chave String e um valor Inteiro
- static HashMap<String, Integer> hsmap = new HashMap<String, Integer>();
- static String palavras[];
- /**
- * Função que passa as palavras reservadas do C para a tabela hash
- */
- public static void hashPalavras() throws IOException {
- // Lendo o arquivo de texto
- BufferedReader buf = new BufferedReader(new FileReader(
- "C:/Temp/palavras_reservadas.txt"));
- String l;
- // Armazenando uma linha por vez na String l
- while ((l = buf.readLine()) != null) {
- // Adcionando a palavra armazenada na tabela hash com o valor 0
- hsmap.put(l, 0);
- }
- buf.close();
- }
- /**
- * Função para ler o programa em C que irá conter algumas das palavras
- * reservadas
- */
- public static void lerPrograma() throws IOException {
- // Lendo o arquivo de texto
- BufferedReader buf = new BufferedReader(new FileReader(
- "C:/Temp/programa.txt"));
- String line = "", l;
- // Armazenando uma linha por vez na String l
- while ((l = buf.readLine()) != null) {
- // Passando cada linha para uma unica String
- line += l;
- }
- // Expressão regular para separar cada palavra da String em uma posição
- // de um vetor de String
- String delimiters = "\\s+|;\\s*|\\(\\s*|\\)\\s*|\\}\\s*|\\{\\s*|\\[\\s*|\\]\\s*";
- // Armazenando as palavras no vetor de String
- palavras = line.split(delimiters);
- }
- public static void main(String[] args) throws IOException {
- int contador = 0;
- // Chamada da função para criar a tabela hash
- hashPalavras();
- // Chamada da função para ler o programa em C
- lerPrograma();
- // Verificando se as palavras contidas no programa são as palavras
- // reservadas
- for (int i = 0; i < palavras.length; i++) {
- // Verifica se é uma palavra reservada
- if (hsmap.containsKey(palavras[i])) {
- // Se for, re-insere a palavra, mas agora com o valor anterior +
- // 1
- hsmap.put(palavras[i], hsmap.get(palavras[i]) + 1);
- }
- }
- // Imprimindo as palavras reservadas encontradas
- System.out.println("Palavras reservadas encontradas: ");
- // Obter uma lista de todas as chaves no HashMap
- Set chaves = hsmap.keySet();
- // Obtemos um iterador
- Iterator i = chaves.iterator();
- // Enquanto existirem chaves
- while (i.hasNext()) {
- // Armazenamos a chave em um objeto
- Object x = i.next();
- // Se a chave possuir valor maior-igual a 1, sabemos que ela foi uma
- // palavra encontrada
- if (hsmap.get(x) >= 1) {
- // Exibimos as palavras
- System.out.print(x + " = " + hsmap.get(x) + ", ");
- // Somamos ao contador para obter a taxa de ocupação
- contador++;
- }
- }
- // Exibimos a taxa de ocupação (valor do contador pelo tamanho da tabela
- System.out.println("\nTaxa de ocupação: " + contador + "/"
- + hsmap.size());
- // Exibimos a porcentagem de ocupação (valor do contador vezes 100
- // divididos pelo tamanho da tabela)
- System.out.println("Porcentagem de ocupação: "
- + ((contador * 100) / hsmap.size()) + "%");
- // Exibimos o número de colisões
- System.out.println("Número de colisões: 0");
- // As colisões foram 0 pelo motivo de ter usado uma tabela hash do java,
- // criando o tamanho certo para as palavras listadas
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment