예제 #1
0
        /// <summary>
        /// 初始化变量表
        /// </summary>
        /// <param name="varTable">变量表</param>
        /// <param name="fourExpList">四元式列表</param>
        /// <param name="varNameList">变量表中变量名的列表</param>
        private void initVarTable(VarTable varTable, List <FourExp> fourExpList, List <string> varNameList)
        {
            short address = 0x0000;

            foreach (string varName in varNameList)
            {
                //初始化变量表中的变量地址和活跃信息域
                varTable.SetAddr(varName, address);
                address += 4;
                //varTable.ClearRefeInfo(varName);
                varTable.ClearActInfo(varName);
                varTable.PushActInfo(varName, false);
                //varTable.PushRefeInfo(varName, -1);
            }
            //扫描四元式表,在变量表中填入相关信息
            int count  = fourExpList.Count;
            int length = count;

            for (int i = length; i != 0; i--)
            {
                string A = fourExpList[i].Result;
                string B = fourExpList[i].Arg1;
                string C = fourExpList[i].Arg2;
                if (A != "")
                {
                    //varTable.PushRefeInfo(A, -1);
                    varTable.PushActInfo(A, false);
                }
                if (B != "")
                {
                    //varTable.PushRefeInfo(B, count);
                    varTable.PushActInfo(B, true);
                }
                if (C != "")
                {
                    //varTable.PushRefeInfo(C, count);
                    varTable.PushActInfo(C, true);
                }
                count--;
            }
        }