Example #1
0
 Object VisitDesignatorStatementDecrementoAST(designatorStatementDecrementoAST var, object arg)
 {
     int numaux = ((Integer)arg).intValue(); printtab(numaux); System.out.println(c.getClass().getName());  if(c.- !=null)  c.-.visit(this,new Integer(numaux+1)); else{printtab(numaux+1);  Console.WriteLine(“NULL”);} return null;
 }
Example #2
0
        public statementAST parseStat()
        {
            //Statement
            //case id
            designatorAST desig = null;
            exprAST expr = null;
            actParsAST actP = null;
            designatorStatementAumentoAST aum = null;
            designatorStatementDecrementoAST decr = null;
            Boolean actPBoo = false;
            //case if
            conditionAST condi = null;
            statementAST stat = null;
            statementAST stat2 = null;
            Boolean elseBoo = false;
            listStatementsAST tempStat,tempStat2, result;
            exprAST forexpr1 = null;
            conditionAST forexpr2 = null;
            exprAST forexpr3 = null;
            statementAST forstat = null;
            switch (currentToken.sym)
            {
                case sym.ID:
                    {
                       desig=parseDesignator();
                        switch (currentToken.sym)
                        {
                            case sym.IGUAL:
                                {
                                    acceptIt();
                                    expr=parseExpr();
                                    break;
                                }
                            case sym.P_ABI:
                                {
                                    acceptIt();
                                    if (currentToken.sym == sym.RES || currentToken.sym == sym.ID || currentToken.sym == sym.NUM || currentToken.sym == sym.CHARCONS || currentToken.sym == sym.TRUE || currentToken.sym == sym.FALSE || currentToken.sym == sym.NEW || currentToken.sym == sym.P_ABI)
                                    {
                                       actP=parseActPars();
                                       actPBoo = true;
                                    }
                                    accept(sym.P_CER, ")");
                                    break;
                                }
                            case sym.SUM_SUM:
                                {
                                    aum = new designatorStatementAumentoAST();
                                    acceptIt();
                                    break;
                                }
                            case sym.IGU_IGU:
                                {
                                    decr = new designatorStatementDecrementoAST();
                                    acceptIt();
                                    break;
                                }
                                accept(sym.PYCOMA, ";");
                            //Designator ( "=" Expr | "(" [ ActPars ] ")" | "++" | "--" ) ";"
                        }
                        if (expr != null)
                        {
                            return new designatorStatementAsignacionAST(expr);
                        }
                        else

                            if (actP != null)
                            {
                                return new designatorStatementUnActParsAST(actP); //revisar
                            }

                        else

                        if (actPBoo == true)
                        {
                            return new designatorStatementUnActParsAST(actP); //revisar
                        }

                        else

                        if (actPBoo==false)        //analizar posible fallo
                        {
                            return new designatorStatementSinActParsAST();
                        }

                        break;
                    }

                case sym.IF:
                    {
                        accept(sym.IF, "if");
                        accept(sym.P_ABI, "(");
                        condi=parseCondition();
                        accept(sym.P_CER, ")");
                        stat=parseStat();
                        //tempStat = new unStatementAST(stat);
                        if (currentToken.sym == sym.ELSE)
                        {
                            elseBoo=true;
                            stat2 = parseStat();

                        }
                        if (elseBoo == true)
                        {
                           return new ifStatementConELseAST (condi,stat,stat2);

                        }
                        else {
                          return new ifStatementSinELseAST(condi,stat);
                               }
                        break;
                    }

                case sym.FOR:
                    {
                        accept(sym.FOR, "for");
                        accept(sym.P_ABI, "(");
                        forexpr1=parseExpr();
                        accept(sym.PYCOMA, ";");
                        if (currentToken.sym == sym.RES || currentToken.sym == sym.ID || currentToken.sym == sym.NUM || currentToken.sym == sym.CHARCONS || currentToken.sym == sym.TRUE || currentToken.sym == sym.FALSE || currentToken.sym == sym.NEW || currentToken.sym == sym.P_ABI)
                        {

                            forexpr2 = parseCondition();
                        }
                        accept(sym.PYCOMA, ";");
                        if (currentToken.sym == sym.RES || currentToken.sym == sym.ID || currentToken.sym == sym.NUM || currentToken.sym == sym.CHARCONS || currentToken.sym == sym.TRUE || currentToken.sym == sym.FALSE || currentToken.sym == sym.NEW || currentToken.sym == sym.P_ABI)
                        {
                            forexpr3=parseExpr();
                        }
                        accept(sym.PYCOMA, ";");
                       forstat=parseStat();
                        if(forexpr2!=null && forexpr3==null){
                            return new forStatementConConditionAST(forexpr1, forexpr2,forstat);
                        }

                        if (forexpr3 != null && forexpr2==null)
                        {
                            return new forStatementConFuntionAST(forexpr1, forexpr3, forstat);
                        }
                        if (forexpr3 == null && forexpr2==null)
                        {
                            return new forStatementSoloDeclAST(forexpr1, forstat);
                        }
                        if (forexpr3 != null && forexpr2!=null)
                        {
                            return new forStatementConCondFuntAST(forexpr1, forexpr2, forexpr3, forstat);
                        }

                        break;

                    }

                case sym.WHILE:
                    {
                        accept(sym.WHILE, "WHILE");
                        accept(sym.P_ABI, "(");
                        condi = parseCondition();
                        accept(sym.P_CER, ")");
                        stat = parseStat();
                         return new whileStatementAST(condi,stat);
                        break;
                    }
                case sym.BREAK: {
                    accept(sym.PYCOMA);
                break;
                }
                case sym.RETURN:
                    {   Boolean ind=false;
                        acceptIt();
                        if (currentToken.sym == sym.RES || currentToken.sym == sym.ID || currentToken.sym == sym.NUM || currentToken.sym == sym.CHARCONS || currentToken.sym == sym.TRUE || currentToken.sym == sym.FALSE || currentToken.sym == sym.NEW || currentToken.sym == sym.P_ABI)
                        {
                           expr=parseExpr();
                            ind=true;
                        }
                        accept(sym.PYCOMA, ";");
                        if (ind == true)
                        {
                            return new returnStatementConExprAST(expr);
                        }
                        else {

                            return new returnStatementSinExprAST();
                        }
                        break;
                    }

                case sym.READ:
                    {
                        acceptIt();
                        accept(sym.P_ABI, "(");
                       desig=parseDesignator();

                        accept(sym.P_CER, ")");
                        accept(sym.PYCOMA, ";");
                        return new readStatementAST(desig); //revisar este return
                        break;

                    }
                case sym.WRITE:
                    {
                        accept(sym.P_ABI, "(");
                        expr=parseExpr();
                        Symbol tempsimbol=null;
                        if (currentToken.sym == sym.COMA)
                        {
                            accept(sym.COMA, ",");
                            tempsimbol=currentToken;
                            accept(sym.NUM, "number");
                           }
                        accept(sym.P_CER, ")");
                        accept(sym.PYCOMA, ";");
                        if (tempsimbol != null)
                        {
                            return new writeStatementConNumAST(tempsimbol, expr);
                        }
                        else
                        {
                            return new writeStatementSinNumAST(expr);
                        }
                        //                    "write" "(" Expr [ "," number ] ")" ";"

                    }
                case sym.COR_A:
                    {
                    parseBlock();
                    break;
                     }
                case sym.PYCOMA:
                    {
                acceptIt();
                break;
                     }

            }

            return null;
        }