P2509 [SCOI2008] 警告
题目描述
有一个简单的脚本语言,只有赋值语句、条件语句和返回语句三种。变量名必须是单个大写字母,且变量都是 $32$ 位带符号整数。
该语言的每条语句必须单独占一行。程序中不含空行,且每行的行首行末均无空格。每行的不同 token 之间用单个空格隔开。该语言的 BNF 如下:
```cpp
:: | | | ELSE | END IF |
:: PARAM | PARAM
:: =
:: IF THEN
:: RETURN
:: |
:: |
:: |
:: + | - | * | /
:: < | = | >
:: A | B | ... | Z
:: 不含前导 0 的 32 位带符号整数
```
程序的第一行是一条 `` 语句,定义了函数的参数,而最后一行一定是 `` 语句。`` 语句不能在除了第一行之外的其他任何地方出现,但 `` 语句可以在程序中多次出现。行号从 $1$ 开始编号。
每条 `IF` 语句一定有一个配套的 `END IF` 语句,还有一个可选的 `ELSE` 语句(注意没有 `ELSE IF` 语句)。`IF` 语句可以嵌套,它总是比较一个变量和一个整数或者另一个变量。
你应该分析一个给定的程序,并输出两类警告信息(格式见样例输出):
- 第一类警告:无法到达的代码行。不管各条 `IF` 语句的布尔表达式是真还是假(假设每条 `IF` 语句的布尔表达式都是既可能为真也可能为假,不受其他 `IF` 语句结果影响)。
- 第二类警告:可能未初始化的变量。该语句用到了某个变量的值,但这个变量既不在第一行指定的参数列表里,也没有在此之前由赋值语句赋值过。如果这条语句无法到达,那么不应该给出这类警告。
注意,语句 `ELSE` 和 `END IF` 不是可执行语句,因此不应该收到任何警告信息。
输入格式
无
输出格式
无