天天看点

简单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')