我在大学时分配了一个奇怪的项目。我被要求从一个给定的输入'C'程序中提取变量定义和引用。从'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是声明的,因此它必须打印在输出的“definition”列下。
类似地,在语句5中,a和b的值正在使用scanf语句进行初始化,因此应该在输出的定义列下打印变量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脚本的项目.. 我需要考虑数学表达式,逻辑表达式,内置函数调用,用户定义函数调用和函数定义。 。
在此先感谢..
这是为什么类的?这个练习的目的是什么? – 2011-04-16 12:46:26
@ ab07:“这类事情发生在我们的大学里”。你应该问“你(教授)期望我从这项任务中学到什么”?如果他希望你用除真正的解析器以外的其他方法来做到这一点,我会不知道他的期望是什么,以及是否有太多的指向。 5f他希望你用解析器来做,而且你不知道解析,你有麻烦。如果他希望你使用真正的解析器,我不明白左边距中的数字的重点;你确定这是要求的一部分吗? – 2011-04-16 12:50:45
这是非常不精确的。你用'if'做什么?你会跨多行传播if语句吗?那么它会不会违反“单行包含单一陈述”的规则?你把它放在同一行,然后嵌套在复合语句中嵌套多个语句吗?从而在同一行中有多个标量语句? – 2011-04-16 13:47:08