91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 199KB
    文件類型: .rar
    金幣: 2
    下載: 0 次
    發布日期: 2021-06-05
  • 語言: C/C++
  • 標簽: firstfollow??

資源簡介

編譯原理實驗 first、follow、select集合的求解,經測試正確,c語言編寫

資源截圖

代碼片段和文件信息

#include
#include
#include
typedef?struct?Node
{
????char?nonTerminal;
????char?str[10];????//用來存放各個產生式右邊的字符串
????int?tag;?????????//用來標記是否能推出空
????char?first[10];??//用來存放非終結符的first集合
????char?firsts[10];?//用來存放字符串的first集合
????char?follow[10];??//用來存放各個非終結符的follow集
????char?formFollow[10];//用來存放各個非終結符的follow集合的組成部分
????int?fol;????????//用來標記非終結符是否已經計算過follow集
????char?sellect[10];//用來存放sellect集合
????int?fir;???//用來標志非終結符的first集合是否計算過,0表示沒有,1表示計算過
}nonTer*nonTerminal;
typedef?struct?
{
????char?Ldata;
//??int?tag1;?//用來標記是否能推出空
????int?tag2;//用來標記該產生式是否被刪除
}LeftData;
typedef?struct?node
{
????LeftData?lData;
????char?mData[2];
????char?rData[10];//產生式右邊字符串最大值為10
}Pro;
typedef?struct
{
????Pro?proNum[50];????//輸入產生式的最大數量????????
}Production;
static?int?num=0;??//統計實際輸入產生式的數量
int?sum=1;???//統計非終結符的數量
Production?init()??//初始化產生式
{
????Production?p;
????int?ij;
????for(i=0;i<50;i++)
????{
????????for(j=0;j<10;j++)
???? {
????????????p.proNum[i].rData[j]=‘\0‘;
???? }
????
????}
????return?p;
}
Production?input()??//輸入產生式
{
????int?i=0j=0;
????Production?p;
????p=init();
????printf(“依次輸入各個產生式,每次以回車結束;?用‘#‘結束,表示不再有產生式要輸入\n“);
????while((p.proNum[i].lData.Ldata=getchar())!=‘#‘)
????{
????????scanf(“%c%c“&p.proNum[i].mData[0]&p.proNum[i].mData[1]);
????????scanf(“%s“&p.proNum[i].rData);
??????//??p.proNum[i].lData.tag1=0;
????????p.proNum[i].lData.tag2=1;
????????getchar();
????????if(j>20)
???? {
????????????printf(“輸入產生是的數量超過上限程序不能處理\n“);
???? }
????????num++;
????????i++;
????}
????return?p;
}
Production?copyProduction(Production?p)
{
????Production?cp;
????int?ij;
????for(i=0;i????{
????????cp.proNum[i].lData.Ldata=p.proNum[i].lData.Ldata;
????//??cp.proNum[i].lData.tag1=p.proNum[i].lData.tag1;
????????cp.proNum[i].lData.tag2=p.proNum[i].lData.tag2;
????????cp.proNum[i].mData[0]=p.proNum[i].mData[0];
????????cp.proNum[i].mData[1]=p.proNum[i].mData[1];
????????for(j=0;j<10;j++)
???? {
????????????cp.proNum[i].rData[j]=p.proNum[i].rData[j];
???? }
????
????}
????return?cp;
}
int?isJudLegal(Production?p)??//判斷產生式是否合法
{
????int?mid1mid2right=0;
????int?i;
????int?flag=0;
????mid1=0;
????mid2=1;
????right=0;
????if(num==0)
????{
????????printf(“產生式個數為零\n“);
????????return?0;
????}
????for(i=0;i????{
????????if(p.proNum[i].lData.Ldata>‘Z‘||p.proNum[i].lData.Ldata<‘A‘)
???? {
????????????printf(“產生式左部應該為非終結符(大寫字母)\n“);
????????????return?0;
???? }
????????if(p.proNum[i].mData[mid1]!=‘-‘||p.proNum[i].mData[mid2]!=‘>‘)
???? {
????????????printf(“產生式中間->有誤\n“);
????????????return?0;
???? }
????????while(p.proNum[i].rData[right]!=‘\0‘)
???? {
????????????if((p.proNum[i].rData[right]==‘*‘)||(p.proNum[i].rData[right]>=‘a‘&&p.proNum[i].rData[right]<=‘z‘)
????????????????||(p.proNum[i].rData[right]>=‘A‘&&(p.proNum[i].rData[right]<=‘Z‘)))
???????????? flag=1;
????????????if(flag!=1)
???? {

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件?????204860??2013-05-27?15:33??ll1\Debug\ll1.exe

?????文件?????190988??2013-05-27?15:33??ll1\Debug\ll1.ilk

?????文件??????43273??2013-05-27?15:33??ll1\Debug\ll1.obj

?????文件?????225860??2013-05-27?15:32??ll1\Debug\ll1.pch

?????文件?????377856??2013-05-27?15:33??ll1\Debug\ll1.pdb

?????文件??????33792??2013-05-27?15:34??ll1\Debug\vc60.idb

?????文件??????45056??2013-05-27?15:33??ll1\Debug\vc60.pdb

?????文件??????34488??2013-05-27?15:33??ll1\ll1.cpp

?????文件???????4248??2013-05-27?15:32??ll1\ll1.dsp

?????文件????????531??2013-05-27?15:24??ll1\ll1.dsw

?????文件??????41984??2013-05-27?16:00??ll1\ll1.ncb

?????文件??????48640??2013-05-27?16:00??ll1\ll1.opt

?????文件????????880??2013-05-27?15:33??ll1\ll1.plg

?????目錄??????????0??2013-06-03?09:26??ll1\Debug

?????目錄??????????0??2013-06-03?09:26??ll1

-----------?---------??----------?-----??----

??????????????1252456????????????????????15


評論

共有 條評論