考虑以下语法:
stmt -> if expr then else expr; stmt | ε
expr -> term relop term | term
term -> id | number
id -> a | b | c
number -> [0-9]
其中relop是一个关系操作(例如 < >, ….),ε 指的是空语句,如果
, then , else是终结符。
考虑遵循上述语法的程序 P 包含十个 if 终端。号码
P 中控制流路径的数量是____________。
例如,程序
if e1 then e2 else e3
有 2 个控制流路径,e 1 -> e 2和 e 1 -> e 3
(一) 20
(二) 1024
(三) 2048
(四) 10答案:(乙)
说明: 10 个 if终端的控制流路径数
- 如果
然后 别的 ; stmt - 如果
然后 别的 ;如果 然后 别的 ; stmt - ………………
- 如果
10倍。
请注意,每个 if 结构后面都有一个分号。
因为,每个 if 结构都有 2 个控制流。
因此,第一个终端有 2 个控制流,
第二个终端有2个控制流,
第三个终端有2个控制流,
…………
第 9 个终端有 2 个控制流,
第10个终端有2个控制流。
使用计数乘法,我们得到
= 2*2*2*2*2……10 次 = 2^10 = 1024 个控制流路数, 10 个 if终端。
1024是正确答案。
这个问题的测验