Compilador c++
Enviado por Fernanda Prieto • 10 de Noviembre de 2019 • Tarea • 3.190 Palabras (13 Páginas) • 208 Visitas
#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<fstream>
using namespace std;
ifstream archivo;
string nombreArchivo,texto;
void lectura();
void seleccionarArchivo();
void menu();
void analizadorLexico();
void analizadorSintatico();
void analizadorSemantico();
void optimizacionCodigo();
void createExecutable();
int verificarAlfabeto();
int main(){
system("color 0a");
seleccionarArchivo();
return 0;
}
void seleccionarArchivo(){
bool cargaExiste = true;
while(cargaExiste){
system("dir");
cout<<"Digite la ruta de su Pograma de repeticion en algol: ";
getline(cin,nombreArchivo);
archivo.open(nombreArchivo.c_str(),ios::in); //Abrimos el archivo en modo lectura
if(archivo.fail()){
system("cls");
cout<<"No se pudo encontrar el archivo"<<endl;
archivo.close();
seleccionarArchivo();
}else{
system("cls");
cout<<"Archivo Cargado Exitosamente"<<endl;
archivo.close();
menu();
}
}
}
void menu(){
system("cls");
int opc;
cout<<"Menu"<<endl;
cout<<"0.-\tImprimir Codigo Cargado"<<endl;
cout<<"1.-\tAnalisador Lexico"<<endl;
cout<<"2.-\tAnalisador Sintatico"<<endl;
cout<<"3.-\tAnalisador Semantico"<<endl;
cout<<"4.-\tOptimizacion de Codigo"<<endl;
cout<<"5.-\tTraducir Codigo"<<endl;
cout<<"Seleccione una opcion: ";
cin>>opc;
switch (opc) {
case 0: {
system("cls");
cout << "Leer Codigo Cargado: " << endl;
lectura();
break;
}
case 1: {
system("cls");
cout << "Analizador Lexico: " << endl;
analizadorLexico();
break;
}
case 2: {
system("cls");
cout << "Analizador Semantico: " << endl;
analizadorSintatico();
break;
}
case 3: {
system("cls");
cout << "El producto es: " << endl;
analizadorSemantico();
break;
}
case 4: {
system("cls");
cout << "Optimizacion de Codigo: " << endl;
optimizacionCodigo();
break;
}
case 5: {
system("cls");
cout << "Traducir Codigo: " << endl;
createExecutable();
break;
}
default: {
system("cls");
cout << "Opción no válida" << endl;
menu();
break;
}
}
}
void lectura(){
archivo.open(nombreArchivo.c_str(),ios::in);
while(!archivo.eof()){ //mientras no sea final del archivo
getline(archivo,texto);
cout<<texto<<endl;
}
archivo.close(); //Cerramos el archivo
system("pause");
menu();
}
void analizadorLexico(){
char lexema[] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9'};
char token[] = {' ',';',':','=','(',')',' ',',','$'};
char errorLexico [1000];
fstream ficheroEntrada;
char letra;
int contador = 0;
char caracter[10000];
bool Lex = false;
bool Tok = false;
bool anLex = false;
ficheroEntrada.open(nombreArchivo.c_str(),ios::in);
if (ficheroEntrada.is_open()) {
char letraAnterios;
while (! ficheroEntrada.eof() ) {
ficheroEntrada >> letra;
caracter[contador] = letra;
contador++;
}
for ( int x = 0; x<contador;x++){
Lex = false;
Tok = false;
for(int y = 0; y < sizeof(lexema);y++){
if(caracter[x] == lexema[y]){
cout<<"Lexema Encontrado: "<<lexema[y]<<endl;
Lex = true;
}
}
for(int y = 0; y < sizeof(token);y++){
if(caracter[x] == token[y]){
cout<<"Token Encontrado: "<<token[y]<<endl;
Tok = true;
}
}
if(Lex == false && Tok == false){
system("cls");
system("colora0");
cout<<"************ERROR DE LEXICO*********************"<<endl;
errorLexico[x] = caracter[x];
cout<<"Error Lexico : "<<errorLexico[x];
anLex = true;
}else{
errorLexico[x] = caracter[x];
}
}
if(anLex == true){
...