我想將CFG展示給高級代碼。通常這很容易;走樹,依次渲染每個基本塊,然後用gotos將它們粘在一起。將CFG展平爲結構化代碼
不幸的是,goto的都是過時的這些日子裏,和最現代化的語言不支持他們。因此,我需要一些方法來使用語言中存在的那些控制流程語句將我的基本塊粘合在一起:for
,while
,do
... while
, if
,break
和continue
。 (我不願意考慮使用變量來構建一個狀態機)。
看來雖然有算法可以做到這一點,但他們會在每種情況下都會使用而不是。也就是說,可以僅使用上述有限的控制流結構來構造不能平滑到結構化代碼的CFG。
這似乎直觀明顯,我,但我不能證明這一點(和我發現沒有進入更詳細的算法文檔)。而我一直無法找到一個不能像這樣變平的CFG的例子。
我想知道,如果這是可能的話。
方案(a):沒有任何人有如上所述不能被扁平化CFG的實例? (這會告訴我這是不可能的。)
選項(b):是否有人證明CFGs 可以如上所述變平? (這會告訴我,它是可能)。一個算法做到這一點也是非常可取的,因爲我將不得不使它工作...
爲什麼不建立一個使用變量的狀態機?僅僅因爲你沒有提到它......你是否知道結構化編程定理? – Patrick87 2012-01-14 23:00:02
使用變量的狀態機速度很慢。這就是我現在看到的,但是一些簡單的基準測試表明,我正在浪費大約30%的CPU時間,只是洗牌。此外,我已經知道如何做到這一點,所以不需要在此處詢問... – 2012-01-14 23:09:26