Este é um analisador de expressões númericas por extenso, em português, seguindo algumas regras bem definidas. A linguagem de programação utilizada: ISO C90 ou apenas C.
Este projeto foi proposto como trabalho final da disciplina Linguagem de Programação I, pelo professor Jorge Sampaio Farias, referente ao período 2 do curso de Sistemas de Informação na Universidade do Estado da Bahia (UNEB).
O limite de expressões atualmente está em 0 ≤ N < 10³⁴. Mas, o projeto continuará e o próximo passo é atingir 1/10³⁴ < N < 10³⁴.
A proposta é de resolver expressões númericas por extenso usando a linguagem C, um problema que requer uma interpretação das expressões de entrada. Porque mesmo que resolvamos expressões simples facilmente, isto é, com apenas uma operação (é necessário atentar para o N), quando há várias operações, fica muito difícil programar o computador, sem deixar o código ilegível. A partir dessa premissa e com os materiais de apoio, implementei um conjunto de rotinas que resolvem corretamente cada operação no momento desejado. Esse subconjunto de rotinas têm prefixo exp.
Além disso, precisamos de um analisador gramatical (ou léxico) para sabermos se as palavras que compõem a expressão são válidas, este analisador quebra a expressão em vários tokens. Isso é o que a função pega_token
faz.
Um outro subconjunto de rotinas é necessário para a verificação semântica, ou seja, de significado das palavras ali colocadas. Porque "milhao um" está lexicamente correto, porém, não tem o mesmo significado que "um milhao". Nós, nativos da lingua, fazemos essa avaliação automaticamente, mas foi necessário passar isso para o computador. Esse subconjunto de rotinas tem prefixo sem.
Em vista do N ser muito maior do que um long long
, foi necessário guardar os números como strings, cada digito destes representa uma posição no vetor de caracteres.
Por ser uma aplicação em C, você necessita de um compilador C na sua máquina, usarei o GCC como exemplo abaixo. Algumas IDEs instalam-no em conjunto, como o DEV C++, mas o seguinte tutorial é para compilá-la no terminal.
- Clone o repositório
- Abra a pasta compilha no seu terminal
- Verifique se o GCC ou o TCC está instalado com
gcc --version
ouclang --version
- Se não estiver instalado, use o gerenciador de pacotes da sua distribuição para resolver isso.
- Após isso compile com o seguinte código:
clang -O2 *.c -o main -lm
ougcc -O2 *.c -o main -lm
- Se estiver utilizando Windows, altere o
main
paramain.exe
As expressões devem ser formatadas com espaços delimitando as palavras.
- Soma 🢥 numero mais numero
- Subtração 🢥 numero menos numero
- Multiplicação 🢥 numero vezes numero
- Divisão 🢥 numero dividido por numero
- Resto da divisão 🢥 numero mod numero
- Fatorial 🢥 fatorial de numero
- Potenciação 🢥 numero elevado a numero NEW!
- Correto = dois milhoes
- Incorreto =
dois milhões
- Correto = sete trilhoes e oitenta milhoes
- Incorreto =
sete trilhoes, e oitenta milhoes
Os comportamentos das funções (e seu algoritmo) estão descritos no arquivo de cabeçalho interpretador.h
. As funções de operações básicas são "algoritmos clássicos" de soma, subtração, divisão e multiplicação.
Todos os documentos de apoio podem ser encontrados na pasta ExpressionParsing no Dropbox. Agradeço a todos os autores e os credito pela contribuição ao projeto e à minha formação.
A partir do email do Github.