static Parser() { foreach (Type tipoPrimitivo in NuevaInstancia.TiposPrimitivos()) { string nombre = tipoPrimitivo.Name.ToLower(); tiposPrimitivos[nombre] = tipoPrimitivo; } }
private Expresion ParsearPunto() { Expresion resultado = ParsearId(); TokenType tipo = lexer.tokenActual.Type; switch (tipo) { case TokenType.punto: lexer.Aceptar(); string metodo = lexer.tokenActual.Valor; lexer.Aceptar(TokenType.id); if (lexer.tokenActual.Type != TokenType.lParentesis) { resultado = new IdConPunto(tablaDeSimbolos, (Id)resultado, metodo); bool siguienteEsUnPunto = lexer.tokenActual.Type == TokenType.punto; while (siguienteEsUnPunto) { lexer.Aceptar(); metodo = lexer.tokenActual.Valor; lexer.Aceptar(TokenType.id); if (lexer.tokenActual.Type != TokenType.lParentesis) { resultado = new PuntoConPunto((Punto)resultado, metodo); } else { lexer.Aceptar(TokenType.lParentesis); resultado = new PuntoConPunto((Punto)resultado, metodo, ParsearArgumentos()); lexer.Aceptar(TokenType.rParentesis); } siguienteEsUnPunto = lexer.tokenActual.Type == TokenType.punto; } } else { lexer.Aceptar(TokenType.lParentesis); resultado = new IdConPunto(tablaDeSimbolos, (Id)resultado, metodo, ParsearArgumentos()); lexer.Aceptar(TokenType.rParentesis); bool siguienteEsUnPunto = lexer.tokenActual.Type == TokenType.punto; while (siguienteEsUnPunto) { lexer.Aceptar(); metodo = lexer.tokenActual.Valor; lexer.Aceptar(TokenType.id); if (lexer.tokenActual.Type != TokenType.lParentesis) { resultado = new PuntoConPunto((Punto)resultado, metodo); } else { lexer.Aceptar(TokenType.lParentesis); resultado = new PuntoConPunto((Punto)resultado, metodo, ParsearArgumentos()); lexer.Aceptar(TokenType.rParentesis); } siguienteEsUnPunto = lexer.tokenActual.Type == TokenType.punto; } } break; case TokenType.lParentesis: lexer.Aceptar(); resultado = new NuevaInstancia(libraries, tablaDeSimbolos, (Id)resultado, ParsearArgumentos()); lexer.Aceptar(TokenType.rParentesis); break; } return(resultado); }