Exemplo n.º 1
0
        public Access Accesories(Access List)
        {
            try
            {
                if (currentToken.Tipo == Lexico.TipoToken.TK_PUNTO)
                {
                    currentToken = lex.NextToken();
                    if (currentToken.Tipo != Lexico.TipoToken.TK_ID)
                        throw new Exception("Error Sintactico  -- Se esperaba un ID");
                    Lexico.Token tmp = currentToken;
                    currentToken = lex.NextToken();
                    if (currentToken.Tipo == Lexico.TipoToken.TK_OPENCOR)
                    {
                        AccessArreglo accAr = new AccessArreglo();
                        accAr.Cont = ArrayDim(accAr.Cont);
                        accAr.nombre = tmp.Lexema;
                        List = accAr;
                        List.Next = Accesories(List.Next);
                    }
                    else
                    {

                        AccessMiembro accM = new AccessMiembro();
                        accM.Id = tmp.Lexema;
                        List = accM;
                        //currentToken = lex.NextToken();
                        List.Next = Accesories(List.Next);
                    }
                }
                else if (currentToken.Tipo == Lexico.TipoToken.TK_OPENCOR)
                {
                    AccessArreglo accAr = new AccessArreglo();
                    accAr.Cont = ArrayDim(accAr.Cont);
                    List = accAr;
                    List.Next = Accesories(List.Next);
                }
                else if (currentToken.Tipo == Lexico.TipoToken.TK_OPENPAR)
                {
                    currentToken = lex.NextToken();
                    AccessFunc accFun = new AccessFunc();
                    ListaExpre listaExpre = new ListaExpre();
                    Expresiones e = Expression();
                    if (e != null)
                        listaExpre.Ex.Add(e);
                    if (listaExpre.Ex.Count > 0)
                        accFun.Variables = ExpreList(listaExpre);
                    List = accFun;
                    if (currentToken.Tipo != Lexico.TipoToken.TK_CLOSEPAR)
                        throw new Exception("Error Sintactico -- Se esperaba simbolo )");
                    currentToken = lex.NextToken();
                    return List;
                }
                return List;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Exemplo n.º 2
0
        public Access Accesories(Access List)
        {
            try
            {
                if (currentToken.Tipo == TipoToken.TK_PUNTO)
                {
                    currentToken = lex.NextToken();
                    if (currentToken.Tipo != TipoToken.TK_ID)
                        throw new Exception("Error Sintactico - Se Esperaba un ID");
                    AccessMiembro accM = new AccessMiembro();
                    accM.Id = currentToken.Lexema;
                    List = accM;
                    currentToken = lex.NextToken();
                    List.Next = Accesories(List.Next);
                    Access a = Accesories(List.Next);

                }
                else if (currentToken.Tipo == TipoToken.TK_OPENCOR)
                {
                    AccessArreglo accAr = new AccessArreglo();
                    accAr.Cont = ArrayDim(accAr.Cont);
                    List = accAr;
                    List.Next = Accesories(List.Next);
                }
                else if (currentToken.Tipo == TipoToken.TK_OPENPAR)
                {
                    currentToken = lex.NextToken();
                    AccessFunc accFun = new AccessFunc();
                    ListaExpre listaExpre = new ListaExpre();
                    Expresiones e = Expr();
                    if (e != null)
                        listaExpre.Ex.Add(e);
                    //if (listaExpre.Ex.Count > 0)
                    //{
                    accFun.Variables = ExprList(listaExpre);
                    List = accFun;
                    if (currentToken.Tipo != TipoToken.TK_CLOSEPAR)
                        throw new Exception("Error Sintactico - Se Esperaba un )");
                    currentToken = lex.NextToken();
                    return List;
                    /*}
                    else
                    {
                        if (currentToken.Tipo != TipoToken.TK_CLOSEPAR)
                            throw new Exception("Error Sintactico - Se Esperaba un )");
                        currentToken = lex.NextToken();
                        return null;
                    }*/
                }
                return List;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Exemplo n.º 3
0
 public ListaExpre ExpreList(ListaExpre E)
 {
     try
     {
         if (currentToken.Tipo == Lexico.TipoToken.TK_COMA)
         {
             currentToken = lex.NextToken();
             ((ListaExpre)E).Ex.Add(Expression());
             return ExpreList(E);
         }
         else
         {
             return ((ListaExpre)E);
         }
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
Exemplo n.º 4
0
        public Sentencia SentenciaASSIGN_LLAMFUNC()
        {
            if (currentToken.Tipo == TipoToken.TK_ID)
            {
                Variable var = new Variable(currentToken.Lexema, null);
                currentToken = lex.NextToken();
                if (currentToken.Tipo == TipoToken.TK_PUNTO || currentToken.Tipo == TipoToken.TK_OPENCOR)
                {
                    try
                    {
                        Access a = Accesories(var.accesor);
                        var.accesor = a;
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                }
                if (currentToken.Tipo == TipoToken.TK_ASSIGN || currentToken.Tipo == TipoToken.TK_MASIGUAL || currentToken.Tipo == TipoToken.TK_MENOSIGUAL || currentToken.Tipo == TipoToken.TK_PORIGUAL || currentToken.Tipo == TipoToken.TK_ENTREIGUAL)
                {
                    S_Asignacion sAssig = new S_Asignacion();
                    if (currentToken.Tipo == TipoToken.TK_ASSIGN)
                        sAssig.Op = new Igual();
                    else if (currentToken.Tipo == TipoToken.TK_MASIGUAL)
                        sAssig.Op = new MasIgual();
                    else if (currentToken.Tipo == TipoToken.TK_MENOSIGUAL)
                        sAssig.Op = new MenosIgual();
                    else if (currentToken.Tipo == TipoToken.TK_PORIGUAL)
                        sAssig.Op = new PorIgual();
                    else if (currentToken.Tipo == TipoToken.TK_ENTREIGUAL)
                        sAssig.Op = new EntreIgual();
                    currentToken = lex.NextToken();

                    sAssig.id = var;
                    try
                    {
                        sAssig.Valor = Expr();
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                    if (currentToken.Tipo != TipoToken.TK_FINSENTENCIA)
                        throw new Exception("Error Sintactico - Se esperaba fin sentencia");
                    currentToken = lex.NextToken();
                    return sAssig;
                }
                else if (currentToken.Tipo == TipoToken.TK_ID)
                {
                    Declaracion Decl = new Declaracion();
                    Class TipClass = new Class();
                    TipClass.Nombre = var.id;

                    Variable vVar = new Variable(currentToken.Lexema, null);

                    Decl.Var = vVar;
                    Decl.Tip = TipClass;
                    currentToken = lex.NextToken();
                    if (currentToken.Tipo != TipoToken.TK_FINSENTENCIA)
                        throw new Exception("Error Sintactico - Se esperaba fin sentencia");
                    currentToken = lex.NextToken();
                    return Decl;
                }
                else if (currentToken.Tipo == TipoToken.TK_OPENPAR)
                {
                    currentToken = lex.NextToken();
                    S_LlamadaFunc sLlamadaFunc = new S_LlamadaFunc();
                    sLlamadaFunc.Var = var;
                    if (currentToken.Tipo == TipoToken.TK_CLOSEPAR)
                    {
                        currentToken = lex.NextToken();
                        if (currentToken.Tipo != TipoToken.TK_FINSENTENCIA)
                            throw new Exception("Error Sintactico - Se esperaba fin sentencia");
                        currentToken = lex.NextToken();
                        return sLlamadaFunc;
                    }
                    else
                    {
                        //VERIFICAR VIENE UN LITERAL O VARIABLE Y AGREGARLO LUEGO LLAMAR EXPRLIST PARA QUE AGREGUE LO DEMAS Y VERIFICAR CLOSEPAR
                        if (currentToken.Tipo == TipoToken.TK_ID || currentToken.Tipo == TipoToken.TK_INT_LIT || currentToken.Tipo == TipoToken.TK_FLOAT_LIT || currentToken.Tipo == TipoToken.TK_STRING_LIT || currentToken.Tipo == TipoToken.TK_CHAR_LIT)
                        {
                            ListaExpre listaExpre = new ListaExpre();
                            try
                            {
                                listaExpre.Ex.Add(Expr());
                            }
                            catch (Exception ex)
                            {
                                throw ex;
                            }
                            if (currentToken.Tipo == TipoToken.TK_COMA)
                            {
                                try
                                {
                                    sLlamadaFunc.Variables = ExprList(listaExpre);
                                }
                                catch (Exception ex)
                                {
                                    throw ex;
                                }
                                if (currentToken.Tipo == TipoToken.TK_CLOSEPAR)
                                {
                                    currentToken = lex.NextToken();
                                    if (currentToken.Tipo != TipoToken.TK_FINSENTENCIA)
                                        throw new Exception("Error Sintactico - Se esperaba fin sentencia");
                                    currentToken = lex.NextToken();
                                    return sLlamadaFunc;
                                }
                                else
                                {
                                    throw new Exception("Error Sintatico - Se esperaba simbolo )");
                                }
                            }
                            else
                            {
                                sLlamadaFunc.Variables = listaExpre;
                                if (currentToken.Tipo == TipoToken.TK_CLOSEPAR)
                                {
                                    currentToken = lex.NextToken();
                                    if (currentToken.Tipo != TipoToken.TK_FINSENTENCIA)
                                        throw new Exception("Error Sintactico - Se esperaba fin sentencia");
                                    currentToken = lex.NextToken();
                                    return sLlamadaFunc;
                                }
                                else
                                {
                                    throw new Exception("Error Sintatico - Se esperaba simbolo )");
                                }
                            }
                        }
                    }
                }
                else if (currentToken.Tipo == TipoToken.TK_MASMAS)
                {
                    currentToken = lex.NextToken();
                    s_masmas sMasmas = new s_masmas();
                    ExpMasMas expMasMas = new ExpMasMas();
                    expMasMas.ID = var;
                    sMasmas.param = expMasMas;
                    return sMasmas;
                }
                else if (currentToken.Tipo == TipoToken.TK_MENOSMENOS)
                {
                    currentToken = lex.NextToken();
                    s_menosmenos sMenosmenos = new s_menosmenos();
                    ExpMenosMenos expMenosMenos = new ExpMenosMenos();
                    expMenosMenos.ID = var;
                    sMenosmenos.param = expMenosMenos;
                    return sMenosmenos;
                }
                else
                {
                    if (currentToken.Tipo != TipoToken.TK_FINSENTENCIA)
                        throw new Exception("Error Sintactico - Se esperaba fin sentencia");
                    currentToken = lex.NextToken();
                    if (var.accesor.Last() is AccessFunc)
                    {
                        S_LlamadaFunc sLlamadaFunc = new S_LlamadaFunc();
                        sLlamadaFunc.Var = var;
                        return sLlamadaFunc;
                    }
                }

            }
            return null;
        }