Code Monkey home page Code Monkey logo

analisador-extenso's Introduction

Analisador de expressões numéricas por extenso em C

Introdução

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.

Da motivação

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).

Do limite

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³⁴.

Conceitos

Interpretador de expressões

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.

Formalismo

Gramática de Backus-Naur utilizada pelo analisador.

Operações com números em strings

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.

Instruções de uso

Compilação

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 ou clang --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 ou gcc -O2 *.c -o main -lm
  • Se estiver utilizando Windows, altere o main para main.exe

Do programa

As expressões devem ser formatadas com espaços delimitando as palavras.

Formato das operações

  • 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!
OBS: deve-se seguir estritamente as instruções para a analise ocorrer como esperado.

Não utilize acentos nas palavras

  • Correto = dois milhoes
  • Incorreto = dois milhões

Não utilize pontuação

  • Correto = sete trilhoes e oitenta milhoes
  • Incorreto = sete trilhoes, e oitenta milhoes

Descrição das funções

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.

Bibliografia

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.

Contato

A partir do email do Github.

analisador-extenso's People

Contributors

josecleiton avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.