改写后的文法为 A→V:=E V→i| Elist] Elist-→E|Eit1E E→E1opE21(E1)V
改写后的文法为: A→V:=E V→i│Elist] Elist→i[E│Elist1 ,E E→E1 op E2│-E1│(E1 )│V
3.翻译方案 (1)新的语义变量和过程 V place:简单变量的存储地址 或数组元素的 CONSPART Voffset: null 或数组元素的 VARPART
3. 翻译方案 (1)新的语义变量和过程 V.place:简单变量的存储地址 或 数组元素的CONSPART V.offset:null 或 数组元素的VARPART
Elist array:记录数组名 Elist place:记录归约过程中Ⅴ ARPART的 中间结果 Elist dim:记录当前处理这一维的序号 getc( list. array):从内情向量中取数组的 CONSPART limit( Elist array, k):从内情向量中取数组 第k维的维长
Elist.array:记录数组名 Elist.place:记录归约过程中VARPART的 中间结果 Elist.dim:记录当前处理这一维的序号 getc(Elist.array):从内情向量中取数组的 CONSPART limit(Elist.array,k):从内情向量中取数组 第k维的维长
(2)两条新的四元式 变址取数 (,TI[门,,X) 相当于X:=T[ 变址存数 ([=,,Ⅹ,T1[T] 相当于T1[T]:=X
(2)两条新的四元式 变址取数 (=[],T1[T],_,X) 相当于X:=T1[T] 变址存数 ([]=,_,X,T1[T]) 相当于T1[T]:=X
(3)语义子程序 V→1 i P: =lookup(i name) fpenil then begin V place: p Voffset: -null end else error j
(3)语义子程序 V→i { P:=lookup(i.name); if P<>nil then begin V.place:=P; V.offset:=null end else error }