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

  • 大小: 13KB
    文件類型: .cpp
    金幣: 1
    下載: 0 次
    發布日期: 2021-06-03
  • 語言: C/C++
  • 標簽: fundamentals??

資源簡介

編譯原理的LL(1)文法判斷代碼,可以在codeblocks上無礙運行(湊字數用:祝大家學習進步天天開心)

資源截圖

代碼片段和文件信息

#include
using?namespace?std;
#define?MAX?100
struct?state
{
????char?sta;//狀態
????string?f[MAX];//?產生式
????int?num;//產生式個數
};
struct??grammer
{
????string?VT?;//終結符
????string?VN;//非終結符
????struct?state?states[MAX];//產生式
????char?S;//開始符
????int?tnum?;//終結符個數2
????int?nnum?;//非終結符?個數
????string?vns;//能推出空串的非終結符
};
struct??grammer?gram;//定義一個文法
string?First[MAX];//first集合
string?Follow[MAX];//follow集合
string?FolChild[MAX];//follow[A]的子集序列
string?Select[MAX][MAX];//select?集合?非終結符?產生式
int?position(char?astring?s);//根據終態a查找a在有限狀態集中的位置
void?receiveGra();//接收文法
void?calculateFirst();//計算FIRST集合
void?calculateFollow();//計算FOLLOW集合
void?calculateSelect();//計算select集合
int?isallvn(string?a);
int?judge();//判斷
void?printGra();//輸出文法

int?main()
{
????receiveGra();
????calculateFirst();
????calculateFollow();
????calculateSelect();
????printGra();
????return?0;
}
void?receiveGra()?//接受文法
{
????gram.tnum?=?0;
????gram.nnum?=?0;
????cout<<“請輸入開始符:“<????cin>>gram.S;
????cout<<“請輸入產生式以#結束(空串以^代替):“<????string?temp;
????while(1)
????{
????????cin>>temp;
????????if(temp[0]==‘#‘)
????????????break;
????????int?j?=?position(temp[0]gram.VN);//找到狀態的位置
????????if(j<0)?//未出現過
????????{
????????????gram.VN+=temp[0];
????????????gram.states[gram.nnum].sta?=?temp[0];
????????????for(int?m?=?3;?m????????????????gram.states[gram.nnum].f[0]+=temp[m];
????????????gram.states[gram.nnum].num?=?1;

????????????gram.nnum++;
????????}
????????else??//出現過
????????{
????????????int?n?=?gram.states[j].num;
????????????for(int?m?=?3;?m????????????????gram.states[j].f[n]+=temp[m];
????????????gram.states[j].num++;
????????}
????????if(temp[3]==‘^‘)
????????????if(position(gram.states[j].stagram.vns)<0)
????????????????gram.vns+=gram.states[j].sta;//能推出空串的非終結符
????}
????for(int?i?=?0;?i????{
????????struct?state?st?=?gram.states[i];
????????for(int?j?=?0;?j????????{
????????????string?a?=?st.f[j];
????????????for(int?p?=?0;?p????????????{
????????????????if(position(a[p]gram.VN)<0)
????????????????????if(position(a[p]gram.VT)<0)?gram.VT+=a[p];
????????????}
????????}
????}
????cout<<“輸入結束!“<
}
void?calculateFirst()?//計算FIRST集合?對每個非終結符計算first
{
????struct?state?st;
????for(int?i?=?0;?i????{

????????int?flag?=?0;//標志
????????st?=?gram.states[i];
????????if(position(st.stagram.VT)<0)
????????{
????????????// cout<????????????for(int?j?=?0;?j????????????{
????????????????string?temp?=?st.f[j];

????????????????if(position(temp[0]gram.VT)!=-1)?//遇到終結符
????????????????{
????????????????????if(position(temp[0]First[i])<0)
????????????????????{
????????????????????????First[i]+=temp[0];
????????????????????????flag?=?1;
????????????????????}
????????????????}
????????????????else
????????????????{
??

評論

共有 條評論