c语言编译器下载 天天,简单C语言编译器(编译原理)

62e50291a81fc54b507f33cb80033297.gif 简单C语言编译器(编译原理)

(26页)

7c21fbe61fc03e4caa5147f2c0be9672.gif

本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!

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语言 编译 简单 原理

524d6daf746efaa52c3c71bbfe7ba172.gif  天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值