int Anasin::Sentencia(){ Lexema nextLexema = this->_symTab->lookAheadLexema(); if(nextLexema._tipo == "Id"){ // 02) Sentencia -> Operacion Sentencia if(!Operacion()) return 0; if(!Sentencia()) return 0; }else if(nextLexema._tipo == "Output"){ // 04) Sentencia -> Impresión Sentencia if(!Impresion()) return 0; if(!Sentencia()) return 0; }else if(nextLexema._tipo == "Reserved" && (nextLexema._valor == "while" || nextLexema._valor == "if")){ // 01) Sentencia -> EControl Sentencia if(!EControl()) return 0; if(!Sentencia()) return 0; }else if(nextLexema._tipo == "Reserved" && (nextLexema._valor == "arr" || nextLexema._valor == "count")){ // 03) Sentencia -> Declaracion Sentencia if(!Declaracion()) return 0; if(!Sentencia()) return 0; }else if(nextLexema._tipo == "Agrupation" && nextLexema._valor == "}"){ // Es la derivación a nada }else if(nextLexema._tipo == "$"){ // Ya terminé :) }else{ std::cout << "Error sintáctico, se esperaba : Id,},output,while,if,arr,count,$ y se obtuvo: " << nextLexema._tipo << " ("<< nextLexema._valor <<")["<< this->_symTab->getOffset() <<"]" << std::endl; return 0; } return 1; }
ArbolSA* Lista_Prototipos_Reservados() { ArbolSA* actual, *actual_tipo, *actual_nombre, *actual_parametros, *actual_declaracion; if (Prototipos_Reservados==NULL) { Prototipos_Reservados=Lista_Prototipos_Vacia(); /* void WriteI(integer e); */ actual_tipo = Tipo_Nulo(); actual_nombre = Ident(); Ident_Info_Lex(actual_nombre) = String2Lex("WriteI"); actual_declaracion = Declaracion(Crear_Tipo(_TIPO_ENTERO),Ident(),Expr_Nula()); Ident_Info_Lex(Declaracion_nombre(actual_declaracion)) = String2Lex("e"); actual_parametros = Lista_Parametros(Lista_Parametros_Vacia(),Parametro(Solo_Lectura(),actual_declaracion)); actual = Prototipo(actual_tipo, actual_nombre, actual_parametros); Prototipos_Reservados=Lista_Prototipos(Prototipos_Reservados,actual); /* void WriteR(real r); */ actual_tipo = Tipo_Nulo(); actual_nombre = Ident(); Ident_Info_Lex(actual_nombre) = String2Lex("WriteR"); actual_declaracion = Declaracion(Crear_Tipo(_TIPO_REAL),Ident(),Expr_Nula()); Ident_Info_Lex(Declaracion_nombre(actual_declaracion)) = String2Lex("r"); actual_parametros = Lista_Parametros(Lista_Parametros_Vacia(),Parametro(Solo_Lectura(),actual_declaracion)); actual = Prototipo(actual_tipo, actual_nombre, actual_parametros); Prototipos_Reservados=Lista_Prototipos(Prototipos_Reservados,actual); /* void WriteC(character c); */ actual_tipo = Tipo_Nulo(); actual_nombre = Ident(); Ident_Info_Lex(actual_nombre) = String2Lex("WriteC"); actual_declaracion = Declaracion(Crear_Tipo(_TIPO_CARACTER),Ident(),Expr_Nula()); Ident_Info_Lex(Declaracion_nombre(actual_declaracion)) = String2Lex("c"); actual_parametros = Lista_Parametros(Lista_Parametros_Vacia(),Parametro(Solo_Lectura(),actual_declaracion)); actual = Prototipo(actual_tipo, actual_nombre, actual_parametros); Prototipos_Reservados=Lista_Prototipos(Prototipos_Reservados,actual); /* void WriteS(string s); */ actual_tipo = Tipo_Nulo(); actual_nombre = Ident(); Ident_Info_Lex(actual_nombre) = String2Lex("WriteS"); actual_declaracion = Declaracion(Crear_Tipo(_TIPO_CADENA),Ident(),Expr_Nula()); Ident_Info_Lex(Declaracion_nombre(actual_declaracion)) = String2Lex("s"); actual_parametros = Lista_Parametros(Lista_Parametros_Vacia(),Parametro(Solo_Lectura(),actual_declaracion)); actual = Prototipo(actual_tipo, actual_nombre, actual_parametros); Prototipos_Reservados=Lista_Prototipos(Prototipos_Reservados,actual); /* void WriteL(boolean l); */ actual_tipo = Tipo_Nulo(); actual_nombre = Ident(); Ident_Info_Lex(actual_nombre) = String2Lex("WriteL"); actual_declaracion = Declaracion(Crear_Tipo(_TIPO_LOGICO),Ident(),Expr_Nula()); Ident_Info_Lex(Declaracion_nombre(actual_declaracion)) = String2Lex("l"); actual_parametros = Lista_Parametros(Lista_Parametros_Vacia(),Parametro(Solo_Lectura(),actual_declaracion)); actual = Prototipo(actual_tipo, actual_nombre, actual_parametros); Prototipos_Reservados=Lista_Prototipos(Prototipos_Reservados,actual); /* integer ReadI(); */ actual_tipo = Crear_Tipo(_TIPO_ENTERO); actual_nombre = Ident(); Ident_Info_Lex(actual_nombre) = String2Lex("ReadI"); actual_parametros = Lista_Parametros_Vacia(); actual = Prototipo(actual_tipo, actual_nombre, actual_parametros); Prototipos_Reservados=Lista_Prototipos(Prototipos_Reservados,actual); /* real ReadR(); */ actual_tipo = Crear_Tipo(_TIPO_REAL); actual_nombre = Ident(); Ident_Info_Lex(actual_nombre) = String2Lex("ReadR"); actual_parametros = Lista_Parametros_Vacia(); actual = Prototipo(actual_tipo, actual_nombre, actual_parametros); Prototipos_Reservados=Lista_Prototipos(Prototipos_Reservados,actual); /* character ReadC(); */ actual_tipo = Crear_Tipo(_TIPO_CARACTER); actual_nombre = Ident(); Ident_Info_Lex(actual_nombre) = String2Lex("ReadC"); actual_parametros = Lista_Parametros_Vacia(); actual = Prototipo(actual_tipo, actual_nombre, actual_parametros); Prototipos_Reservados=Lista_Prototipos(Prototipos_Reservados,actual); /* string ReadS(); */ actual_tipo = Crear_Tipo(_TIPO_CADENA); actual_nombre = Ident(); Ident_Info_Lex(actual_nombre) = String2Lex("ReadS"); actual_parametros = Lista_Parametros_Vacia(); actual = Prototipo(actual_tipo, actual_nombre, actual_parametros); Prototipos_Reservados=Lista_Prototipos(Prototipos_Reservados,actual); /* boolean ReadL(); */ actual_tipo = Crear_Tipo(_TIPO_LOGICO); actual_nombre = Ident(); Ident_Info_Lex(actual_nombre) = String2Lex("ReadB"); actual_parametros = Lista_Parametros_Vacia(); actual = Prototipo(actual_tipo, actual_nombre, actual_parametros); Prototipos_Reservados=Lista_Prototipos(Prototipos_Reservados,actual); }; return Prototipos_Reservados; };