
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;
}
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Atualizar Linux Mint 22.2 para 22.3 beta
Jogar games da Battle.net no Linux com Faugus Launcher
Como fazer a Instalação de aplicativos para acesso remoto ao Linux
Conky, alerta de temperatura alta (10)
Assisti Avatar 3: Fogo e Cinzas (3)
Duas Pasta Pessoal Aparecendo no Ubuntu 24.04.3 LTS (42)









