-
大小: 2.15MB文件類型: .zip金幣: 2下載: 0 次發布日期: 2023-09-14
- 語言: C/C++
- 標簽:
資源簡介
該詞法分析器是編譯原理課程設計時的項目,使用c語言編寫,文件夾中的大部分文件都是當時使用的參考文件,文件夾‘詞法分析器’為完成的可以直接運行的詞法分析器,解壓后可以直接運行。

代碼片段和文件信息
#include“stdlib.h“
#include“stdio.h“
#include“string.h“
#include?
typedef?struct
{
????char?R;
????char?r;
????int?flag;
}array;
array?F[30];
typedef?struct
{
????char?E;
????char?e;
}charLode;
typedef?struct
{
????charLode?*base;
????int?top;
}charstack;
char?str[80][80]arr[80][80]brr[80][80];
int?mkkppppFF=1;
char?r[20];
int?crr[30][30]FLAG=0;
char?ccrr1[1][30]ccrr2[30][1];
void?Initstack(charstack?*s)//初始化棧
{
s->base=(charLode?*)malloc(30*sizeof(charLode));
????s->top=-1;
}
void?push(charstack?*scharLode?w)//入棧操作
{
s->top++;
s->base[s->top].E=w.E;
s->base[s->top].e=w.e;
}
void?pop(charstack?*scharLode?*w)//出棧操作
{
w->E=s->base[s->top].E;
w->e=s->base[s->top].e;
s->top--;
}
int?IsEmpty(charstack?s)//判斷棧是否為空
{
????if(s.top==-1)
????????return?1;
????else
return?0;
}
int?IsLetter(char?ch)//判斷非終結符
{
????if(ch>=‘A‘&&ch<=‘Z‘)
return?1;
????else
return?0;
}
int?judge1(int?n)//判斷算符文法非終結符不能相鄰
{
????int?j=3i;
????for(i=0;i<=n;i++)
while(str[i][j]!=‘\0‘)
{
????????????char?a=str[i][j];
????????????char?b=str[i][j+1];
????????????if(IsLetter(a)&&IsLetter(b))
{
return?0;
break;
}
????????????else?j++;
}
return?1;
}
void?judge2(int?n)
{
????int?i;
????for(i=0;i<=n;i++)
{
if(str[i][3]==‘ε‘||judge1(n)==0||FLAG==1)//如果文法中含有ε或不是OG或兩個非終結符有多個關系則不是OPG文法
{
printf(“grammar?G?is?not?operator?priority?grammar!\n“);
FF=0;
break;
}
if(i=n)
printf(“grammar?G?is?operator?priority?grammar!\n“);
}
}
int?search1(char?r[]int?kkchar?a)//如果a的值等于r數組中的某個值,則返回1
{
????int?i;
????for(i=0;i if(r[i]==a)???break;
if(i==kk)
return?0;
else
return?1;
}
void?createF(int?n)
{
????int?k=0i=1;
????char?c;
????int?j;
????char?t[10];
????t[0]=str[0][0];
????while(i<=n)
{
????????if(t[k]!=str[i][0])
{
k++;??t[k]=str[i][0];???i++;
}
????????else
????????????i++;
}
????kk=0;
????for(i=0;i<=n;i++)
{
j=3;
while(str[i][j]!=‘\0‘)
{
????????????c=str[i][j];
????????????if(IsLetter(c)==0)
{
????????????????if(!search1(rkkc))???r[kk]=c;
????????????????kk++;
}
????????????j++;
}
????}
????m=0;
????for(i=0;i for(j=0;j {??
F[m].R=t[i];??//
????????????F[m].r=r[j];//
????????????F[m].flag=0;
????????????m++;??/////////////
}
}
void?search(charLode?w)//////??????
{
int?i;
????for(i=0;i ????????if(F[i].R==w.E&&F[i].r==w.e)
{
F[i].flag=1;
break;
}
}
void?FirstVT(int?n)//構造firstvt集合
{
????charstack?sta;
????charLode?ww;
????charLode?w;
????int?i=0k;
????char?ab;
????Initstack(&sta);
????while(i<=n)
{
????????k=3;
????????w.E=str[i][0];
????????a=str[i][k];
????????b=str[i][k+1];
????????if(!IsLetter(a))
{
????????????w.e=a;
????????????push(&staw);
????????????search(w);
????????????i++;
}
????????else?if(IsLetter(a)&&b!=‘\0‘&&!IsLetter(b))
{
?????????
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2011-06-03?11:25??cifa\
?????文件????????7519??2011-05-21?21:17??cifa\2.txt
?????文件???????14339??2011-05-21?21:21??cifa\3.txt
?????文件????????6204??2011-05-21?21:28??cifa\4.txt
?????文件???????12106??2011-05-21?21:32??cifa\5.txt
?????文件????????2785??2012-04-06?21:48??cifa\6.txt
?????文件???????11463??2011-05-28?11:28??cifa\cifa.cpp
?????文件????????3377??2011-05-27?22:45??cifa\cifa.dsp
?????文件?????????516??2011-05-27?22:46??cifa\cifa.dsw
?????文件???????41984??2011-05-27?22:46??cifa\cifa.ncb
?????文件???????48640??2011-05-27?22:46??cifa\cifa.opt
?????文件?????????736??2011-05-27?22:45??cifa\cifa.plg
?????目錄???????????0??2011-06-03?11:25??cifa\Debug\
?????文件??????196657??2011-05-27?22:45??cifa\Debug\cifa.exe
?????文件??????304116??2011-05-27?22:45??cifa\Debug\cifa.ilk
?????文件???????38750??2011-05-27?22:45??cifa\Debug\cifa.obj
?????文件?????3567708??2011-05-26?20:02??cifa\Debug\cifa.pch
?????文件??????476160??2011-05-27?22:45??cifa\Debug\cifa.pdb
?????文件??????148480??2011-05-27?22:45??cifa\Debug\vc60.idb
?????文件???????77824??2011-05-27?22:45??cifa\Debug\vc60.pdb
?????文件??????758326??2012-04-06?21:55??cifa\詞法分析器.zip
- 上一篇:記賬本小程序
- 下一篇:南京理工大學c++課程設計6.2日期格式處理
評論
共有 條評論