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; } }
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; } }
public ListaExpre ExprListP(Expresiones E) { if (currentToken.Tipo == TipoToken.TK_COMA) { currentToken = lex.NextToken(); Expresiones E1 = Expr(); return ExprListP(E1); } else { ListaExpre LE = new ListaExpre(); LE.Ex.Add(E); return LE; } }
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; }
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; } }