public override void VisitMatAssignOperationElement(MatMul element)
    {
        //String s=element.getLhs();

        VisitElement(element.getRhs());
    }
    public override void VisitMatAssignOperationElement(MatMul element)
    {
        VisitElement(element.getRhs());
        VisitElement(element.getLhs());
        resultMessage += "Processing Matrix Assignment Operation"+"\n";
        Thread[] threads=new Thread[resrows];
        if (operation.CompareTo("*") == 0)
        {
            for (int i = 0; i < resrows; i++)
            {
                ParameterizedThreadStart pts = new ParameterizedThreadStart(threadMul);
                threads[i] = new Thread(pts);
                threads[i].Start(new ThrInd(i));
            }
        }
        else if (operation.CompareTo("+") == 0)
        {
            for (int i = 0; i < resrows; i++)
            {
                ParameterizedThreadStart pts = new ParameterizedThreadStart(threadAdd);
                threads[i] = new Thread(pts);
                threads[i].Start(new ThrInd(i));
            }

        }

        foreach (Thread t in threads)
        {
            while (t.IsAlive)
                continue;
        }

        for (int i = 0; i < resrows ; i++)
        {
            arrvalue += "[";
            Console.WriteLine("Arrvalue is{0}",arrvalue);
            for (int j = 0; j < rescolumns ; j++)
            {
                Console.Write("{0} \t",res[i,j]);
                resultMessage += string.Format("{0} \t", res[i, j]);
                arrvalue += string.Format("{0}",res[i,j]);
                if (j + 1 == rescolumns)
                { }
                else
                    arrvalue += ",";

            }
            arrvalue += "]";
            Console.Write("\n");
            resultMessage += "\n";
        }

        Console.WriteLine("Printing value of s in MatAssignOperation: {0} which is {1}",s,arrvalue); // to be removed
        arrVariableMap[s] = arrvalue;
        arrvalue = "";
    }