Enviado em 06/03/2011 - 13:33h
Olá, senhores, boa noite. desde ja aviso a administracao de que nao tenho certeza se estou postando no lugar certo; se errei, ficam minhas sinceras desculpas.
#include <iostream>
#include <fstream>
#include <string>
#include <stdio.h>
#include <ctype.h>
using namespace std;
const int NUM=200;
void carrega_txt(string vetor_operadores[NUM], string vetor_delimitadores[NUM], string vetor_reservadas[NUM]);
void guarda_operadores(string palavra, string vetor_operadores[NUM]);
void guarda_delimitadores(string palavra, string vetor_delimitadores[NUM]);
void guarda_reservadas(string palavra, string vetor_reservadas[NUM]);
int fhash(string palavra);
int testa_numero(string line, int x);
int testa_operador(string line, int x, string vetor_operadores[NUM]);
int testa_delimitador(string line, int x, string vetor_delimitadores[NUM]);
int testa_reservada(string line, string vetor_reservadas[NUM]);
int main()
{
string teste, palavra, palavra2, line, concatena, vetor_operadores[NUM], vetor_delimitadores[NUM], vetor_reservadas[NUM], recebe, recebe2, testando, auxiliar;
int x=0; //usado para varrer a linha toda
int i=0; //usado para "zerar" os vetores de string
int testa_funcao=0, testa_tamanho=0, z=0;
//zerando vetores
for(i=0; i<NUM; i++)
{
vetor_operadores[i] = "";
vetor_delimitadores[i] = "";
}
carrega_txt(vetor_operadores, vetor_delimitadores, vetor_reservadas);
ifstream entrada;
entrada.open("programa_user.txt"); //Abre o arquivo;
if(entrada.is_open()) //Se o arquivo for aberto com sucesso...
{
while(!entrada.eof()) //Enquanto o arquivo não chegar no fim...
{
getline(entrada,line); //Copia uma linha inteira do arquivo para a string line;
x=0;
while (x < line.size()) //x percorre a string caractere por caractere;
{
while((line.at(x) == '\t' || line.at(x) == ' ') && x < line.size())
x++;
testa_funcao = testa_numero(line, x);
if(testa_funcao == 0) //ja sei que não é numero. testo, entao, se é outra coisa...
{
testa_funcao = testa_operador(line, x, vetor_operadores);
if(testa_funcao == 0)
{
//ja sei que tb nao é operador numerico...
testa_funcao = testa_delimitador(line, x, vetor_delimitadores);
if(testa_funcao == 0)
{
palavra = line.at(x);
while(isalpha(line.at(x)) && x < line.size()-1)
{
palavra = palavra + line.at(x+1);
x++;
}
testa_tamanho = palavra.size();
if(isalpha(palavra.at(testa_tamanho-1)) == 0)
{
x--;
//preciso agora fazer palavra receber ela mesma menos o ultimo caractere
z=0;
palavra2="";
while(isalpha(palavra.at(z)))
{
palavra2 = palavra2 + palavra.at(z);
z++;
teste = palavra.at(z);
}
palavra = palavra2;
}
testa_funcao = testa_reservada(palavra, vetor_reservadas);
if(testa_funcao == 0)
{
if(teste == "\"" || teste == "\'")
cout << "\n" << palavra << " ---- string.\n";
else
cout << "\n" << palavra << " ---- variavel.\n";
}
}
}
else
x=testa_funcao;
}
else
x=testa_funcao;
x++;
}
}
entrada.close();
}
else
cout << "Erro na leitura do arquivo\n\n";
cout << "\n\n";
}
void carrega_txt(string vetor_operadores[NUM], string vetor_delimitadores[NUM], string vetor_reservadas[NUM])
{
ifstream entrada;
string line;
entrada.open("operadores_num.txt"); //Abre o arquivo;
if(entrada.is_open()) //Se o arquivo for aberto com sucesso...
{
while(!entrada.eof()) //Enquanto o arquivo não chegar no fim...
{
getline(entrada,line);
//jogo line no vetor_operadores
guarda_operadores(line, vetor_operadores);
}
}
else
cout << "\n\nErro durante a leitura do 'arquivo operadores_num.txt'";
entrada.close();
//**********************************************************************************
entrada.open("delimitadores.txt"); //Abre o arquivo;
if(entrada.is_open()) //Se o arquivo for aberto com sucesso...
{
while(!entrada.eof()) //Enquanto o arquivo não chegar no fim...
{
getline(entrada,line);
//jogo line no vetor_operadores
guarda_delimitadores(line, vetor_delimitadores);
}
}
else
cout << "\n\nErro durante a leitura do arquivo 'delimitadores.txt'";
entrada.close();
//**********************************************************************************
entrada.open("reservadas.txt"); //Abre o arquivo;
if(entrada.is_open()) //Se o arquivo for aberto com sucesso...
{
while(!entrada.eof()) //Enquanto o arquivo não chegar no fim...
{
getline(entrada,line);
//jogo line no vetor_operadores
guarda_reservadas(line, vetor_reservadas);
}
}
else
cout << "\n\nErro durante a leitura do arquivo 'reservadas.txt'";
entrada.close();
}
void guarda_operadores(string palavra, string vetor_operadores[NUM])
{
int posicao = fhash(palavra);
//se a posição do vetor está vazia, simplesmente insiro o número;
//senão, concateno o que já está lá, através do ".", com a nova palavra.
if(vetor_operadores[posicao]=="")
vetor_operadores[posicao] = palavra+".";
else
vetor_operadores[posicao] = vetor_operadores[posicao]+"."+palavra;
}
void guarda_delimitadores(string palavra, string vetor_delimitadores[NUM])
{
int posicao = fhash(palavra);
//se a posição do vetor está vazia, simplesmente insiro o número;
//senão, concateno o que já está lá, através do ".", com a nova palavra.
if(vetor_delimitadores[posicao]=="")
vetor_delimitadores[posicao] = palavra+".";
else
vetor_delimitadores[posicao] = vetor_delimitadores[posicao]+"."+palavra;
}
void guarda_reservadas(string palavra, string vetor_reservadas[NUM])
{
int posicao = fhash(palavra);
//se a posição do vetor está vazia, simplesmente insiro o número;
//senão, concateno o que já está lá, através do ".", com a nova palavra.
if(vetor_reservadas[posicao]=="")
vetor_reservadas[posicao] = palavra+".";
else
vetor_reservadas[posicao] = vetor_reservadas[posicao]+"."+palavra;
}
int fhash(string palavra)
{
int sum, i;
sum=i=0;
while (i < palavra.size())
{
sum = sum + int(palavra.at(i));
i++;
}
return (sum%NUM);
}
int testa_numero(string line, int x)
{
string concatena;
if(isdigit(line.at(x)))
{
concatena = line.at(x);
//significa que "line.at(x)" é um numero.
if(line.at(x+1) == ',' || isdigit(line.at(x+1)))
{
//significa que line.at(x+1) é um número também, portanto line.at(x) e line.at(x+1) são parte do mesmo número.
while(line.at(x+1) == ',' || isdigit(line.at(x+1)))
{
concatena += line.at(x+1);
x++;
}
cout << "\n" << concatena << " ---- dado numerico.\n";
}
else
cout << "\n" << line.at(x) << " ---- dado numerico.\n";
return x; //retorno para a main o valor de x, ou seja, a posição de onde ele deve continuar.
}
else
return 0;
}
int testa_operador(string line, int x, string vetor_operadores[NUM])
{
string recebe, testando, auxiliar, recebe2;
int verifica, flag=0, y=0;
//calculo o hash do simbolo e armazeno em "recebe"
recebe = line.at(x);
verifica = fhash(recebe);
//testando recebe o que está no vetor, na posição determinada pelo cálculo do hash
testando = vetor_operadores[verifica];
y=0;
if(testando != "")
{
while (y < testando.size() && flag==0)
{
auxiliar="";
while(testando.at(y) != '.')
{
auxiliar += testando.at(y);
y++;
}
if(auxiliar == recebe)
{
flag=1;
y=0;
recebe2 = line.at(x+1);
verifica = fhash(recebe2);
testando = vetor_operadores[verifica];
if(testando != "")
{
while (y < testando.size() && flag==1)
{
auxiliar="";
while(testando.at(y) != '.')
{
auxiliar += testando.at(y);
y++;
}
if(auxiliar == recebe2)
flag = 2;
else
y++;
}
}
if(flag == 2)
{
cout << "\n" << recebe+recebe2 << " ---- operador aritmetico.\n";
x++;
}
else
cout << "\n" << recebe << " ---- operador aritmetico.\n";
}
else
y++;
}
}
if(flag == 0)
return 0;
else
return x;
}
int testa_delimitador(string line, int x, string vetor_delimitadores[NUM])
{
string recebe, testando, auxiliar, recebe2;
int verifica, flag=0, y=0;
//calculo o hash do simbolo e armazeno em "recebe"
recebe = line.at(x);
verifica = fhash(recebe);
//testando recebe o que está no vetor, na posição determinada pelo cálculo do hash
testando = vetor_delimitadores[verifica];
y=0;
if(testando != "")
{
while (y < testando.size() && flag==0)
{
auxiliar="";
while(testando.at(y) != '.')
{
auxiliar += testando.at(y);
y++;
}
if(auxiliar == recebe)
{
cout << "\n" << recebe << " ---- delimitador.\n";
flag=1;
}
else
y++;
}
}
if(flag == 0)
return 0;
else
{
x=x+1;
return x;
}
}
int testa_reservada(string line, string vetor_reservadas[NUM])
{
string recebe, testando, auxiliar, recebe2;
int verifica, flag=0, y=0;
//calculo o hash do simbolo e armazeno em "recebe"
recebe = line;
verifica = fhash(recebe);
//testando recebe o que está no vetor, na posição determinada pelo cálculo do hash
testando = vetor_reservadas[verifica];
y=0;
if(testando != "")
{
while (y < testando.size() && flag==0)
{
auxiliar="";
while(testando.at(y) != '.')
{
auxiliar += testando.at(y);
y++;
}
if(auxiliar == recebe)
{
cout << "\n" << recebe << " ---- palavra reservada.\n";
flag=1;
}
else
y++;
}
}
if(flag == 0)
return 0;
else
return 1;
}
tux-gpt - Assistente de IA para o Terminal
Instalação e configuração do Chrony
Programa IRPF - Guia de Instalação e Resolução de alguns Problemas
Como instalar no Linux Jogos da Steam só para Windows
Instalando o Team Viewer no Debian Trixie - problema no Policykit
O Que Fazer Após Instalar Ubuntu 25.04
Como fzr Downgrade em um pacote específico (5)
Inspiração para desenhar no Linux (1)
Os empreguim de meu Deus estão cada vez mais tecnológicos (6)