• 大小: 11.38MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-06-26
  • 语言: C/C++
  • 标签:

资源简介

语言为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个文件信息

评论

共有 条评论