【发布时间】:2011-04-16 09:29:21
【问题描述】:
我在大学被分配了一个奇怪的项目。我被要求从给定的输入“C”程序中提取变量定义和引用。
输入程序中的每一行都在开头包含各自的行号,后跟一个空格,然后实际代码开始。
考虑以下程序..
1 int main()
2 {
3 int a,b,c;
4 printf("Enter the values of a and b\n");
5 scanf("%d%d",&a,&b);
6 c=a+b;
7 printf("The sum of two numbers is %d",c);
8 }
我正在开发的程序的输入是一个“C”程序,其中单行由一个语句组成.. 即,我们知道整个程序可以写在一行中。但不是在我的情况下,即一旦有终止符(分号),分号后面的行就会转移到下一行..
无论如何,我的工作是在给定的输入 C 程序中提取变量定义/声明和变量使用/引用..
考虑上面的程序, 在第 3 行,声明了变量 a、b 和 c,因此它必须打印在输出的“定义”列下。..
同样在语句 5 中,使用 scanf 语句初始化 a 和 b 的值,因此变量 a 和 b 应该打印在输出的定义列下。..
现在考虑语句 6,变量 c 的值正在被初始化/定义,因此 c 必须打印在定义列下。同时,a 和 b 的值被用于确定 c 的值,因此变量 a 和 b 必须打印在输出的“参考”列下..
最后,变量 c 的值在语句 7 中被引用/使用,因此变量 c 必须打印在引用的列下..
程序的示例输出如下所示..
Line Number Defined Variable Referenced Variable
_____________________________________________________________________
1 -- --
2 -- --
3 a,b,c --
4 -- --
5 a,b --
6 c a,b
7 -- c
8 -- --
谁能告诉我如何解决这个问题???? 请记住,我需要编写一个 C/C++ 程序,甚至项目允许使用 shell 脚本。 我需要考虑数学表达式、逻辑表达式、内置函数调用、用户定义的函数调用和函数定义......
提前谢谢..
【问题讨论】:
-
这是给什么样的课的?而这个练习的目的是什么?
-
@ab07:“这类事情发生在我们的大学里”。你应该问“你(教授)希望我从这个作业中学到什么”?如果他希望您使用真正的解析器以外的任何东西来执行此操作,我想知道他的期望是什么,以及这是否有很多意义。 5f 他希望你用解析器来做,而你不知道解析,你有麻烦了。如果他希望您使用真正的解析器,我不明白左边距数字的意义;你确定这是要求的一部分吗?
-
这是非常不精确的。你用
if做什么?您会将 if 语句分布在多行吗?那么它不会违反“单行由单语句组成”的规则吗?您是否将其保留在同一行,然后将多个语句嵌套在嵌套的复合语句中?从而在同一行中有多个标量语句? -
@Ira.. 是的,他希望我从给定的“C”程序中提取定义和引用。我们都知道数据流图是什么。在其中,每个节点都被分配定义和引用..数据流图中的每个节点都代表 C 程序中的一条语句..所以肯定它必须对解析做一些事情..是的,一个真正的解析器..是的,数字非常重要..所以必须探索这些东西..我是一名计算机科学专业的学生..中级..
-
@Johannes 不!我们如何将“if”语句分布在多行中!?! if(condition) 在一条语句中..