资源简介
编译原理语义分析器,实现分析部分C语言的语法成分,将其翻译成三地址代码。
代码片段和文件信息
#include
#include
#include
#include
#define KEY_NUM 34
/*声明*/
void emit(char * resultchar *ag1char *opchar *ag2);
char * newtemp();
int lrparser();
int yucu();
int statement();
char * expression();
char * term();
char * factor();
struct
{
char result[8];
char ag1[8];
char op[8];
char ag2[8];
}quad[20];
char prog[80]token[32]str[100];
char ch;
int synpindexconst_numkkrowktoutc;
FILE *fp_in*fp_out;
char *keyWord[KEY_NUM]={“auto““break““case““char““const“
“continue““default““do““double““else“
“enum““extern““float““for““goto“
“if““int““long““register““return“
“short““signed““sizeof““static““struct“
“switch““typedef““union““unsigned““void“
“volatile““while““begin““end“};
char *constant[100];
int constValue[100];
/*****************************************************
文件操作
*****************************************************/
/*打开文件*/
void fileOpen(char fileInput[]char fileOuput[])
{
if((fp_in=fopen(fileInput“r“))==NULL)
{
printf(“打开读取文件失败!\n“);
return;
}
if((fp_out=fopen(fileOuput“w“))==NULL)
{
printf(“打开写入文件出错!\n“);
return;
}
}
/*关闭文件*/
void fileClose()
{
if(fp_in!=NULL)
fclose(fp_in);
if(fp_out!=NULL)
fclose(fp_out);
}
/*输出文件*/
void output(int achar tk[])
{
printf(“(%d%s)\n“atk);
fprintf(fp_out“(%d%s)\n“atk);
}
/*****************************************************
词法分析
*****************************************************/
/*错误处理*/
void error(char msg[])
{
printf(“%s\n“msg);
return;
}
/*读取一个字符*/
void getch()
{
ch=fgetc(fp_in);
}
/*读取空格*/
void getbc()
{
while(ch==‘ ‘ || ch==‘\r‘ || ch==‘\t‘ || ch==‘\n‘)
{
if(ch==‘\n‘)
{
row++;
}
getch();
}
}
/*读取回车*/
void geten()
{
while(ch==‘\r‘)
getch();
}
/*读取tab*/
void gettab()
{
while(ch==‘\t‘)
getch();
}
/*读取行*/
void getline()
{
while(ch==‘\n‘)
getch();
}
/*换行*/
void nextline()
{
while(ch!=‘\n‘)
getch();
}
/*连接字符串*/
void concat()
{
int len;
/*if(syn==35)
{
len=strlen(str);
str[len]=ch;
str[len+1]=‘\0‘;
}*/
len=strlen(token);
token[len]=ch;
token[len+1]=‘\0‘;
}
/*判断是否为字母*/
bool letter(char c)
{
if((c>=‘a‘&&c<=‘z‘)||(c>=‘A‘&&c<=‘Z‘))
return true;
if(c==‘_‘)
return true;
return false;
}
/*判断是否数字*/
bool digit(char c)
{
if(c>=‘0‘&&c<=‘9‘)
return true;
return false;
}
/*判断是否关键字*/
int reserve()
{
int i;
for(i=0;i {
if(strcmp(tokenkeyWord[i])==0)
return (i+100);
}
return (10);
}
/*指针回退*/
void retract()
{
fseek(fp_in-1SEEK_CUR);
}
/*十进制转二进制*/
/*扫描*/
void scaner()
{
//printf(“%d\t%s\n“syntoken);
memset(token0sizeof(token));
memset(str0sizeof(str));
getch();
getbc();
if(letter(ch))
{
while(letter(ch)||digit(ch))
{
concat();
getch();
}
retract();
syn=reserve();
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2011-06-01 22:28 语义分析器\
文件 101 2011-05-12 23:43 语义分析器\out.txt
文件 48 2011-05-12 22:38 语义分析器\test.txt
文件 129 2011-05-13 00:00 语义分析器\程序说明.txt
文件 9894 2011-05-12 22:58 语义分析器\语义分析器.cpp
文件 23925 2011-05-12 23:43 语义分析器\语义分析器.exe
相关资源
- C语言网上评教代码
- 聚类分析ISODATA,C代码
- 计算机算法分析与设计5-20部落卫队问
- 标准化数据代码
- 小型编译器的设计C语言实现
- 算符优先分析法 C++ 编译原理
- 编译原理综合性实验
- 数据结构与算法分析C++描述 第三版
- 编译原理_递归下降分析语法分析_C语
- JPEG分析器 1.1 源代码
- 编译原理 四元式的生成
- 编译原理课程设计:算符优先分析
- 编译原理实验c++实现LR(1)语法分析
- 数值分析三次样条两种边界matlab代码
- 点是否在多边形内判断的C语言代码
- 航空客运订票系统有完整代码,设计
- GOC京东物流车辆调度A榜赛题,C++代码
- 影像对比度计算C++代码
- 快递系统源代码
- 图形化界面的万年历代码
- AES CBC加解密源代码
- 南京航空航天大学 皮德常 c++ 源代码
- 一个Lex/Yacc完整的(可使用C++)
- Dijkstra单源最短路径代码 C/C++实现
- C语言版24点游戏代码详解
- 网络电话_源代码_C语言编写的
- DHT11参考代码C语言和汇编两种 以及
- C语言 语法分析器 源代码
- 指纹识别算法源代码C语言
- PL/0编译程序(c语言版本)
评论
共有 条评论