-
大小: 46KB文件类型: .rar金币: 2下载: 1 次发布日期: 2021-07-12
- 语言: 其他
- 标签:
资源简介
词法分析、分析预测表、LL(1)文法程序和流程图
代码片段和文件信息
#include
#include
#include
void main(void);
int reserver(char *);
void main(void)
{
FILE *input*output;
char ch*token=““;
int i=0isReserver=0;
int count=0;
/*打开文件*/
if((input=fopen(“input.txt““rt“))==NULL)
{ printf(“file open in readonly modebut an error generate!\n“);
exit(0);
}
if((output=fopen(“output.txt““wt“))==NULL)
{
printf(“file open in new_create modebut an error generate!\n“);
exit(0);
}
fprintf(output“%4s\t\%8s\t %-16s)\t%4s\n““位置““符号类型““识别符““长度“);
ch=fgetc(input);
while(ch!=EOF)
{
i=0;
/*去掉前导空格换行符*/
while((ch==‘ ‘||ch==‘\n‘||ch==‘\t‘)&&ch!=EOF)
ch=fgetc(input);
/*字母开头*/
if(isalpha(ch))
{
while(isalpha(ch)||isdigit(ch))
{
token[i++]=ch;
ch=fgetc(input);
}
token[i]=‘\0‘;
isReserver=reserver(token);
if(isReserver==1)
{count++;fprintf(output“%4d\t(标识符\t\t%-16s)\t%4d\n“counttokeni);}
else if(isReserver==0)
{count++;fprintf(output“%4d\t(保留字\t\t%-16s)\t%4d\n“counttokeni);}
else if(isReserver==2)
{count++;fprintf(output“%4d\t(算符\t\t%-16s)\t%4d\n“counttokeni);}
continue;
}
/*识别数字*/
else if(isdigit(ch))
{
while(isdigit(ch))
{
token[i++]=ch;
ch=fgetc(input);
}
/*出现非数字且为点时*/
if (ch==‘.‘)
{
token[i++]=ch; /*将点加入*/
ch=fgetc(input);/*读入下一个字符*/
if (isdigit(ch))
{
while(isdigit(ch)) /*是数字时,收入,并将加一*/
{
token[i++]=ch;
ch=fgetc(input);
}
/*如果是数字加点再加数字再出现字母时,就是错误*/
if(isalpha(ch))
{
while(isdigit(ch)||isalpha(ch)||ch==‘.‘)
{
token[i++]=ch;
ch=fgetc(input);
}
token[i]=‘\0‘;
count++;fprintf(output“%4d\t(标识错误\t%-16s)\t%4d\n“counttokeni);
continue;
}
/*当出现结束符时,就收入为实数内*/
else
{
token[i]=‘\0‘;
count++;fprintf(output“%4d\t(实数\t\t%-16s)\t%4d\n“counttokeni);
continue;
}
}
}
/*如果是字符则判断为标识错误*/
else if(isalpha(ch))
{
while(isdigit(ch)||isalpha(ch)||ch==‘.‘)
{
token[i++]=ch;
ch=fgetc(input);
}
token[i]=‘\0‘;
count++;fprintf(output“%4d\t(标识错误\t%-16s)\t%4d\n“token);
continue;
}
/*如果是单词段结束符时,就判断为常数*/
else
{
token[i]=‘\0‘;
count++;fprintf(output“%4d\t(常数\t\t%-16s)\t%4d\n“counttokeni);
continue;
}
}
else if(ch==‘(‘)
{
token[i++]=ch;
ch=fgetc(input);
token[i]=‘\0‘;
count++;fprintf(output“%4d\t(右括号运算符\t%-16s)\t%4d\n“counttokeni);
continue;
}
else if(ch==‘)‘)
{
token[i++]=ch;
ch=fgetc(input);
token[i]=‘\0‘;
count++;fprintf(output“%4d\t(左括号运算符\t%-16s)\t%4d\n“counttokeni);
continue;
}
else if(ch==‘[‘)
{
token[i++]=ch;
ch=fgetc(input);
token[i]=‘\0‘;
count++;fprintf(output“%4d\t(右中括号运算符\t%
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 828 2009-10-14 17:27 编译原理0\analysis_table.txt
文件 56 2009-10-14 17:06 编译原理0\chanshengshi.txt
文件 175104 2007-07-08 19:27 编译原理0\编译原理实验指导书.doc
文件 6875 2009-09-26 13:17 编译原理0\OUTPUT.TXT
文件 9376 2009-09-26 13:16 编译原理0\shyan1.c
文件 458 2009-09-26 13:12 编译原理0\input.txt
文件 225 2009-09-26 13:05 编译原理0\keyword.txt
文件 30148 2009-10-14 17:32 编译原理0\实验2预测分析表.cpp
文件 77312 2007-04-09 14:36 编译原理0\词法分析程序流程图.doc
目录 0 2006-03-09 22:20 编译原理0
----------- --------- ---------- ----- ----
300382 10
- 上一篇:基于深度学习的交通拥堵预测模型研究 *
- 下一篇:哈工大编译原理实验三次合一
评论
共有 条评论