[英]Multiplying using a CFG
我正在嘗試使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;
盡管您當然可以使用CSG,但您將無法使用CFG做到這一點。 泵引理足以證明不可能。
如果b
是固定的,則很容易:
S ⇒ ε S ⇒ 0 S 1 1 … 1 (b times)
那將識別形式的字符串
0a1a·b
這是CFG可以實現乘法的唯一意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.