天天看點

簡單c語言編譯器(編譯原理),簡單C語言編譯器(編譯原理)

char mark_name;

int state;

int num;

int line;

struct Sign *link;

struct Word *next;

};

FILE *fp1;//檔案指針

int row=1,line[10000],Lin[300],w_num;//字元行變量、字元行、單詞所在行、字元數char buffer[10000];//字元串緩沖區

Stack *MarkPush(Stack *ip,char mark,int I_i)//壓棧

{

Stack *s;

s=(Stack *)malloc(sizeof(Stack));

s->name=mark;

s->num=I_i;

s->next=ip;

ip=s;

return ip;

}

void MarkPop(Stack *ip)//出棧

{

Stack *q;

char name;

name=ip->name;

q=ip->next;

if(ip->next!=NULL)

{

ip->name=ip->next->name;

ip->num=ip->next->num;

ip->next=ip->next->next;

free(q);

}

}

int judge(char ch)// 接收ch判斷字元,變量flag傳回字元類别

{

int flag;

if(ch=='!'||ch=='$'||ch=='&'||ch=='*'||ch=='('||ch==')'||ch=='-'||ch=='_'||

ch=='+'||ch=='='||ch=='|'||ch=='{'||ch=='}'||ch=='['||ch==']'||ch==';'||

ch==':'||ch=='"'||ch==''||ch=='.'||ch=='/'||ch=='\'')

flag=1;

else if('0'<=ch&&ch<='9')