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"); }
public virtual void Visit(ArrayAssignmentStatementNode node) { node.identifier.Accept(this); node.indexExpression.Accept(this); node.assignExpression.Accept(this); }