关于删除/替换结构

时间:2019-06-06 13:58:53

标签: c compiler-construction abstract-syntax-tree

我有一个使用struct的C语言代码,包括用于初始化结构的函数和函数调用。现在,我想删除结构的使用。由于代码执行问题,大量代码和复杂的结构,我无法手动更改它们。功能和结构,所以我必须找到一种自动化的方法。以下代码是一个简单的示例。 有什么更好的方法或想法吗?

#include<stdio.h>

struct A
{
  int a;
  int b;
};

struct A add(int x, int y)
{
  struct A t;
  t.a = x + y;
  return t;
}

int main()
{
  struct A t = add(3, 4);
  printf("t.a = %ld\n", t.a);
  return 0;
}

收件人:

#include<stdio.h>

int main()
{
  int A_a = 3;
  int A_b = 4;
  int A_a_b = A_a + A_b;
  printf("%d\n", A_a_b);
  return 0;
}

1 个答案:

答案 0 :(得分:-1)

您尝试过antlr吗?

我想您想将代码重构到下面。

包括

/*
struct A
{
  int a;
  int b;
};
*/

/*
struct A add(int x, int y)
{
  struct A t;
  t.a = x + y;
  return t;
}
*/

int main()
{
/*
  struct A t = add(3, 4);
*/  
  int A0_t_a; //t.a
  int A0_t_b; //t.b
  {
    //add(3, 4)
    int x = 3;
    int y = 4;

    //struct A t;
    int A1_t_a;
    int A1_t_b;

    //t.a = x + y
    A1_t_a = x + y;

    //return t
    A0_t_a = A1_t_a;
    A0_t_b = A1_t_b;
  }

/*
  printf("t.a = %ld\n", t.a);
*/
  printf("t.a = %ld\n", A0_t_a);  
  return 0;
}