资源简介
计算机科学与技术11级。19周的课程设计编译原理实习
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#define bs 100 //Buffer size=100
char buf[bs];
char cw; //current word
int cc=0;
int cx=1;
int ll=-1;
int err=0;
char bfs[bs];
int used=-1;
ifstream in(“input.txt“);
ofstream out(“output.txt“);
//符号表
char SymTableol[17][3]={“+ ““- ““* ““/ ““> ““< ““>=““<=““!=““==““ ““; ““( ““) ““{ ““} ““= “};
//关键字表
char keyword[8][6]={“void““int““if““else““while““do““main““const“};
struct CODE{
char op[10];
char a1[10];
char a2[10];
char t[10];
}code[100];
struct Sym{
char str[10];
int n;
}SymTable;
struct Idtifier{
char id[20];
int n;
}IdenTable[bs];
void getch(char &ch); //取字符
void getsym(char *chSym &SymTable); //取符号
void copy(char *strchar *chint n);
int searchKeyword(char *ch);
int searchSymTableol(char *ch);
void program();
void subprogram();
void vardef();
void idTabel();
void idtifier();
void idTabel1();
int createIdTable(Sym SymTableint n);
int searchidTable(Sym SymTable);
void sentencepart();
void sentencepart1();
void sentence();
void int_to_char(int achar *ch);
void expression();
void expression1();
void term();
void term1();
void factor();
void condition();
void error(int n);
void gencode(char *opchar *a1char *a2char *t);
void getch(char &ch)
{
assert(in);
in.get(cw);
}
void getsym(char *chSym & SymTable)
{
int ll;
cc=-1;
while(1) //放过空字符
{
if(in.eof())
{
error(0);
return;
}
else if(cw==‘\n‘)
{
cx++;
getch(cw);
}
else if(cw==‘ ‘) getch(cw);
else break;
}
if(cw>=‘a‘&&cw<=‘z‘)
{
ch[++cc]=cw;
while(1)
{
getch(cw);
if((cw>=‘a‘&&cw<=‘z‘)||(cw>=‘0‘&&cw<=‘9‘))
{
ch[++cc]=cw;
}
else break;
}
ch[cc+1]=‘\0‘;
ll=searchKeyword(ch);
if(ll!=-1)
SymTable.n=20+ll;
else
SymTable.n=1;
copy(SymTable.strchcc);
}
else if(cw>=‘0‘&&cw<=‘9‘)
{
ch[++cc]=cw;
while(1)
{
in.get(cw);
if(cw>=‘0‘&&cw<=‘9‘)
{
ch[++cc]=cw;
}
else break;
}
ch[cc+1]=‘\0‘;
copy(SymTable.strchcc);
SymTable.n=2;
}
else
{
char sh[3];
sh[0]=cw;
getch(cw);
sh[1]=cw;
sh[2]=‘\0‘;
ll=searchSymTableol(sh);
if(ll==-1)
{
sh[1]=‘ ‘;
ll=searchSymTableol(sh);
if(ll==-1) error(1);
else
{
ch[++cc]=sh[0];
copy(SymTable.strchcc);
SymTable.n=ll+3;
}
}
else
{
ch[++cc]=sh[0];
ch[++cc]=sh[1];
copy(SymTable.strchcc);
SymTable.n=ll+3;
getch(cw);
}
}
}
void copy(char *strchar *chint n)
{
for(int cx=0;cx<=n;cx++)
{
str[cx]=ch[cx];
}
str[n+1]=‘\0‘;
}
int searchKeyword(char *ch)
{
int a=0;
while(a<=7)
{
if(!strcmp(chkeyword[a]))
return a;
else
a++;
}
if(a>7)
return -1;
}
int searchSymT
- 上一篇:微机原理交通灯控制系统设计C语言实现
- 下一篇:C语言解八数码问题
相关资源
- MyImg2Lcd4.0破解版
- TFTLCD显示屏专用取字模软件
- MFCdownload
- NCDDE服务连接DDE封装的APIddehelper
- CDib类MFC图像编程必备
- c++实现Dos攻击
- OPCDAAuto.dll
- NetCDF C++接口使用说明
- 最新的32/64位opcda的dll
- CDC上画箭头Arrows C++代码
- C语言操作netcdf 用法手册
- C:DIY cd命令
- STM32 LCD12864并口驱动实验 完整C语言代
- ply2pcd文件转换
- VC++对话框CDialog的全屏显示及控件居中
- LCD1602显示实时温度代码STC15W4K56S4
- C语言LCD多级菜单(完整版)
- SiamFCdemo运行所需stats.mat文件
- 原创:51单片机操作ds18b20ds1302,lcd1
- 4X4矩阵键盘+LCD1602显示
- 模仿系统画图的程序源码
- AD电压采样 及LCD12864显示.rar
- ImageBasicDemo.rar
- STM32F3 LCD1602 I2C驱动代码 C语言
- 自学VC++2010;用ADO方法在ACCESS2010数据
- f8d0eaf9b7f33d5d7e75486cdaba4e43.cpp
- 项目16 基于单片机LCD数字测速仪的设
- C++程序设计原理与实践 附录BCDE
- MFC下的DLL建立与调用简单
- 双有源全桥DCDC变换器_PI_C语言实现M
评论
共有 条评论