關於相互遞迴呼叫

2022-05-01 23:45:19 字數 571 閱讀 3389

在編譯原理的語法分析中,很多文法都是遞迴形式給出的。

假設有如下文法:

g[f]:

f→fg

g→gf

判斷字串 a 是否滿足的程式如下:

int f(int

pos)

int g(int

pos)

intmain()

return0;

}

易知,這個程式輸出總為 -1,因為不存在有限長的 f,f = fgf.

反過來,要想結果輸出的不是 -1,f的結果是g(pos+1),g的結果又是f,不可能從這個圈推出。

如果我們給 f/g 增加乙個可行出口,就能找到滿足條件的有限長的字串。

例如文法改成:

g[f]:

f→fg | a

g→gf

int f(int

pos)

int g(int

pos)

此時,像 fgfga 這樣的就滿足條件了。

可見,相互遞迴呼叫有可行輸出的條件是,乙個函式的可行輸出不是唯一的。

互動遞迴和丘齊數

上次說到丘齊數 的時候並沒有提到怎麼定義後繼函式,succ n n 1。這兩天讀pierced的書 順便說一句,這本types and programming languages的敘述清晰,推理自然,符號也用得非常簡約。相比那本principles of program analysis,peirc...

互動遞迴和丘齊數

上次說到丘齊數的時候並沒有提到怎麼定義後繼函式,succ n n 1。這兩天讀pierced的書 順便說一句,這本types and programming languages的敘述清晰,推理自然,符號也用得非常簡約。相比那本principles of program analysis,peirce...

關於iOS app之間相互呼叫

待有時間整理 還是複製咱貼吧 顯示連線 之後是 檢測已經安裝 cpp view plain copy bool if url host isequaltostring com.taobao.dgb return yes 由於url是自己定義的,所以會存在url重複的情況。經過測試發現,如果試圖開啟這...