void Parser::MethodDecls() { if(look.kind == RBRACE) return; MethodDecl(); MethodDecls(); }
program* sintactico::Program() { list<statementMethodecl*> *list_methodecl = new list<statementMethodecl*>(); list<statementFieldecl*> *list_fieldecl = new list<statementFieldecl*>(); if(CurrentToken->tipo == KWCLASS) { CurrentToken = Lexer->NexToken(); string class_name = ClassName(); if(Fallo) return NULL; if(CurrentToken->tipo == LLAVE_I) { CurrentToken = Lexer->NexToken(); Token T[2]; T[0] = *CurrentToken; while(CurrentToken->tipo == KWBOOL || CurrentToken->tipo == KWINT || CurrentToken->tipo ==KWVOID) { if(CurrentToken->tipo == KWVOID) { CurrentToken = Lexer->NexToken(); T[1] = *CurrentToken; CurrentToken = Lexer->NexToken(); list_methodecl->push_back(MethodDecl(T)); if(Fallo) return NULL; continue; } CurrentToken = Lexer->NexToken(); T[1] = *CurrentToken; if(CurrentToken->tipo == IDENTIFICADOR){ CurrentToken = Lexer->NexToken(); if(CurrentToken->tipo == PARENTESIS_I) { list_methodecl->push_back(MethodDecl(T)); if(Fallo) return NULL; } else { list_fieldecl->push_back(FieldDecl(T)); if(Fallo) return NULL; } } } } if(CurrentToken->tipo != LLAVE_D) { Fallo = true; MensajeError("Se esperaba '}'",Lexer->linea); return NULL; } CurrentToken = Lexer->NexToken(); program *prog = new program(class_name,list_methodecl,list_fieldecl); return prog; } else { Fallo = true; MensajeError("Se esperaba class",Lexer->linea); return NULL; } }