资源简介
语义分析 编译原理 语义分析 编译原理 语义分析 编译原理

代码片段和文件信息
#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运算放大器的仿真
- 下一篇:医院选址问题
相关资源
- 编译原理实验工具及参考源码(lex&
- 类pascal语言编译器(编译原理实验)
- 编译原理课程设计:词法语法编译器
- 中科院 编译原理 习题及解答
- 编译原理四元式和逆波兰式
- 《编译原理》清华大学版中的pl0扩充
- PL/0功能扩充break功能
- 编译原理LR(0)语法分析
- 编译原理中间代码生成程序
- 编译原理:LR分析程序
- 编译原理实验:词法分析,语法分析
- 吉林大学编译原理课件
- 编译原理龙书答案
- 编译原理 第三章课后习题答案
- 易语言变量和数组的编译原理
- 编译原理语法分析器、词法分析器
- 山东大学编译原理PL/0语言 compiler实验
- FOR循环语句的翻译程序设计简单优先
- NFA的确定化NFA->DFA完整可运行代码
- 哈工大威海编译原理实验报告和源代
- 哈工大威海-编译原理实验报告和源码
- 编译原理课设c编译器
- 赋值语句翻译四元式
- 河北工业大学编译原理实验代码及实
- 情感和语义分析最全中文数据库
- 编译原理课程设计 while do循环语句翻
- 编译原理课程设计do——while简单优先
- 南开大学编译原理课件及作业
- 华工往年编译原理试卷
- 编译原理课程设计for循环LR法三元式
评论
共有 条评论