我正在尝试制作一个与以下功能等效的 CFG。我知道 B 是循环计数器,因此它可能是推入堆栈的一系列元素,每次循环完成时,都会弹出 B 中的一个元素,并且如果 B = Epsilon 退出。如何处理 while 循环上半部分的加法?
PROCEDURE multiply a, b;
VAR a, b, z;
BEGIN
z := 0;
WHILE b > 0 DO BEGIN
z := a + z;
b := b - 1;
END
RETURN z;
END;