资源简介
语法分析 编译原理作业 自己做的呵呵
代码片段和文件信息
#include
#include
#include
#include
//定义全局变量
FILE *fp*fp1;//指向有进行语法分析的文件
char sym[20]={0};//类别
char s[20]={0};//在涵数中做临时变量数组
char id[20]={0};//若为标志符,存放自身值
int num;//若为整数,存放自身值
int lineno;//行号
int err;//标记何种错误的数字
int count=0;//记录错误出现的次数
int l=0;//记录调用的层次lev
int iftrue=1;
//空格
void nul(int n)
{
int i=0;
for(i=0;i<=n;i++)
printf(“ “);
}
void fengexian(int n)//修饰DOS界面的分隔线
{
int i;
nul(l-1);
//printf(“||“);
for(i=0;i<=n;i++)
printf(“-“);
//printf(“||“);
printf(“\n“);
}
void show()//界面的初始部分
{
fengexian(50);
printf(“ 编译原理语法分析实验!\n“);
printf(“ 作者姓名\n“);
fengexian(50);
}
FILE *openfile(char *mode)
{
char tmpfile[20];
FILE *reval=NULL;
while(iftrue)
{
//gets(tmpfile);
scanf(“%s“tmpfile);
getchar();
reval=fopen(tmpfilemode);
if(reval!=NULL) break;
printf(“不能打开文件\“%s\“,请重新输入:“tmpfile);
iftrue=1;
}
return reval;
}
void get()//取文件中的一个单词
{
char ch;
char str[10];
int i=0;
ch=fgetc(fp);
while(ch==‘ ‘||ch==‘\n‘)
{
ch=fgetc(fp);
}
str[i]=ch;
i++;
ch=fgetc(fp);
while(ch!=‘ ‘&&ch!=‘\n‘)
{
str[i]=ch;
i++;
ch=fgetc(fp);
}
str[i]=‘\0‘;
i=0;
strcpy(sstr);
}
void getsym()//取文件中的一组单词
{
get();
lineno=atoi(s);
//printf(“%d\n“lineno);
get();
if(strcmp(s“ident“)==0)
{
strcpy(syms);
//printf(“%s\n“sym);
get();
strcpy(ids);
//printf(“%s\n“id);
}
else if(strcmp(s“number“)==0)
{
strcpy(syms);
//printf(“%s\n“sym);
get();
num=atoi(s);
//printf(“%d\n“num);
}
else
{
strcpy(syms);
//printf(“%s\n“sym);
}
}
//错误处理
void error(int err)
{
count++;
nul(l);printf(“ %d次错误:“count);
switch(err)
{
case 1:printf(“%d行 1!-常量说明中\“=\“写成\“:=\“.\n“lineno);break;
case 2:printf(“%d行 2!-常量说明中的\“=\“后应是数字.\n“lineno);break;
case 3:printf(“%d行 3!-常量说明中的标识符后应是\“=\“.\n“lineno);break;
case 4:printf(“%d行 4!-constvarprocedure后应为标识符.\n“lineno);break;
case 5:printf(“%d行 5!-漏掉了‘‘或‘;‘.\n“lineno);break;
case 6:printf(“%d行 6!-过程说明后的符号不正确(应是语句开始符或过程定义符).\n“lineno);break;
case 7:printf(“%d行 7!-应是语句开始符.\n“lineno);break;
case 8:printf(“%d行 8!-程序体内语句部分的后跟符不正确.\n“lineno);break;
case 9:printf(“%d行 9!-程序结尾丢了句号‘.‘.\n“lineno); break;
case 10:printf(“%d行 10!-语句之间漏了‘;‘.\n“lineno);break;
case 11:printf(“%d行 11!-标识符未说明.\n“lineno); break;
case 12:printf(“%d行 12!-赋值语句中赋值号左部标识符属性应是变量.\n“lineno);
- 上一篇:编译原理语法分析—递归下降分析法
- 下一篇:winpcap抓包并进行协议解析
相关资源
- 自洽SU3手性夸克-孤子模型中单重子的
- 语法分析c语言实现程序代码+实验报告
- 实现语法分析器-编译原理
- LL(1)文法分析全过程(FIRST/FLLOW/S
- 语法分析器 tiny语言语法分析
- C++语法分析器
- 语法分析c语言实现含报告
- 编译原理LL1文法的mfc实现含消除左递
- 用VC++编写的因子分析程序
- LL1语法分析器(c++)
- 编译原理课程设计----语法分析器(
- 编译原理课程实验报告词法分析器及
- PL0编译器词法检查与语法分析器
- LL(1)语法分析器C++版
- 编译技术实验(Pascal代码转汇编语言
- LR(0)语法分析器程序
- TINY扩充语言的语法分析(实现 while、
- 编译原理课程设计词法语法分析器
- OGRE嵌入MFC代码以及嵌入过程说明
- 编译原理LL1语法分析器C++版源代码
- 第四次上机作业 语法分析2
- 对于任意给定的输入串词法记号流进
- 编译原理课程设计LR(0)语法分析器
- LL1语法分析程序设计
- LEX与YACC实现C语言词法分析和语法分析
- 编译原理实验语法分析器
- PL/0语法分析程序
- cminus语法分析器源代码完整版
- 语法分析C实现
- 编译原理--语法分析 实验 C++版
评论
共有 条评论