资源简介
内含代码+报告
题目:
选择部分C语言的语法成分,设计其词法分析程序、语法语义分析程序。
要求:
设计并实现一个一遍扫描的词法语法语义分析程序,将多条简单赋值语句翻译成三地址代码,要求有一定的出错提示和错误恢复功能。
代码片段和文件信息
#include
#include
#include
#include
#define BUFFSIZE 5000
char prog[BUFFSIZE]token[8];
char chch1;
int synpqmnsumi=1k=0kkflag=0;
char *rwtab[32]={“main““break““case““char““define““continue““default“
“do““double““else““what““extern““float““for““goto““if“
“int““long““stack““return““short““fopen““sizeof“
“static““struct““switch““typedef““enum““unsigned““void““fclose““while“};
int main()
{
void scaner();
int lrparser();
FILE *fp;
if((fp=fopen(“test.txt““r“))==NULL)
{ printf(“无法打开文件!\n“);
exit(1);
}
p=0;
while(!feof(fp))//把测试文件内容存入数组prog中
{ prog[p++]=fgetc(fp);
if(p>=5000)
{ printf(“缓冲区容量不足!\n“);
exit(1);
}
}
fclose(fp);
printf(“分析如下源程序:\n“);
printf(“%s\n“prog);
p=0;
printf(“词法分析结果:\n“);
do
{
scaner();
switch(syn)
{
case 34:printf(“(%d%d)“synsum);break;
case -1:printf(“error“);break;
default:printf(“(%d%s)“syntoken);
}
}
while(syn!=0);
p=0;
printf(“\n语法语义分析结果:\n“);
scaner();
lrparser();
system(“pause“);
return 0;
}
void scaner()//从文件中读取字符并检查词法
{
for(n=0;n<8;n++) token[n]=NULL;
m=0;
sum=0;
ch=prog[p];
while(ch==‘ ‘||ch==‘\n‘)
{ p++;
ch=prog[p];
}//读下一个字符
//if(ch==‘ ‘||ch==‘\n‘||ch==‘\t‘)continue;//跳过空格或换行或制表符
if((ch>=‘A‘&&ch<=‘Z‘)||(ch>=‘a‘&&ch<=‘z‘))//如果是字母
{ while (((ch>=‘A‘)&&(ch<=‘Z‘))||((ch>=‘a‘)&&(ch<=‘z‘))||(ch==‘_‘)||((ch>=‘0‘)&&(ch<=‘9‘)))//将连续的字符存储为字符串
{ token[m]=ch;
m++;p++;
ch=prog[p];
}
token[m++]=‘\0‘;
syn=33;
for(n=0;n<32;n++)
if(strcmp(tokenrwtab[n])==0)
{ syn=n+1;
break;
}
}//判断输入字符是否为标识符或者关键字的情况
else
if(ch>=‘0‘&&ch<=‘9‘)
{ while(ch>=‘0‘&&ch<=‘9‘)
{ sum=sum*10+ch-‘0‘;
p++;
ch=prog[p];
}
syn=34;
}//判断输入字符是否为整型常数的情况
else
switch(ch)
{
case ‘<‘:token[m]=ch;
p++;
ch=prog[p];
if(ch==‘>‘)
{ syn=42;
m++;
token[m]=ch;
p++;
}//出现<>时
else if(ch==‘=‘)
{ syn=43;
m++;
token[m]=ch;
p++;
}//出现<=时
else
{ syn=41;}
break;
case ‘>‘:token[m]=ch;
p++;
ch=prog[p];
if(ch==‘=‘)
{ syn=45;
m++;
token[m]=ch;
p++;
}//出现>=时
else
{syn=44;}
break;
case ‘:‘:token[m]=ch;
p++;
ch=prog[p];
if(ch==‘=‘)
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 62 2013-11-28 21:34 test.txt
文件 159744 2013-11-28 21:45 实验报告.doc
文件 298 2013-11-28 21:31 运行说明.txt
文件 7745 2013-11-28 21:14 综合性实验.cpp
文件 196672 2013-11-28 21:32 综合性实验.exe
----------- --------- ---------- ----- ----
364521 5
- 上一篇:简单的编译器(c++实现)
- 下一篇:内部排序算法的比较分析与实现
相关资源
- 北邮-编译原理-词法分析
- 现代编译原理-C语言描述
- 编译原理实验报告+代码+使用说明
- 编译原理课程设计-C语言子集编译器
- 赋值语句翻译c语言实现四元式
- 编译原理用C++消除左递归
- 编译原理简易C编译器
- 实现语法分析器-编译原理
- 编译原理 LR分析器 c++代码
- 设计并实现TINYC语言的扫描程序TINYC
- LL(1)文法分析全过程(FIRST/FLLOW/S
- 编译原理 LR0项目集规范族的构造 L
- 山东大学编译原理实验源代码c++版
- 简单函数绘图语言的解释器
- Lex和Yacc从入门到精通.pdf
- 简易词法分析器——基于C语言
- LL(1)文法的实现-mfc-编译原理学习
- 词法分析代码内有报告
- 编译原理LL1文法的mfc实现含消除左递
- 编译原理词法分析实验
- pl/0语言的编译器
- C++实现编译原理自动机、LL1文法、及
- 编译原理语义分析程序 c++实现
- 编译原理 课程设计 DAG 报告+源码C++版
- 编译原理课程设计----语法分析器(
- 编译原理简单的编译器源码
- C语言实现一个编译器-编译原理南开大
- 编译原理课程实验报告词法分析器及
- 编译原理与技术李文生:LR分析法C+
- C语言简化编译器前端 编译原理 LR1
评论
共有 条评论