Reglas de Prod.(Izquierda, derecha)



#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
using namespace std;
char entrada[50];
char *ca=entrada;  /*caracter actual*/
//declaracion de funcionees
void E();
void Eprima();
void T();
void Tprima();
void R();
void Rprima();
void W();
void Wprima();
void F();
void Aceptado();
int  main()
{
cout<<“ingrese la expresion: “;
gets(entrada);
E();
cout<<“\nLa expresion si es valida\n”<<endl;
system(“pause”);
}
void E()// *E –> TE’
{
T();
Eprima();
}
void Eprima() // E’ –> +TE’|vacío
{
if(*ca==’+’)
{
Aceptado();
ca++;
T();
Eprima();
}
//vacío
}
void T() // T –> RT’
{
R();
Tprima();
}
void Tprima() // T’ –> *RT’|vacío
{
if(*ca==’*’)
{
Aceptado();
ca++;
R();
Tprima();
}
//vacío
}
void R() // R –> WR’
{
W();
Rprima();
}
void Rprima() // R’ –> -WR’|vacío
{
if(*ca==’-‘)
{
Aceptado();
ca++;
W();
Rprima();
}
//vacío
}
void W() // W –> FW’
{
F();
Wprima();
}
void Wprima() // W’ –> /FW’|vacío
{
if(*ca==’/’)
{
Aceptado();
ca++;
F();
Wprima();
}
//vacío
}
void F() // F –> (E)|0…9
{
if(isdigit(*ca)){
Aceptado();
ca++;
}
else if (*ca=='(‘)
{
Aceptado();
ca++;
E();
if (*ca==’)’){
Aceptado();
ca++;
}
else
{
cout<<“se espera parentesis derecho u operador :”<<endl;
system(“pause”);
exit(0);
}
}
else
{
cout<<“se espera digito o paréntesis izquierdo:”<<endl;
system(“pause”);
exit(0);
}
}
void Aceptado() //esta función avisa que el caracter actual es aceptado
{
cout<<” caracter ‘ “<<*ca<<” ‘ aceptado”<<endl;
}

No hay comentarios:

Publicar un comentario