簡體   English   中英

使用CFG進行乘法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM