《编译原理》课程实验
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
实验题目: 某种简单程序语言的词法分析器的
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
与实现
专 业: 计算机科学与技术
班 级: 11060341
学 号: 11060341
姓 名:
实验目的:
设计一个词法分析程序,理解词法分析器实现的原理,掌握程序设计语言中的各类单词的词法分析方法,加深对词法分析原理的理解。
实验任务:
词法分析是从左向右扫描每行源程序的符号,拼成单词,换成统一的二元式 (单词种别,单词符号的属性值)
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示。对给定的程序通过词法分析器识别一个个单词符号,并以二元式
(单词种别,单词符号的属性值)显示,本程序则是通过对给定程序段分析后以单词符号和文字提示显示)
实验流程:
程序
清单
安全隐患排查清单下载最新工程量清单计量规则下载程序清单下载家私清单下载送货清单下载
:
#include
#include
#include
using namespace std;
int k=0;
struct word
{
char name[10];
int kind;
} word[1000];
char key[35][10]= {"scanf","short","int","long","float","double","char","struct","union",
"printf","typedef","const","unsigned","signed","extern","register","static",
"volatile","void","if","else","switch","case","for","do","while","goto",
"continue","break","default","sizeof","return","include","bool"
};
bool cmp(char a[])
{
int i;
for(int k=0; k<35; k++)
{
if(strcmp(a,key[k])==0)
return 1;
}
return 0;
}
int main()
{
#ifdef LOCAL
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif
int p,q,flag;
char a[1000],b[10],ch;
while(gets(a))
{
p=0;
int len=strlen(a);
while(p='a'&&ch<='z')||(ch>='A'&&ch<='Z')||ch=='_')
{
flag=0;
q=0;
while((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')||ch=='_'||(ch>='0'&&ch<='9'))
{
if((ch>='0'&&ch<='9')||ch=='_')
flag=1;
b[q++]=ch;
p++;
ch=a[p];
}
if(flag==1)
{
strcpy(word[k].name,b);
word[k++].kind=1;
}
else if(flag==0)
{
if(ch=='\''||ch=='"')
{
strcpy(word[k].name,b);
word[k++].kind=2;
}
else if(cmp(b)==1)
{
strcpy(word[k].name,b);
word[k++].kind=3;
}
else
{
strcpy(word[k].name,b);
word[k++].kind=1;
}
}
}
else if((ch>='0'&&ch<='9')||ch=='-')
{
int t=p-1;
if(a[t]>='0'&&a[t]<='9'||a[t]>='a'&&a[t]<='z'||a[t]>='A'&&a[t]<='Z')
{
p++;
ch=a[p];
if(ch=='-'||ch=='=')
{
b[0]='-';
b[1]=ch;
strcpy(word[k].name,b);
word[k++].kind=5;
ch=a[++p];
}
else
{
b[0]='-';
strcpy(word[k].name,b);
word[k++].kind=5;
}
}
else
{
q=0;
b[q++]=ch;
p++;
ch=a[p];
while((ch>='0'&&ch<='9')||ch=='.')
{
b[q++]=ch;
p++;
ch=a[p];
}
strcpy(word[k].name,b);
word[k++].kind=2;
}
}
else if(ch=='('||ch==')'||ch=='['||ch==']'||ch=='{'||ch=='}'||ch==','||ch==';'||ch==':'||ch=='\''||ch=='"')//ch=='('||ch==')'||ch=='['||ch==']'||ch=='{'||ch=='}'||
{
b[0]=ch;
strcpy(word[k].name,b);
word[k++].kind=4;
ch=a[++p];
}
else if(ch=='%'||ch=='^')
继续阅读