编译原理 实验1 有穷自动机的构造与实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
return false;
}
char digitprocess(char buffer, FILE* fp)
{
int i=-1;
while((IsDigit(buffer)))
{
digittp[++i]=buffer;
buffer=fgetc(fp);
}
digittp[i+1]=\0';
return(buffer);
buffer=fgetc(fp);
}
alphatp[i+1]='\0';
return(buffer);
}
int main(int argc, char* argv[])
{
FILE *fp;//文件指针,指向要分析的源程序
char cbuffer;//保存最新读入的字符
if((fp=fopen(sourceFile,"r"))==NULL)//判断源文件是否存在
}
int main(int argc, char* argv[])
{
FILE *fp;//文件指针,指向要分析的源程序
char cbuffer;//保存最新读入的字符
if((fp=fopen(sourceFile,"r"))==NULL)//判断源文件是否存在
printf("文件%s不存在", sourceFile);
(2)无符号整型数,要求长度不超过20。
四、实验结果
1.识别标识符(以字母开始由字母和数字构成的字符串,要求长度不超过10)。
#include <stdio.h>
#include <string.h>
#include "stdlib.h"
//字符串处理的头文件
char *sourceFile="D:\\AnalyzeFile.txt";
编译原理实验1有穷自动机的构造与实现
一、实验目的
1.正确理解正规式和正规集以及有穷自动机的定义。
2.熟练掌握用状态转换图表示有限自动机的方法。
二、实验的基础知识
1.正规表达式就是一种形式化的表示法,它可以表示单词符号的结构,从而精确地定义单词符号集。正规表达式简称为正规式,它表示的集合即为正规集。
2.状态转换图是一张当输入不同内容时选择不同分析路径的有向图。一个状态转换图可用于识别一定的字符串。
else
{
printf("This is not a label");
fclose(fp);
return 0;
}
}
printf("%s\n",alphatp);
}
fclose(fp);
return 0;
}
2.无符号整型数,要求长度不超过20。
#include <stdio.h>
#include <string.h>
}
return 0;
}
printf("文件%s不存在", sourceFile);
else
{
cbuffer = fgetc(fp);//读入字符
while (cbuffer!=EOF)//如果文件没有结束,就一直循环
{
if(Isletter(cbuffer))//若为字母
cbuffer=alphaprocess(cbuffer,fp);
char alphatp[10];
//判断一个字符是不是字母
bool Isletter(char ch)
{
if(ch>='a' && ch<='z' ||ch>='A' && ch<='Z')
return true;
return false;
}
//判断一个字符是不是数字
bool IsDigit(char ch)
else
{
cbuffer = fgetc(fp);//读入字符
while (cbuffer!=EOF)//如果文件没有结束,就一直循环
{
if(IsDigit(cbuffer))//若为数字
cbuffer=digitprocess(cbuffer,fp);
}
printf("%s\n",digittp);
#include "stdlib.h"
//字符串处理的头文件
char *sourceFile="D:\\AnalyzeFile.txt";
char digittp[20];
//判断一个字符是不是数字
bool IsDigit(char ch)
{
if(ch>='0' && ch<='9')
return true;
{
if(ch>='0' && ch<='9')
return true;
return false;
}
//标识符
char alphaprocess(char buffer,FILE* fp)
{
int i=-1;
while ((Isletter(buffer))||(IsDigit(buffer)))
{
alphatp[++i]=buffer;
3.标识符和无符号整形数可以使用正规式进行表示。
标识符的正规式为l(l|d)*,无符号整形数的正规式为dd*,其中,d为0~9的任意数,l为a~z或A~Z的任意字母。
三、实验内容
构造识别如下字符串的状态转换图,并将其编程实现。
(1)识别标识符(以字母开始由字母和数字构成的字符串,要求长度不超过10)。
相关文档
最新文档