Mini Analisador Léxico que conta palavras numa string
Publicado por Samuel Leonardo (última atualização em 23/04/2021)
[ Hits: 2.371 ]
Homepage: https://nerdki.blogspot.com.br/
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;
}
METODO DA FALSE POSIÇÃO E BISSEÇÃO em "C"
Retirar caracteres de uma frase
Pegando entrada do teclado e guardando em uma string
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Mint Xfce não mantém a conexão no wi-fi (2)
Problemas com Driver NVIDIA (5)
Warcraft II Remastered no Linux? (8)









