资源简介
用c语言实现的语义分析器,包括实验报告和代码。
代码片段和文件信息
#include “stdio.h“
#include “string.h“
char prog[100]token[8]ch;
char *rwtab[6]={“begin““if““then““while““do““end“};
int synpmnsumq;
int kk;
struct { char result1[8];
char ag11[8];
char op1[8];
char ag21[8];
} quad[20];
char *factor();
char *expression();
int yucu();
char *term();
int statement();
int lrparser();
char *newtemp();
scaner();
emit(char *resultchar *ag1char *opchar *ag2);
main()
{ int j;
q=p=kk=0;
printf(“\nplease input a string (end with ‘#‘): “);
do
{ scanf(“%c“&ch);
prog[p++]=ch;
}while(ch!=‘#‘);
p=0;
scaner();
lrparser();
if(q>19)printf(“ to long sentense!\n“);
else for (j=0;jgetch();
}
int lrparser()
{ int schain=0;
kk=0;
if (syn==1)
{ scaner();
schain=yucu();
if(syn==6)
{ scaner();
if((syn==0)&&(kk==0)) printf(“Success!\n“);
}
else { if(kk!=1)printf(“short of ‘end‘ !\n“);
kk=1;
getch();
exit(0);
}
}
else { printf(“short of ‘begin‘ !\n“);
kk=1;
getch();
exit(0);
}
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;
if (syn==10)
{ strcpy(tttoken);
scaner();
if(syn==18)
{ scaner();
strcpy(eplaceexpression());
emit(tteplace““““);
schain=0;
}
else { printf(“short of sign ‘:=‘ !\n“);
kk=1;
getch();
exit(0);
}
return (schain);
}
}
char *expression()
{ 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))
{ if (syn==13)strcpy(tt“+“);
else strcpy(tt“-“);
scaner();
strcpy(ep2term());
strcpy(tpnewtemp());
emit(tpeplacettep2);
strcpy(eplacetp);
}
return (eplace);
}
char *term()
{ 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))
{ if (syn==15)strcpy(tt“*“);
else strcpy(tt“/“);
scaner();
strcpy(ep2factor());
strcpy(tpnewtemp());
emit(tpeplacettep2);
strcpy(eplacetp);
}
return (eplace);
}
char *factor()
{ 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();
fplace=expression();
if(syn==28) scaner();
else { printf(“error on ‘)‘ !\n“);
kk=1;
getch();
exit(0);
}
}
else { printf(“error on ‘(‘ !\n“);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 56573 2013-05-29 20:34 语义分析报告.docx
文件 4785 2012-06-22 17:32 语义分析.c
- 上一篇:C语言课程设计 俄罗斯方块源程序
- 下一篇:c语言课程设计——图书管理系统
相关资源
- ASR6500,ASR6505原厂测试代码
- LCD驱动芯片ST7701SI SPI接口底层驱动配
- stm32库函数代码自动生成器V1.2
- USB CAN Tool 源代码(LabVIEW 2011环境)
- 超声波水表源代码
- 一个模糊PID温度控制算法源代码
- 颜色识别形状识别STM103嵌入式代码
- PE文件操作代码
- 数据结构 图的遍历源代码
- 数据结构实验源代码集
- 实验报告:数据结构长整数四则运算
- 高性能服务器代码(50_06th_server_thre
- olsr协议代码
- TCP/IP客户端和服务器端源代码,好用
- 代码雨.cpp
- 基于opencv的模板匹配代码
- 交互式计算机图形学 第六版 OpenGL源代
- 数据结构教程李春葆第五版书中例题
- 三次样条插值类源代码!
- 高精度加法(c++代码)
- diy写字机grbl v1.1源代码
- ftp工具代码
- C语言常用代码(分章节)
- C语言常用算法源代码
- 吕鑫:VS2015之博大精深的0基础C语言视
- c++ 刷屏软件代码
- 关于LED制作的源代码合集(38套)
- OBD_CAN读取代码(stm32f103)
-
STM32-ba
se64加密源代码 - 谭浩强第五版课件及代码
评论
共有 条评论