资源简介
语言为C/C++,共有四个实验,实验一实验二功能全部实现,实验三第二个功能有待完善,实验四也是实现了部分功能。我当时提交是没问题的,介意的请不要下载,实验一:词法分析器,实验二:正规文法转换为正规表达式,实验三:正规文法与有穷自动机的相互转换,实验三:利用给定文法或有穷自动机或正规表达式。进行词法分析
代码片段和文件信息
#include
#include
#include
#include
using namespace std;
char ch=‘ ‘;
string itag[200];
int a=0b=0c=0d=0e=0f=0;
string ikey[200];
string inum[200];
string iope[200];
string idiv[200];
string niden[200];
string key[14]={“begin““end““if““then““else““while““write““read““do“\
“return““break““continue““int““main“};
//判断是否为关键字
int isKey(string str)
{
for(int i=0;i<14;i++)
{
if(key[i].compare(str)==0)
{
return 1;
break;
}
}
return 0;
}
//判断是否为字母
int isLetter(char ch)
{
if(((ch>=‘a‘)&&(ch<=‘z‘))||((ch>=‘A‘)&&(ch<=‘Z‘)))
{
return 1;
}
else return 0;
}
//判断是否为数字
int isNum(char ch)
{
if((ch>=‘0‘)&&(ch<=‘9‘))
{
return 1;
}
return 0;
}
void preHandle(FILE *fp) //预处理
{
string str=““;
while((ch=fgetc(fp))!=EOF)
{
if(ch==‘/‘)
{
if((ch=fgetc(fp))!=EOF)
{
if(ch==‘/‘){
while((ch=fgetc(fp))!=‘\n‘){}
fseek(fp-1LSEEK_CUR);
}
else if(ch==‘*‘){
while((ch=fgetc(fp))!=‘*‘){}
ch=fgetc(fp);
ch=fgetc(fp);
}
else fseek(fp-1LSEEK_CUR);
}
}
if(ch==‘\n‘)
continue;
str=str+ch;
}
cout< }
void dClass(FILE *fp) //fenlei
{
string st=““;
while((ch=fgetc(fp))!=EOF)
{
st=““;
if(ch==‘/‘)
{
if((ch=fgetc(fp))!=EOF)
{
if(ch==‘/‘){
while((ch=fgetc(fp))!=‘\n‘){}
fseek(fp-1LSEEK_CUR);
}
else if(ch==‘*‘){
while((ch=fgetc(fp))!=‘*‘){}
ch=fgetc(fp);
ch=fgetc(fp);
}
else fseek(fp-1LSEEK_CUR);
}
}
if(ch==‘ ‘||ch==‘\t‘||ch==‘\n‘)
continue;
if(isLetter(ch))
{
while(isLetter(ch)||isNum(ch)||ch==‘_‘){
st=st+ch;
ch=fgetc(fp);
}
if(isKey(st)){
/*for(int i=0;i if(ikey[i].compare(st)==0)
}*/
ikey[b]=st;
b++;
cout< }
else{
itag[a]=st;
a++;
}
fseek(fp-1LSEEK_CUR);
}
else if(isNum(ch))
{
while(isNum(ch))
{
st=st+ch;
ch=fgetc(fp);
}
inum[c]=st;
c++;
fseek(fp-1LSEEK_CUR);
}
else switch(ch){
case‘+‘:
case‘-‘:
case‘*‘:
case‘/‘:
case‘=‘:iope[d]=st+ch;d++;break;//到此为止是无歧义的运算符输出
case‘‘:
case‘;‘:
case‘{‘:
case‘}‘:
case‘[‘:
case‘]‘:
case‘(‘:
case‘)‘:idiv[e]=st+ch;e++;break;//到此为止是无歧义分隔符输出
case‘>‘:{
ch=fgetc(fp);
if(ch==‘=‘){
st=“>=“;//如果是>=的情况下,输出;
iope[d]=st;d++;
}
if(ch==‘>‘){
st=“>>“;
iope[d]=st;d++;
}//如果是>>输出符号的话,什么都不做。
else{
fseek(fp-1SEEK_CUR);
iope[d]=“>“;d++;//如果只是一个>的话,输出这是一个运算符;
}
}break;
case‘<‘:{
ch=fgetc(fp);
if(ch==‘=‘){
st=“<=“;//同上;
iope[d]=st;d++;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2015-06-14 10:07 编译原理\
文件 4304 2015-05-15 13:37 编译原理\Constructor.cpp
文件 3461 2015-06-11 10:35 编译原理\Constructor.dsp
文件 530 2015-06-11 10:35 编译原理\Constructor.dsw
文件 41984 2015-06-11 10:35 编译原理\Constructor.ncb
文件 48640 2015-06-11 10:35 编译原理\Constructor.opt
文件 256 2015-06-11 10:35 编译原理\Constructor.plg
目录 0 2015-06-13 21:13 编译原理\Debug\
文件 565288 2015-06-11 09:56 编译原理\Debug\1.exe
文件 809552 2015-06-11 09:56 编译原理\Debug\1.ilk
文件 322400 2015-06-11 09:56 编译原理\Debug\1.obj
文件 1131520 2015-06-11 09:56 编译原理\Debug\1.pdb
文件 322400 2015-06-11 09:53 编译原理\Debug\a.obj
文件 544818 2015-05-26 17:32 编译原理\Debug\Constructor.exe
文件 787524 2015-05-26 17:32 编译原理\Debug\Constructor.ilk
文件 151297 2015-05-26 17:32 编译原理\Debug\Constructor.obj
文件 1115136 2015-05-26 17:21 编译原理\Debug\Constructor.pdb
文件 540726 2015-06-11 10:35 编译原理\Debug\experiment.1cpp.exe
文件 781972 2015-06-11 10:35 编译原理\Debug\experiment.1cpp.ilk
文件 134846 2015-06-11 10:35 编译原理\Debug\experiment.1cpp.obj
文件 1106944 2015-05-26 17:25 编译原理\Debug\experiment.1cpp.pdb
文件 132096 2015-06-11 10:36 编译原理\Debug\vc60.idb
文件 118784 2015-06-11 09:56 编译原理\Debug\vc60.pdb
文件 3440 2015-05-14 09:13 编译原理\experiment.1cpp.cpp
文件 3509 2015-06-11 10:35 编译原理\experiment.1cpp.dsp
文件 538 2015-06-11 10:35 编译原理\experiment.1cpp.dsw
文件 41984 2015-06-11 10:35 编译原理\experiment.1cpp.ncb
文件 48640 2015-06-11 10:35 编译原理\experiment.1cpp.opt
文件 801 2015-06-11 10:35 编译原理\experiment.1cpp.plg
文件 141886 2015-05-14 08:06 编译原理\GuiPreview_Regex.rar
文件 104448 2015-06-11 09:36 编译原理\LL1文法分析器.doc
............此处省略78个文件信息
- 上一篇:典型密码算法及其C语言实现——
- 下一篇:获取进程信息和计算进程文件的MD5码
相关资源
- PLO编译器的扩展编译原理课程实践
- 编译原理实验语法分析器
- 编译原理实验报告+语法分析代码C语言
- 编译原理实验报告 语法分析 语义分
- 编译原理实验——词法分析器C语言编
- 编译原理实验-词法分析器
- 编译原理实验一词法分析 实验二语法
- 超强大的词法分析程序源代码C++版本
- 编译原理 LL1语法分析器
- 广工编译原理实验 PL0C++改进
- [编译原理实验]生成语法树,符号表,
- C++ 小型编译器
- 编译原理实验 LL1文法分析 first集合
- 编译原理实验c++实现LR(1)语法分析
- 编译原理实验 DFA的最小化 c++代码
- 编译原理实验判断文法是不是LL1文法
- 编译原理实验之四元式的生成源代码
- 北邮编译原理实验--词法分析
- 编译原理实验,包括词法分析、语法
- 河北工业大学编译原理实验报告
- 编译原理实验查填符号表
- 编译原理实验报告PL/0语言功能扩充
- 编译原理实验报告词法语法分析 算符
评论
共有 条评论