elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  CALCULADORA SINTACTICO-LEXICO
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: CALCULADORA SINTACTICO-LEXICO  (Leído 3,029 veces)
blackber1

Desconectado Desconectado

Mensajes: 1


Ver Perfil
CALCULADORA SINTACTICO-LEXICO
« en: 3 Diciembre 2015, 04:37 am »

//QUISIERA QUE DE EL RESULTADO Y QUE PUEDA USAR POTENCIA
//ADEMAS DE AGREGARLE PI
//GRACIAS DE ANTEMANO
#include <stdio.h>
typedef enum
    /* book-keeping tokens */
   {ERROR,
    /* multicharacter tokens */
    PLUS,MINUS,
    /* special symbols */
    NUM,TIMES,LPAREN,RPAREN,ENDFILE,OVER,POW
   } TokenType;
int temp;
TokenType token;          // Tokens leídos
TokenType getToken();            // Analizador Léxico
void match (TokenType expected);      // Compara tokens
void E();               // Analizador Sintáctico E -> T E2 $
void E2();               // Analizador Sintáctico E2-> +T E2||E2->-T E2|epsilon
void T();               // Analizador Sintáctico T -> F T2
void T2();               // Analizador Sintáctico T2-> *F T2||T2-> /F T2|epsilon
void F();               // Analizador Sintáctico F -> num|(E)
/***********************************************
 *  Compara token leido con token esperado     *
 ***********************************************/
void match(TokenType expected)
{ if (token == expected)
      token = getToken(); //regresarlo
  else
     printf("Error sintactico, se esperaba: otro token \n");
}



/***********************************************
 *  Analizador Léxico                          *
 ***********************************************/
TokenType getToken()
{
   int c = getchar();
   while (c==' ') c=getchar();
   switch (c)
   {
      case '\t':
      case '+' : return PLUS;
      case '-' : return MINUS;
      case '*' : return TIMES;
                case '/' : return OVER;
                case '^' : return POW;
      case '(' : return LPAREN;
      case ')' : return RPAREN;
      case '\n':
      case EOF : return ENDFILE;
      default    : if (isdigit(c))
                  {
                      ungetc(c, stdin);
                        scanf("%d",&temp);
                        
                     return NUM;
                  }
               else
                  return ERROR;
   }
}

/***********************************************
 *  Analizador Sintáctico                      *
 ***********************************************/
 
void E()                  // Analizador Sintáctico E -> T E2 $
{
  switch (token) {
      case NUM    : T(); E2();break;
      case LPAREN : T(); E2();break;
      default     : printf("Error sintactico en E(),se esperaba NUM o ( ");
  }
}

void E2()                // Analizador Sintáctico E2-> +T E2|epsilon
{
   switch ( token ) {
      case PLUS    : match(PLUS); T(); E2(); break;
      case MINUS    : match(MINUS); T(); E2(); break;
      case RPAREN   : break;
      case ENDFILE: break;
      default    : printf("Error sintactico en E2(), se esperaba: +,),EOF \n");
   }
}

void T()                 // Analizador Sintáctico T -> F T2
{
  switch (token) {
      case NUM      : F(); T2();break;
      case LPAREN   : F(); T2();break;
      default       : printf("Error sintactico en T(), se esperaba NUM o ( ");
   }
}

void T2()             // Analizador Sintáctico T2-> *F T2|epsilon
{
   switch ( token ) {
      case TIMES    : match(TIMES); F(); T2(); break;
      case OVER    : match(OVER); F(); T2(); break;
      case POW    : match(POW); F(); T2(); break;
      case MINUS: break;
      case PLUS    : break;

      case RPAREN    : break;
      case ENDFILE   : break;
      default    : printf("Error sintactico en T2(), se esperaba: *,+,),EOF \n");      
   }
}

void F()             // Analizador Sintáctico F -> num|(E)
{   
   switch ( token ) {
      case NUM   : match(NUM); break;
      case LPAREN : match(LPAREN); E(); match(RPAREN); break;
      default    : printf("Error sintactico en F(), se esperaba: numero , ( \n");
   }
}

/***********************************************
 *  Función de inicio (Principal)              *
 ***********************************************/
 
int main()
{
 
   token = getToken();
   E();
   if (token!=ENDFILE)
      printf("Error sintactico, se esperaba terminar en : EOF \n");
   else
           printf("Resultado  \n");
         printf("Analisis sintactico terminado  \n");
   return 0;   
}


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con Analizador Lexico en php « 1 2 »
PHP
include (); 17 11,222 Último mensaje 5 Junio 2012, 16:15 pm
por include ();
[Ayuda-C] Programación de un analizador léxico-sintáctico
Programación C/C++
Miky Gonzalez 2 6,711 Último mensaje 6 Agosto 2013, 23:16 pm
por Alien-Z
Analizador lexico/sintactico
Scripting
roadd 4 3,784 Último mensaje 5 Mayo 2015, 22:00 pm
por roadd
Analisador Lexico
Programación C/C++
AGuevara 3 2,086 Último mensaje 25 Marzo 2019, 15:47 pm
por simorg
analizador lexico / sintactico python
Programación General
javidarks 7 15,617 Último mensaje 1 Agosto 2021, 10:12 am
por fzp
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines