|*iden[number.number/*指针数组*/ { $$=Enty($1): VarList[$$].CAT=Arrayi/*种属为数组*/ VarList[$$].IsPointer=1; VarList[$$].ADDR->DIM=1;/*记录维数.下面的填写工作与上一 产生式相同,注释略*/ VarList[$$].ADDR->Vector=malloc(5*sizeof(int)); VarList[$$].ADDR->Vector[2]=$4;/*第一维下界*/ VarList[$$].ADDR->Vector[3]=$6;/*第一维上界*/ VarList[$$].ADDR->Vector[4]=$6-$4+1/*第一维界差*/
| *iden [ number .. number /*指针数组*/ { $$=Entry($1); VarList[$$].CAT=Array;/*种属为数组*/ VarList[$$].IsPointer=1; VarList[$$].ADDR->DIM=1;/*记录维数. 下面的填写工作与上 一 产生式相同,注释略*/ VarList[$$].ADDR->Vector=malloc(5*sizeof(int)); VarList[$$].ADDR->Vector[2]=$4;/*第一维下界*/ VarList[$$].ADDR->Vector[3]=$6;/*第一维上界*/ VarList[$$].ADDR->Vector[4]=$6-$4+1/*第一维界差*/ }
ArrayMSG,number .number int dim=VarList[$$].ADDR->DIM+1;=1; VarList[$$].ADDR->DIM++;/*维数加1*/ /*下面增加向量空间,记录新一维的信息*/ VarList[].ADDR->Vector= realloc (VarList[$$].ADDR->Vector, (3*dim+2)*sizeof(int)); /*下面记录当前维的下、上界及界差*/ VarList[$$].ADDR->Vector[3*dim-1]=$3; VarList[].ADDR->Vector[3*dim]=$5; VarList[$$].ADDR->Vector[3*dim+1]=$5-$3+1;
| ArrayMSG , number .. number {int dim= VarList[$$].ADDR->DIM+1; $$=$1; VarList[$$].ADDR->DIM++;/*维数加1*/ /*下面增加向量空间,记录新一维的信息*/ VarList[$$].ADDR->Vector= realloc (VarList[$$].ADDR->Vector, (3* dim+2)*sizeof(int)); /*下面记录当前维的下、上界及界差*/ VarList[$$].ADDR->Vector[3*dim-1]=$3; VarList[$$].ADDR->Vector[3*dim]=$5; VarList[$$].ADDR->Vector[3*dim+1]=$5-$3+1; }