public Campos ParameterList() { if (currentToken.Tipo == TipoToken.TK_CHAR || currentToken.Tipo == TipoToken.TK_BOOL || currentToken.Tipo == TipoToken.TK_STRING || currentToken.Tipo == TipoToken.TK_FLOAT || currentToken.Tipo == TipoToken.TK_INT) { Campos C = new Campos(); C.Tip = Type(); if (currentToken.Tipo == TipoToken.TK_ID) { C.Var.id = currentToken.Lexema; currentToken = lex.NextToken(); C.Sig = ParameterListP(); return C; } else { throw new Exception("Error Sintactico - Se esperaba un identificador"); } } else { return null; } }
public Campos ParameterListP() { if (currentToken.Tipo == TipoToken.TK_COMA) { Campos C1 = new Campos(); currentToken = lex.NextToken(); C1.Tip = Type(); if (currentToken.Tipo == TipoToken.TK_ID) { C1.Var.id = currentToken.Lexema; currentToken = lex.NextToken(); C1.Sig = ParameterListP(); return C1; } else { throw new Exception("Error Sintactico - Se esperaba un identificador"); } } else { return null; } }
public Sentencia DeclarationP(Sentencia C) { if (currentToken.Tipo == TipoToken.TK_COMA) { currentToken = lex.NextToken(); Campos CP = new Campos(); if (currentToken.Tipo == TipoToken.TK_ID) { Variable Var = new Variable(); Var.id = currentToken.Lexema; currentToken = lex.NextToken(); C.sig = DeclarationP(CP); return C; } else { throw new Exception("Error Sintactico - Se esperaba un identificador"); } } else if (currentToken.Tipo == TipoToken.TK_ASSIGN) { return AssignDeclaration(C); } else if (currentToken.Tipo == TipoToken.TK_OPENPAR) { currentToken = lex.NextToken(); S_Functions sFunctions = new S_Functions(); sFunctions.Retorno = ((Campos)C).Tip; sFunctions.var.id = ((Campos)C).Var.id; sFunctions.Campo = ParameterList(); if (currentToken.Tipo == TipoToken.TK_CLOSEPAR) { currentToken = lex.NextToken(); sFunctions.S = CompoundStatement(); return sFunctions; } else { throw new Exception("Error Sintactico - Se esperaba simbolo )"); } } else if (currentToken.Tipo == TipoToken.TK_FINSENTENCIA) { currentToken = lex.NextToken(); return C; } else { throw new Exception("Error Sintactico - Se esperaba un fin sentencia"); } }
public Sentencia Declaration() { VARTYPE(); Campos C = new Campos(); C.Tip = Type(); if (currentToken.Tipo == TipoToken.TK_ID) { C.Var.id = currentToken.Lexema; currentToken = lex.NextToken(); Sentencia S = DeclarationP(C); return S; } else if (currentToken.Tipo == TipoToken.TK_OPENCOR) { currentToken = lex.NextToken(); if (currentToken.Tipo == TipoToken.TK_CLOSECOR) { currentToken = lex.NextToken(); if (currentToken.Tipo == TipoToken.TK_ID) { C.Dimension = 1; C.Var.id = currentToken.Lexema; currentToken = lex.NextToken(); if (currentToken.Tipo == TipoToken.TK_FINSENTENCIA) { currentToken = lex.NextToken(); return C; } else { throw new Exception("Error Sintactico - Se esperaba fin sentencia ;"); } } else { throw new Exception("Error Sintactico - Se esperaba un identificador"); } } else { throw new Exception("Error Sintactico - Se esperaba un simbolo ]"); } } else { throw new Exception("Error Sintactico - Se esperaba un identificador o simbolo ["); } }
public Campos ParametroListP() { if (currentToken.Tipo == Lexico.TipoToken.TK_COMA) { Campos c = new Campos(); currentToken = lex.NextToken(); c.Tip= Tipo(); if (currentToken.Tipo != Lexico.TipoToken.TK_ID) throw new Exception("Se esperaba el token ID"); c.Var.id = currentToken.Lexema; currentToken = lex.NextToken(); c.Sig= ParametroListP(); return c; } return null; }
public Sentencia DeclarationP(Sentencia campos) { if (currentToken.Tipo == Lexico.TipoToken.TK_COMA) { currentToken = lex.NextToken(); Campos c = new Campos(); if (currentToken.Tipo != Lexico.TipoToken.TK_ID) throw new Exception("Se esperaba el token ID"); c.Var.id = currentToken.Lexema; currentToken = lex.NextToken(); campos.sig=DeclarationP(c); return campos; } else if (currentToken.Tipo == Lexico.TipoToken.TK_ASSIGN) { S_Asignacion sasignacion = new S_Asignacion(); sasignacion.id.id = ((Campos)campos).Var.id; currentToken = lex.NextToken(); sasignacion.Valor= Expression(); return DeclarationP(sasignacion); } else if (currentToken.Tipo == Lexico.TipoToken.TK_OPENPAR) { S_Functions sfunciones = new S_Functions(); currentToken = lex.NextToken(); sfunciones.Retorno = ((Campos)campos).Tip; sfunciones.var.id = ((Campos)campos).Var.id; sfunciones.Campo= ParametroList(); if (currentToken.Tipo != Lexico.TipoToken.TK_CLOSEPAR) throw new Exception("Se esperaba el token )"); currentToken = lex.NextToken(); sfunciones.S= CompoundStatement(); return sfunciones; } else if (currentToken.Tipo == Lexico.TipoToken.TK_FINSENTENCIA) { currentToken = lex.NextToken(); return campos; } else throw new Exception("Se esperaba el token ;"); }
public Campos Declaration() { Campos campos = new Campos(); campos.Tip= Tipo(); if (currentToken.Tipo != Lexico.TipoToken.TK_ID) throw new Exception("Se esperaba el token ID"); campos.Var.id = currentToken.Lexema; currentToken = lex.NextToken(); DeclarationP(campos); return campos; }