Mini Analisador Léxico que conta palavras numa string
Publicado por Samuel Leonardo (última atualização em 23/04/2021)
[ Hits: 1.990 ]
Homepage: https://tutorialprofissa.blogspot.com/
Neste programa está um código bem pequeno para contar palavras numa string. Com ele, você pode inclusive adaptar e contar palavras num arquivo txt, desde que não se use pontuações ou outros caracteres como \n e \t.
Eu fiz ele bem simples para apenas alguém se interessar pelo estudo de compiladores.
Sugiro a leitura dos livros:
- compiladores princípios técnicas e ferramentas (ótimo livro, muito prático)
- linguagens formais e autômatos do autor Paulo Blauth Menezes (muito teórico este livro)
Instruções:
- modifique a string 'str' para ver como se comporta o lexer
- leia os comentários para mais instruções
/** * @file minilexer.c * @author Samuel Leonardo * @brief Mini analisador léxico de uma string * @version 0.1 * @date 2021-04-20 * * @copyright Copyleft (c) 2021 * */ #include <stdio.h> #include <stdlib.h> #include <string.h> int main ( ) { //modifique esta string para ver se o analisador funciona //observe que, só coloquei o caractere ' ' (espaço) como separador das palavras //você pode modificar facilmente para outros caracteres como o \n \t etc e tal //NOTA: também não coloquei para ignorar pontuaçlão, por isso, //algo como "aqui," é encarado como uma palavra const char * str = "String teste Com Char MAIUSCULOS!"; //estado do analisador léxico int estado = 0; //posição do caractere atual int p = 0; int tamanho = strlen(str); int qtdePalavras = 0; while (str[p]) { //estado de lendo um caractere if (estado == 0) { if (str[p] != ' ') { //vai para estado de lendo identificador (palavra sem espaço) estado = 1; } else { // move a posição do caractere atual p++; } } // lendo um identificador else if (estado == 1) { int inicio = p; int fim = p + 1; while (str[fim] && str[fim] != ' ') { fim++; } //verifica agora se o fim NÃO é o char '\0' ou um ' ' (espaço) if (str[fim] == '\0' || str[fim] == ' ') { // se estamos aqui, é de se supor que estamos lendo um caractere do alfabeto // seria mais interessante ter verificado isso no if daqui // agora, incrementa o contador de palavras qtdePalavras++; } // depois, posiciona o contador de posição na posição do fim p = fim; // volta ao estado de lendo caractere estado = 0; } } printf("Frase: %s \n\tem %d palavras\n", str, qtdePalavras); return 0; }
Compilando um Kernel customizado a partir do código-fonte do Kernel do Debian 12
Gentoo binário ao lado da sua distro atual
Documentação para a função de carregamento saudável da bateria do notebook Acer Aspire 5 no Linux
Instalando Google Chrome no Linux Mint 22
O Que Fazer Após Instalar Linux Mint 22
Instalando o Dolphin e deixando-o "pretinho" acompanhando o tema escuro do Gnome-Shell
Meu computador não aceita o Linux de nenhuma maneira (8)
Meu computador está travando (13)
Máximo que meu PC suporta de gigas no HD ou ssd. (5)
Error no such device : 3C8E-127A. error: disco 'hd1,gpt... não e... (3)