我想将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