コード例 #1
0
ファイル: javaParser.cs プロジェクト: Khripper/compiladoresI
 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;
     }
 }
コード例 #2
0
ファイル: javaParser.cs プロジェクト: Khripper/compiladoresI
 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;
     }
 }
コード例 #3
0
ファイル: javaParser.cs プロジェクト: Khripper/compiladoresI
        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");
            }
        }
コード例 #4
0
ファイル: javaParser.cs プロジェクト: Khripper/compiladoresI
        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 [");
            }
        }
コード例 #5
0
ファイル: cParser.cs プロジェクト: Khripper/compiladoresI
        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;
        }
コード例 #6
0
ファイル: cParser.cs プロジェクト: Khripper/compiladoresI
        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 ;");
        }
コード例 #7
0
ファイル: cParser.cs プロジェクト: Khripper/compiladoresI
        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;
        }