过程调用的基本形式为
CALL S(A+B,Z)
翻译成指令形式:
K-4 : {T := A+B}
K-3 : {PAR T}
K-2 : {PAR Z}
K-1 : {CALL S}
K: ...
文法G:
1. S -> CALL I(arglist) //arglist表示传参表
2. arglist -> arglist1 , E
3. arglist -> E
具体语义动作:
1. S -> CALL i(arglist)
{
FOR 队列 arglist.QUEUE的每一项P DO
GEN(PAR , - , - , P); //对每一个参数都传送到队列里面
GEN(CALL , - , - ,ENTRY(i)); //最后进行过程调用,并且把参数传送过去
}
2. arglisst -> arglist1 , E
{
把E.PLACE 排在 arglist1.QUEUE的末端
arglist.QUEUE := arglist1.QUEUE;
}
3. arglist -> E
{
建立一个arglist.QUEUE ,它只包含E.PLACE;
}