Ejemplo n.º 1
0
 public override void Visit(AssignmentStatementNode node)
 {
     Console.WriteLine(this.indentation + "=          ---- Assignment Statement ----");
     indentation = indentation + "   ";
     node.identifier.Accept(this);
     node.expression.Accept(this);
     indentation = indentation.Substring(0, indentation.Length - 3);
 }
Ejemplo n.º 2
0
 public override void Visit(AssignmentStatementNode node)
 {
     node.expression.Accept(this);
     if (MethodBeingVisited.LocalVariables.Contains(node.identifier.name))
     {
         VariableDefinition LocalVariableDefinition = MethodBeingVisited.LocalVariables.Lookup(node.identifier.name);
         Gen("mov", "[ebp-" + LocalVariableDefinition.Location.ToString() + "]", "eax", "Assigning eax into variable " + LocalVariableDefinition.Name);
     }
     else if (MethodBeingVisited.Parameters.Contains(node.identifier.name))
     {
         ParameterDefinition parameterDefinition = MethodBeingVisited.Parameters.Lookup(node.identifier.name);
         Gen("mov", "[ebp+" + parameterDefinition.Location.ToString() + "]", "eax", "Assigning eax into parameter " + parameterDefinition.Name);
     }
     else
     {
         FieldDefinition fieldDefinition = Analysis.Environment.LookupFieldInClass(node.identifier.name, ClassBeingVisited);
         Gen("mov", "[ecx+" + fieldDefinition.Location.ToString() + "]", "eax", "Assigning eax into field " + fieldDefinition.Name);
     }
 }
Ejemplo n.º 3
0
 public virtual void Visit(AssignmentStatementNode node)
 {
     node.identifier.Accept(this);
     node.expression.Accept(this);
 }
Ejemplo n.º 4
0
        public override void Visit(AssignmentStatementNode node)
        {
            try
            {
                node.expression.Accept(this);

                if (!AreTypeCompatible(LookupSymbolType(node.identifier.name).GetType(), node.expression.ExpressionType.GetType()) ||
                (LookupSymbolType(node.identifier.name).GetType() == typeof(ClassType) && !IsClassCompatible((ClassType)LookupSymbolType(node.identifier.name), (ClassType)node.expression.ExpressionType)))
                    throw new Exception("Type Mismatch in Assignment Statement!");
            }
            catch (Exception e)
            {
                Analysis.LogSemanticError(e.Message, node.lineNumber);
            }
        }