资源简介
语义分析 编译原理 语义分析 编译原理 语义分析 编译原理
代码片段和文件信息
#include
#include
#include
char prog[80]token[8];
char ch;
int synpmnsum;
int kk=0iiNnn=0;
int k=0ti=0;
char tt;
char * rwtab[6] = {“begin““if““then““while““do““end“};
int scaner();
int lrparser();
int statement();
int yucu();
char *term();
char *factor();
char *expression();
void emit();
struct
{
char resulted[8];
char ag1ed[8];
char oped[8];
char ag2ed[8];
}quad[20];
void main()
{
p=0;
printf(“\n please input string: \n“);
do
{
scanf(“%c“&ch);
prog[p++]=ch;
}while(ch != ‘#‘);
p=0;
scaner();
lrparser();
}
char * newtemp( void)
{
char * P;
char M[8];
P = (char *)malloc(8);
k++;
itoa(kM10);
strcpy(P+1M);
P[0] = ‘t‘;
return(P);
}
int lrparser()
{
int schain = 0;
kk = 0;
if(syn == 1)
{
scaner();
schain = yucu();
if(syn = 6)
{
scaner();
if(syn == 0 && (kk == 0))
printf(“success“);
}
else
{
if(kk!=1)
printf(“缺end错误“);
kk=1;
}
}
else
{
printf(“begin错误“);
kk=1;
}
return(schain);
}
int yucu()
{
int schain = 0;
schain = statement();
while (syn == 26)
{
scaner();
schain = statement();
}
return(schain);
}
int statement()
{
char tt[8]eplace[8];
int schain = 0;
switch(syn)
{
case 10:
strcpy(tttoken);
scaner();
if(syn == 18)
{
scaner();
strcpy(eplaceexpression());
emit(tteplace““““);
schain = 0;
}
else
{
printf(“缺少赋值号“);
kk=1;
}
return(schain);
break;
}
}
char * expression(void)
{
char * tp* ep2* eplace* tt;
tp = (char *)malloc(12);
ep2 = (char *)malloc(12);
eplace = (char *)malloc(12);
tt = (char *)malloc(12);
strcpy(eplaceterm());
while(syn == 13 || syn == 14)
{
strcpy(tttoken);
scaner();
strcpy(ep2term());
strcpy(tpnewtemp());
emit(tpeplacettep2);
strcpy(eplacetp);
}
return(eplace);
}
char * term(void)
{
char * tp* ep2* eplace* tt;
tp = (char *)malloc(12);
ep2 = (char *)malloc(12);
eplace = (char *)malloc(12);
tt = (char *)malloc(12);
strcpy(eplacefactor());
while(syn == 15 || syn == 16)
{
strcpy(tttoken);
scaner();
strcpy(ep2factor());
strcpy(tpnewtemp());
emit(tpeplacettep2);
strcpy(eplacetp);
}
return(eplace);
}
char * factor(void)
{
char * fplace;
fplace = (char *)malloc(12);
strcpy(fplace“ “);
if(syn == 10)
{
strcpy(fplacetoken);
scaner();
}
else if (syn == 11)
{
itoa(sumfplace10);
scaner();
}
else if(syn == 27)
{
scaner();
strcpy(fplaceexpression());
if(syn == 28)
scaner();
else
{
printf(“‘)‘错误“);
kk=1;
}
}
else
{
printf(“‘(‘错误“);
kk=1;
}
return(fplace);
}
void emit(char * resultchar * ag1char * opchar * ag2)
{
strcpy(quad[nn].resultedresult);
strcpy(quad[nn].ag1edag1);
strcpy(quad[nn].opedop);
strcpy(quad[nn].ag2edag2);
printf(“(%d)
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 33792 2008-12-22 19:19 语义分析\Debug\vc60.idb
文件 45056 2008-12-22 19:19 语义分析\Debug\vc60.pdb
文件 192597 2008-12-22 19:19 语义分析\Debug\yyfx.exe
文件 187932 2008-12-22 19:19 语义分析\Debug\yyfx.ilk
文件 18376 2008-12-22 19:19 语义分析\Debug\yyfx.obj
文件 190640 2008-12-22 19:19 语义分析\Debug\yyfx.pch
文件 369664 2008-12-22 19:19 语义分析\Debug\yyfx.pdb
文件 4639 2008-12-02 10:24 语义分析\yyfx.c
文件 3375 2008-12-22 19:19 语义分析\yyfx.dsp
文件 516 2008-12-22 19:20 语义分析\yyfx.dsw
文件 33792 2008-12-22 19:20 语义分析\yyfx.ncb
文件 48640 2008-12-22 19:20 语义分析\yyfx.opt
文件 1423 2008-12-22 19:19 语义分析\yyfx.plg
文件 77312 2008-12-02 11:44 语义分析\语义分析实验报告200631000715刘明志.doc
目录 0 2008-12-22 19:19 语义分析\Debug
目录 0 2008-12-22 19:20 语义分析
----------- --------- ---------- ----- ----
1207754 16
- 上一篇:cadence运算放大器的仿真
- 下一篇:医院选址问题
相关资源
- 北京工业大学编译原理实验
- 华科计算机2015编译原理试卷及答案
- 编译原理语法分析中的算符优先编译
- 编译原理LL(1)分析法
- 编译原理实验报告及源码,LR1 活前缀
- 布尔表达式的语法分析及语义分析程
- 编译原理 算符优先文法 实验报告 代
- 编译原理__语义分析_实验报告
- 语义分析代码
- 编译原理大作业 源码
- 编译原理pl\\0词法分析程序
- 语义分析之中文关键词提取
- 编译原理实验2-LL1分析法实现
- 编译原理实验词法分析器、中间代码
- 编译原理课程设计--编译器
- 编译课设-词法分析,语法分析.zip
- 简易编译器,实现词法分析,语法分
- tiny词法分析,语法分析,语义分析,
- 编译原理 算符优先分析程序
- 编译原理-非递归预测实验-C代码实现
- 编译原理实验
- 编译原理自顶向下语法分析源代码+实
- 编译原理布尔表达式计算器
- LR语法分析器
- 编译原理语法制导翻译器 课程设计
- 编译原理——语法分析器
- 编译原理实验指导书
- 第四次上机—自下而上的语法分析
- 编译原理预测分析法语法分析程序
- 编译课程设计算数表达式转换成四元
评论
共有 条评论