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;
}
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Criando uma VPC na AWS via CLI
Multifuncional HP imprime mas não digitaliza
Dica básica para escrever um Artigo.
Como Exibir Imagens Aleatórias no Neofetch para Personalizar seu Terminal