请考虑以下语法:
stmt -> if expr then else expr; stmt | ε
expr -> term relop term | term
term -> id | number
id -> a | b | c
number -> [0-9]
其中relop是关系运算(例如<>,…。),ε表示空语句,如果
,然后是,否则就是终端。
考虑遵循上述语法的包含十个if端子的程序P。数字
P中的控制流路径为____________。
例如程序
if e1 then e2 else e3
有2个控制流路,e 1- > e 2和e 1- > e 3
(A) 20
(B) 1024
(C) 2048
(D) 10答案: (B)
说明: 10个终端(如果有)的控制流路数
- 如果
然后 别的 ; stmt - 如果
然后 别的 ;如果 然后 别的 ; stmt - …………..
- 如果
10次。
观察每个if结构后面都有一个分号。
由于,每个if结构都有2个控制流。
因此,第一个终端有2个控制流,
第二终端有2个控制流,
第三终端有2个控制流,
…………..
第9终端有2条控制流,
第10个终端有2个控制流。
利用计数的乘法定律,我们得到
= 2 * 2 * 2 * 2 * 2……10次= 2 ^ 10 = 1024(如果有端子)的控制流路数。
1024是正确答案。
这个问题的测验