public override void Visit(ArrayAssignmentStatementNode node)
 {
     Console.WriteLine(this.indentation + "=           ---- Array Assignment Statement ----");
     indentation = indentation + "   ";
     Console.WriteLine(this.indentation + "<Array>[<Index>]");
     indentation = indentation + "   ";
     Console.WriteLine(this.indentation + "Array");
     indentation = indentation + "   ";
     node.identifier.Accept(this);
     indentation = indentation.Substring(0, indentation.Length - 3);
     Console.WriteLine(this.indentation + "Index");
     indentation = indentation + "   ";
     node.indexExpression.Accept(this);
     indentation = indentation.Substring(0, indentation.Length - 6);
     node.assignExpression.Accept(this);
     indentation = indentation.Substring(0, indentation.Length - 3);
 }
        public override void Visit(ArrayAssignmentStatementNode node)
        {
            try
            {
                if (!AreTypeCompatible(LookupSymbolType(node.identifier.name).GetType(), typeof(ArrayType)))
                    throw new Exception("Array Identifier '" + node.identifier.name + "' is not an array!");

                node.identifier.Accept(this);
                node.indexExpression.Accept(this);
                node.assignExpression.Accept(this);

                if (!AreTypeCompatible(node.indexExpression.ExpressionType.GetType(), typeof(IntType)))
                    throw new Exception("Index Expression's Type is not Int!");
                if (!AreTypeCompatible(node.assignExpression.ExpressionType.GetType(), typeof(IntType)))
                    throw new Exception("Assigned Expression's Type is not Int!");
            }
            catch (Exception e)
            {
                Analysis.LogSemanticError(e.Message, node.lineNumber);
            }
        }
 public override void Visit(ArrayAssignmentStatementNode node)
 {
     GetValueOfIdentifier(node.identifier.name, "edx");
     Gen("push", "edx");
     node.indexExpression.Accept(this);
     Gen("pop", "edx");
     Gen("lea", "edx", "[edx+4*eax+4]");
     Gen("push", "edx");
     node.assignExpression.Accept(this);
     Gen("pop", "edx");
     Gen("mov", "[edx]", "eax");
 }
Exemple #4
0
 public virtual void Visit(ArrayAssignmentStatementNode node)
 {
     node.identifier.Accept(this);
     node.indexExpression.Accept(this);
     node.assignExpression.Accept(this);
 }