从“C”程序中提取变量定义和变量引用

时间:2011-04-16 09:29:22

标签: c++ c parsing shell

我在大学时被分配了一个奇怪的项目。我被要求从给定的输入“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程序中提取变量定义/声明和变量use / reference ..

考虑上述计划, 在第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脚本用于项目.. 我需要考虑数学表达式,逻辑表达式,内置函数调用,用户定义函数调用和函数定义。

提前致谢..

2 个答案:

答案 0 :(得分:1)

要做的标准事情是编写一个tokenizer和一个解析器来部分编译你的输入程序。然后你就会知道每一行上有什么表达式。出于此分配的目的,您可以将正则表达式匹配到:

  1. 变量定义
  2. 变量参考
  3. 并吐出每一行的捕获。因此,例如,变量引用可能类似于“除了有效的C数据类型之外的任何地方的有效C标识符”。这里的捕获将是“有效的C标识符”,因此只需在“参考变量”列下打印出来。

答案 1 :(得分:1)

你基本上需要从一个完整的C解析器开始。您可以自己编写,但最好使用预先存在的内容,例如CLang