Documente Academic
Documente Profesional
Documente Cultură
h>
#include <stdlib.h>
int result;
int ver;
typedef enum
/* book-keeping tokens */
{ERROR,
/* multicharacter tokens */
PLUS,MINUS,
/* special symbols */
NUM,TIMES,LPAREN,RPAREN,ENDFILE,OVER,POT,
} TokenType;
int temp;
int op;
int g=1;
/***********************************************
***********************************************/
{ if (token == expected)
token = getToken(); //regresarlo
else
/***********************************************
* Analizador Léxico *
***********************************************/
TokenType getToken()
int c = getchar();
switch (c)
case '\t':
case '\n':
default : if (isdigit(c))
{
ungetc(c, stdin);
scanf("%d",&temp);
return NUM;
else
return ERROR;
/***********************************************
* Analizador Sintáctico *
***********************************************/
g=1;
switch (token) {
printf(" E = %d\n",ver);
return ver;
int Es=Te;
switch ( token ) {
// printf("E2 = %d\n",Es);
return Es;
int Te;
switch (token) {
printf("Número = %d\n",Te);
return Te;
}
int T2(int Te) // Analizador Sintáctico T2-> *F T2|epsilon
int Tes=Te;
switch ( token ) {
return Tes;
switch ( token ) {
return temp;
/***********************************************
***********************************************/
int main() {
while(1){
result=E();
if (token!=ENDFILE)
printf("ERROR \n");
printf("BIEN \n");
printf("Resultado = %d\n",result);
ver=0;
}
ASDR_MAS_POR
//E->TE2
//E2->+TE2|lamda
//T->FT2
//T2->*FT2|lamda
//F->mun|(E)
#include <stdio.h>
typedef enum
{ERROR,
PLUS,
NUM,TIMES,LPAREN,RPAREN,ENDFILE
} TokenType;
int temp;
TokenType token;
TokenType getToken();
void E();
void E2();
void T();
void T2();
void F();
/***********************************************
***********************************************/
{ if (token == expected)
token = getToken();
else
printf("Error sintactico, se esperaba: otro token \n");
/***********************************************
* Analizador Léxico *
***********************************************/
TokenType getToken()
int c = getchar();
switch (c)
case '\t':
case '\n':
default : if (isdigit(c))
ungetc(c, stdin);
scanf("%d",&temp);
return NUM;
else
return ERROR;
}
/***********************************************
* Analizador Sintáctico *
***********************************************/
void E()
switch (token) {
void E2()
switch ( token ) {
void T()
switch (token) {
switch ( token ) {
switch ( token ) {
/***********************************************
***********************************************/
int main()
{
while (1){
token = getToken();
E();
if (token!=ENDFILE)
else
return 0;
}
LOUDEN
//E->TE2
//E2->+TE2|lamda
//T->FT2
//T2->*FT2|lamda
//F->mun|(E)
#include <stdio.h>
typedef enum
{ERROR,
PLUS,
NUM,TIMES,LPAREN,RPAREN,ENDFILE
} TokenType;
int temp;
TokenType token;
TokenType getToken();
void E();
void E2();
void T();
void T2();
void F();
/***********************************************
***********************************************/
{ if (token == expected)
token = getToken();
else
/***********************************************
* Analizador Léxico *
***********************************************/
TokenType getToken()
int c = getchar();
switch (c)
case '\t':
case '\n':
default : if (isdigit(c))
ungetc(c, stdin);
scanf("%d",&temp);
return NUM;
else
return ERROR;
}
/***********************************************
* Analizador Sintáctico *
***********************************************/
void E()
switch (token) {
void E2()
switch ( token ) {
void T()
switch (token) {
}
}
switch ( token ) {
switch ( token ) {
/***********************************************
***********************************************/
int main()
while (1){
printf("Ingresa una cadena: ");
token = getToken();
E();
if (token!=ENDFILE)
else
return 0;