资源简介
用c语言实现的语法语义分析程序 实现了四元式得生成功能齐全
代码片段和文件信息
#include
#include
#include
#include
#include
struct stake1
{ char *s[15];
int top;
} chstake;/*运算元素栈*/
struct stake2
{ char ch[20];
int sjb[20];
int top;
} ysstake;/*运算符号栈*/
struct lgstake1
{ char ch[10];
int top;
}logfh;/*逻辑运算符号栈*/
struct lgstake2
{ int ysbh[10];
int top;
}logys;/*逻辑运算元素*/
struct syshi/*四元式队列*/
{ char *s[4];
int bhao;
struct syshi *next;
}yshead*ystail;/*头节点和尾指针*/
int sysnumbhlogopr;/*四元式个数和临时变量个数*/
int truelinkfalselinktchuko;
void pushys(char *stemp) /*运算元素进栈*/
{ int ln;
ln=strlen(stemp);
chstake.s[chstake.top]=(char *)malloc((ln+1)*sizeof(char));
strcpy(chstake.s[chstake.top]stemp);
chstake.top++;
}
void pushsf(char ch1int jb)/*运算符进栈*/
{ ysstake.ch[ysstake.top]=ch1;
ysstake.sjb[ysstake.top]=jb;
ysstake.top++;
}
char *popys() /*运算元素出栈*/
{ char *tp;
chstake.top--;
tp=chstake.s[chstake.top];
chstake.s[chstake.top]=NULL;
return(tp);
}
char popsf() /*运算符出栈*/
{ char ctemp;
ysstake.top--;
ctemp=ysstake.ch[ysstake.top];
return(ctemp);
}
void back(int t1int t2)
{ struct syshi *temp3;
int bh3t0;
bh3=t1;
while(bh3!=0)
{ temp3=yshead.next;
while(temp3->bhao!=bh3) temp3=temp3->next;
sscanf(temp3->s[0]“%d“&bh3);
sprintf(temp3->s[0]“%d“t2);
}
}
void batch()
{ struct syshi *temp1*temp2*temp3;
int bh1bh2bh3i=0;
char ch1;
while(i { bh1=logys.ysbh[i];
temp1=yshead.next;
while(temp1->bhao!=bh1) temp1=temp1->next;
ch1=logfh.ch[i];
if(ch1==‘&‘)
{ bh3=truelink;
truelink=0;
back(bh3bh1+2);
sprintf(temp1->s[0]“%d“bh1+2);
temp1=temp1->next;
sprintf(temp1->s[0]“%d“falselink);
falselink=bh1+1;
}
if(ch1==‘|‘)
{ sprintf(temp1->s[0]“%d“truelink);
truelink=bh1;
temp1=temp1->next;
bh3=falselink;
falselink=0;
back(bh3bh1+2);
sprintf(temp1->s[0]“%d“bh1+2);
}
i++;
}
temp2=yshead.next;
bh2=logys.ysbh[logys.top-1];
while(temp2->bhao!=bh2) temp2=temp2->next;
sprintf(temp2->s[0]“%d“truelink);truelink=bh2;
temp2=temp2->next;
sprintf(temp2->s[0]“%d“falselink);falselink=bh2+1;
logys.top=0;
}
void logysh()
{ struct syshi *temp;
temp=ystail;
temp->next=(struct syshi *)malloc(sizeof(struct syshi));
temp=temp->next;
temp->bhao=100+bh;
logys.ysbh[logys.top++]=100+bh;
bh++;
temp->s[0]=(char *)malloc(8*sizeof(char));
strcpy(temp->s[0]“----“);
temp->s[1]=(char *)malloc(2*sizeof(char));
strcpy(temp->s[1]“ “);
temp->s[2]=(char *)malloc(8*sizeof(char));
sprintf(temp->s[2]“if %s goto“popys());
temp->s[3]=(char *)malloc(2*sizeof(char));
strcpy(temp->s[3]“ “);
temp->next=(struct syshi *)malloc(sizeof(struct syshi));
temp=temp->next;
temp->bhao=100+bh;bh++;
temp->s[0]=(char *)malloc(8*sizeof(char));
strcpy(te
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 17332 2005-01-17 14:22 新建文件夹\run.exe
文件 8977 2005-01-17 14:20 新建文件夹\source.c
文件 80896 2005-01-15 17:00 新建文件夹\翻译.exe
目录 0 2005-03-31 10:35 新建文件夹
----------- --------- ---------- ----- ----
107205 4
- 上一篇:飞机订票系统delphi源代码
- 下一篇:交通旅行模拟
相关资源
- 算术表达式的语法分析及语义分析程
- 编译原理词法分析程序代码
- 编译原理实验 语义分析与中间代码
- 简单的词法分析程序
- 编译原理 语法分析器
- SAMPLE语言词法分析器
- 无符号数的词法分析程序
- 递归下降分析法的实现
- 词法分析器含代码及实验报告
- 语义分析实验报告 经典
- 编译原理实验----词法分析、分析预测
- 自顶向下的语法分析器
- 四川大学编译原理课程设计报告C-词法
- 编译原理,词法分析&语法分析及源代
- 赋值语句词法和语法分析程序
- 《编译原理》课程设计指导书 算术表
- yacc实现的语法分析器
- 语法分析器实验报告
- 编译原理实验报告 词法分析器实验报
- 编译原理——语法分析器递归下降分
- LL(1)语法分析 任意输入一个文法符
- 编译课程设计报告通过编程实现语法
- 词法分析 设计
- 编译原理 递归下降语法分析程序代码
- 编译原理大作业 完整编译器
- 编译原理--词法分析器+语法分析器 源
- pl0语法分析器
- LR(0)语法分析的实现
- PL/0语言词法及语法分析系统的设计与
- LR(0)完整的语法分析方法(拓广文
评论
共有 条评论