简单C语言编译器(编译原理)
(26页)
本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!
14.90 积分
#include#include#include#include#include#include#include#include#define NULL 0struct Stack // 栈结构体: 序号、内容、连接下一结点指针{ int num; char name; struct Stack *next;};struct Guiyue// 规则集结构体:序号、规则长度、符号、连接下一结点指针{ int num; int count; char name; struct Guiyue *next;};struct Relation // 分析表结构体:状态序号、对应符号列、操作类型的对应序号、操作类型、连接下一结点指针{ int line_States ; char rank_Letter; int relationship; char name; struct Relation *next;};struct Sign // 符号表结构体: 自变量名、标识类型、连接下一结点指针{ char name[20]; char kind; struct Sign *next;};struct Word // 单词表结构体: 单词名字、标识类型、状态、序号、行号、连接符号表指针、连接下一结点指针{ char name[20]; 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=='{'||c-省略部分-==NULL){ g_head=FirstGuiyue();//从文件中读取文法语句,打印文法 r_head=FirstRelation();//生成LR分析表 } //if (flag==3) { Print(flag,head,fp2,r_head); continue; } if(goon==2){ goon=ResultAnely(r_head,s_head,str,g_head,cal);//语法分析 FindWordDeclare(head);//检查正确性,判断符号是否对称 } // if (flag==3) continue; system("pause"); flag++; FourStyle(goon,head);//生成四元式(4) flag=0; // } fclose(fp1); fclose(fp2);}li.txtvoid main (){ int a,b,x,y,max;a=9;b=8; while(a>b){ b=a+a;a=a-1;}x=a+b; y=b+b;if(x>y) { max=x;}else {max=y; }}liyoubu.txtvoid main (){ int a,b,x,2x,y,max;a=9;b=8; b1=8; while(a>b){ b=a*a;a=a-1;}x=a+b; y=b+b;if(x>y) { max=x}else {max=y; }}}LR.txt[Terminator] m v ( ) { } i = ; f e w a b c d , & | # @ + - * / n[NonTerminator] B Q S A C X Y Z E H G L I K T F[Starter] B[Precept]00、B->Q01、Q->v m ( ) { A }02、S->C ; S03、A->S A04、A->S05、C->C ; X06、C->X07、X->Y Z08、Y->a09、Y->b10、Y->c11、Y->d12、Z->i , i13、Z->i14、S->f ( E ) { A } e { A }15、S->w ( E ) { A }16、S->i = L ;17、E->E & H18、E->H19、H->H | G20、H->G21、G->i i > i23、G->i # i24、G->i @ i25、G->( E )26、G->! E27、G->i28、L->L + I29、L->I30、I->I - K31、I->K32、K->K / T33、K->K34、T->T * F35、T->F36、F->( L )37、F->n38、F->i【本文档内容可以自由复制内容或自由编辑修改内容期待你的好评和关注,我们将会做得更好】最新范本,供参考! 关 键 词: 编译器 c语言 编译 简单 原理
天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。