public Sentencia Clases() { currentToken = lex.NextToken(); if (currentToken.Tipo != TipoToken.TK_ID) throw new Exception("Error Sintactico - Se esperaba un ID"); S_Class sClass = new S_Class(); sClass.Var.id = currentToken.Lexema; currentToken = lex.NextToken(); if (currentToken.Tipo != TipoToken.TK_OPENLLAVE) throw new Exception("Error Sintactico - Se esperaba el simbolo {"); currentToken = lex.NextToken(); //sClass.CamposClase = ((Campos)DeclarationClass()); sClass.CamposClase = DeclarationClass(); if (currentToken.Tipo != TipoToken.TK_CLOSELLAVE) throw new Exception("Error Sintactico - Se esperaba el simbolo }"); currentToken = lex.NextToken(); return sClass; }
public Sentencia DeclaracionesClase() { Declaracion Decl = new Declaracion(); VARTYPE(); try { Class c = new Class(); c.Nombre = currentToken.Lexema; c.Campos=new T_Campos(); Decl.Tip =c; currentToken = lex.NextToken(); } catch (Exception ex) { throw ex; } if (currentToken.Tipo == TipoToken.TK_OPENCOR) //ARREGLO { int dim = arrayDimensions(1); Arreglo ArrTip = new Arreglo(); ArrTip.Contenido = Decl.Tip; ArrTip.Dimensiones = dim; Decl.Tip = ArrTip; if (currentToken.Tipo == TipoToken.TK_ID) { Decl.Var.id = currentToken.Lexema; currentToken = lex.NextToken(); if (currentToken.Tipo == TipoToken.TK_FINSENTENCIA) { currentToken = lex.NextToken(); return Decl; } try { Decl = DeclOption(Decl); } catch (Exception ex) { throw ex; } if (currentToken.Tipo != TipoToken.TK_FINSENTENCIA) { currentToken = lex.NextToken(); return Decl; } else { throw new Exception("Error Sintactico - Se esperaba Fin Sentencia"); } } else { throw new Exception("Error Sintactico - Se esperaba un ID"); } } else if (currentToken.Tipo == TipoToken.TK_ID) { Decl.Var.id = currentToken.Lexema; currentToken = lex.NextToken(); if (currentToken.Tipo == TipoToken.TK_COMA || currentToken.Tipo == TipoToken.TK_ASSIGN) { try { DeclaracionesVarias(Decl); DeclOption(Decl); } catch (Exception ex) { throw ex; } } else if (currentToken.Tipo == TipoToken.TK_OPENPAR) { currentToken = lex.NextToken(); S_Functions sFunctions = new S_Functions(); sFunctions.Retorno = Decl.Tip; sFunctions.Var = Decl.Var.id; try { sFunctions.Campo = ParameterList(); } catch (Exception ex) { throw ex; } if (currentToken.Tipo == TipoToken.TK_CLOSEPAR) { currentToken = lex.NextToken(); try { sFunctions.S = CompoundStatement(); } catch (Exception ex) { throw ex; } return sFunctions; } else { throw new Exception("Error Sintactico - Se esperaba simbolo )"); } } else if (currentToken.Tipo == TipoToken.TK_OPENLLAVE) { currentToken = lex.NextToken(); S_Class sClass = new S_Class(); sClass.Var.id = Decl.Var.id; try { sClass.CamposClase = ListaDeclaracion(sClass.CamposClase); } catch (Exception ex) { throw ex; } if (currentToken.Tipo != TipoToken.TK_CLOSELLAVE) throw new Exception("Error Sintactico - Se esperaba simbolo }"); currentToken = lex.NextToken(); return sClass; } else if (currentToken.Tipo == TipoToken.TK_FINSENTENCIA) { currentToken = lex.NextToken(); return Decl; } else throw new Exception("Error Sintactico - Se esperaba simbolo ;"); } return Decl; }