Пример #1
0
 static Parser()
 {
     foreach (Type tipoPrimitivo in NuevaInstancia.TiposPrimitivos())
     {
         string nombre = tipoPrimitivo.Name.ToLower();
         tiposPrimitivos[nombre] = tipoPrimitivo;
     }
 }
Пример #2
0
        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);
        }