Ejemplo n.º 1
0
        private void rightSideValue(GrammarParser.AssignmentContext context)
        {
            String newValue = "";

            if (context.Int() != null)
            {
                newValue = context.Int().GetText();
            }
            else if (context.Bool() != null)
            {
                newValue = BoolToInt(context.Bool().GetText());
            }
            else if (context.Double() != null)
            {
                newValue = context.Double().GetText();
            }

            Boolean isNeg = isNegative(newValue);
            String  value = removeUnaryOperator(newValue);

            AddLIT(value);
            if (isNeg)
            {
                AddOPR(Instruction.UNARY_MINUS);
            }

            /*int varLevel = retValTo.GetLevel();
             * int varAddress = retValTo.GetAddress();
             * int levelToMove = Math.Abs(level - varLevel);
             * AddSTO(levelToMove, varAddress);*/
        }
Ejemplo n.º 2
0
        private void rightSideVarConst(GrammarParser.AssignmentContext context)
        {
            String       rightSideName = context.Identifier(1).GetText();
            VarConstItem rightSideVar  = null;

            if (localSymbolTable.ContainsVarConstItem(rightSideName))
            {
                rightSideVar = localSymbolTable.GetVarConstItemByName(rightSideName);
            }
            else if (globalSymbolTable.ContainsVarConstItem(rightSideName))
            {
                rightSideVar = globalSymbolTable.GetVarConstItemByName(rightSideName);
            }
            else
            {
                Console.WriteLine("Promena na prave strane neexistuje");
            }

            int varLevel    = rightSideVar.GetLevel();
            int levelToMove = Math.Abs(level - varLevel);

            AddLOD(levelToMove, rightSideVar.GetAddress());

            /*varLevel = retValTo.GetLevel();
             * levelToMove = Math.Abs(level - varLevel);
             * AddSTO(levelToMove, retValTo.GetAddress());*/
        }
Ejemplo n.º 3
0
        public override int VisitAssignment([NotNull] GrammarParser.AssignmentContext context)
        {
            String retValToName = context.Identifier(0).GetText();

            if (localSymbolTable.ContainsVarConstItem(retValToName))
            {
                retValTo = localSymbolTable.GetVarConstItemByName(retValToName);
            }
            else if (globalSymbolTable.ContainsVarConstItem(retValToName))
            {
                retValTo = globalSymbolTable.GetVarConstItemByName(retValToName);
            }
            else
            {
                Console.WriteLine("Promena na levy strane neexistuje");
            }

            if (context.function_call() != null)
            {
                Console.WriteLine("PRAVA strana: function");
            }
            else if (context.expression() != null)
            {
                Console.WriteLine("PRAVA strana: expression");
            }
            else if (context.Identifier(1) != null)
            {
                Console.WriteLine("PRAVA strana: identifier");
                rightSideVarConst(context);
            }
            else  // jinak je na pravo nejaka hodnota int, double, bool
            {
                Console.WriteLine("PRAVA strana: int, double, bool hodnota");
                rightSideValue(context);
            }

            base.VisitAssignment(context);

            // pokud se neco returnuje, tady muzu resit kam to dat
            // z VisitFunction_return bude navrcholu zasobniku nejaky cislo, pokud teda bude
            // tyhle radky maj vsechny prirazeni spolecny, vsechny nechaj na vrcholu neco, co se potom musi storenout nekam (krome kdyz se jen vola fce)
            // funkce se jeste musi udelat pres tu specialni misto v pameti asi
            if (retValTo != null)
            {
                int varLevel    = retValTo.GetLevel();
                int varAddress  = retValTo.GetAddress();
                int levelToMove = Math.Abs(level - varLevel);
                AddSTO(levelToMove, varAddress);
            }

            /*int varLevel = retValTo.GetLevel();
             * int levelToMove = Math.Abs(level - varLevel);
             * AddSTO(levelToMove, retValTo.GetAddress());*/

            retValTo = null;

            return(0);
        }
Ejemplo n.º 4
0
 /// <summary>
 /// Exit a parse tree produced by <see cref="GrammarParser.assignment"/>.
 /// <para>The default implementation does nothing.</para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 public virtual void ExitAssignment([NotNull] GrammarParser.AssignmentContext context)
 {
 }
Ejemplo n.º 5
0
 /// <summary>
 /// Visit a parse tree produced by <see cref="GrammarParser.assignment"/>.
 /// <para>
 /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
 /// on <paramref name="context"/>.
 /// </para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 /// <return>The visitor result.</return>
 public virtual Result VisitAssignment([NotNull] GrammarParser.AssignmentContext context)
 {
     return(VisitChildren(context));
 }