GCC抽象语法树

该博客介绍了如何处理GCC的抽象语法树,包括将源文件读入同一行、规范化处理、建立抽象语法树的过程,并提供了相关的代码示例。通过读取文件、删除冗余字段和重新编号节点,最终输出消除冗余后的抽象语法树。
摘要由CSDN通过智能技术生成
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdlib>
#include <cctype>
#include <string>
using namespace std;
const int LINE=99999;
const int BUF_SIZE=1000;
int totalline=0;    //总行数
int useful[LINE]= {0};


//简单类型
const int STYPES_SIZE=3;
string simpleTypes[STYPES_SIZE]= {"integer_type","real_type","void_type"};



const int NODE_NUM=999;
int count=0;            //结点数组的结点个数
typedef struct eNode    
{
    string enode_name;
    int enode_value;

    eNode *next;
} eNode;
typedef struct vNode
{
    string vnode_name;
    int vnode_type;
    eNode *head;
} vNode;
vNode vnodelist[NODE_NUM];


int allude[NODE_NUM];       //编号映射数组
void toSameLine(const char* filename,const char* destname)
{
    ifstream fin(filename);
    ofstream fout(destname);
    if(!fout)
    {
        cout<<"create error";
        return;
    }
    if(!fin)
    {
        cout<<"open error";
        return;
    }
    char buf[BUF_SIZE];
    char tmp[BUF_SIZE];
    fin.getline(buf,1000);
    while(!fin.eof())
    {
        fin.getline(tmp,1000);
        if(tmp[0]=='@')
        {
            fout<<buf<<endl;
            totalline++;
            strcpy(buf,tmp);
        }
        else
        {
            strcat(buf,tmp);
        }
    }
    cout<<"写到一行完成!一共有"<<totalline<<"行"<<endl;
    fin.close();
    fout.close();
}
void pointToLine(ifstream &fp,int line) //将文件指针指向指定行
{
    fp.seekg(0L,ios::beg);
    char buf[BUF_SIZE];
    int i=0;
    for(; i<line; i++)
    {
        fp.getline(buf,BUF_SIZE);
    }
}
void regulateTree(const char* filename,const char* destname)
{
    ifstream fin(filename);
    if(!fin)
    {
        cout<<"open error"<<endl;
        return;
    }
    ofstream fout(destname);
    if(!fout)
    {
        cout<<"create error"<<endl;
        return ;
    }
    int i=0;
    char buf[BUF_SIZE];
    string str;
    while(!fin.eof())
    {
        fin.getline(buf,BUF_SI
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值