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

  • 大小: 48KB
    文件類型: .zip
    金幣: 2
    下載: 0 次
    發布日期: 2021-06-16
  • 語言: 其他
  • 標簽: 編譯原理??

資源簡介

編譯原理課程設計。。。。簡單的FIRST集FOLLOW集求解的程序。。。。壓縮文檔中ffs.cpp為源程序。。。。使用了bool。。。。所以做了cpp。。。。Production文本是供程序使用的產生式。。。。其余的是過程文件。。。。可以忽略。。。。

資源截圖

代碼片段和文件信息

/*
?*?ffs.cpp
?*
?*??Created?on:?2017年6月9日
?*??Author:?PBB
?*/
#include
#include
#include

struct?node
{
char?c;
struct?node*?next;
};
typedef?struct?node?Node;

struct?unit
{
Node*?sign;
struct?unit*?next;
};
typedef?struct?unit?Unit;

struct?production
{
Unit*?unterminal;
Unit*?candidate;
Unit*?FIRST;
struct?production*?next;
};
typedef?struct?production?Production;

struct?ff
{
Unit*?unterminal;
Unit*?FIRST;
Unit*?FOLLOW;
struct?ff*?next;
};
typedef?struct?ff?FF;

bool?isEqual(Unit*?xUnit*?y);
bool?stringCanBeEmpty(Production*?headUnit*?u);
bool?isTerminal(Unit*?u);
Node*?copyNode(Node*?nm);
Unit*?copyUnit(Unit*?ubool?trimint?count);
void?displayNode(Node*?n);
void?displayUnit(Unit*?ubool?split);
int?unitLength(Unit*?u);
void?traservalCandidate(Production*?head);
void?traservalFirstOfCandidate(Production?*head);
void?traservalFFVT(FF*?head);
void?freeNode(Node*?n);
void?freeUnit(Unit*?u);
void?freeProduction(Production*?p);
void?freeFF(FF*?f);
void?addInFF(Unit*?uUnit*?&f);
void?dataFromFile(const?char*?pathProduction*?&head);
void?FFGenerate(FF*?&headProduction*?phead);
Unit*?FirstOfUnit(Production*?headUnit*?string);
void?Follow(FF*?fheadProduction*?phead);




bool?isEqual(Unit*?xUnit*?y)//判斷連個字符是否相等==兩個傳入的參數是需要進行比較的字符
{
if(x==NULL?&&?y==NULL)?return?true;
if((x==NULL?&&?y)?||?(x?&&?y==NULL))?return?false;
Node*?nx;
Node*?ny;

for(nx=x->signny=y->sign;;)
{
if(nx?&&?ny)
{
if(nx->c!=ny->c)?return?false;
nx=nx->next;
ny=ny->next;
}
if((nx==NULL?&&?ny)?||?(nx?&&?ny==NULL))?return?false;
if(nx==NULL?&&?ny==NULL)?return?true;
}
return?false;
}

bool?unitCanbeEmpty(Production*?headUnit*?uUnit*?&empty)//判斷某個字符能否為空字==產生式鏈的頭結點==要判斷的字符==需要帶回的空字的指針
{
empty=NULL;

Production*?p;
p=head;

Unit*?t_empty;
t_empty=(Unit*)malloc(sizeof(Unit));
t_empty->sign=(Node*)malloc(sizeof(Node));
t_empty->sign->c=‘?‘;
t_empty->sign->next=NULL;
t_empty->next=NULL;

for(;p;p=p->next)
{
if(isEqual(p->unterminalu))
{
if(isEqual(t_emptyp->candidate))
{
empty=t_empty;
return?true;
}
}
}
return?false;
}

bool?stringCanBeEmpty(Production*?headUnit*?u)//判斷某個字符串能否為空字==產生式鏈的頭指針==需要判斷的字符串鏈的頭指針
{
if(isTerminal(u))?return?false;
Production*?p;
for(;u;u=u->next)
{
for(p=head;p;p=p->next)
{
if(isEqual(p->unterminalu))
{
Unit*?back_no_use;
if(!unitCanbeEmpty(headuback_no_use))?return?false;
}
}
}
return?true;
}

bool?isTerminal(Unit*?u)//判斷某個字符是否為終結符==需要判斷的字符
{
Node*?n;
n=u->sign;
if(n->c>=‘A‘?&&?n->c<=‘Z‘)?return?false;
else?return?true;
}

Node*?copyNode(Node*?n)//復制節點----供copyUnit調用
{
if(n==NULL)?return?NULL;
Node*?chead;
Node*?copy;
chead=copy=(Node*)malloc(sizeof(Node));
copy->c=‘\0‘;
copy->next=NULL;
for(;n;)
{
copy->c=n->c;
if(copy->c==‘\n‘)
{
printf(“%d“c

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????14398??2017-06-16?10:01??ffs.cpp
?????文件???????53760??2017-06-05?17:40??FIRST、FOLLOW集合求解.vsd
?????文件???????19872??2017-06-15?21:23??FIRST、FOLLOW集求解思路.docx
?????文件??????????39??2017-06-10?12:54??Production.txt
?????文件?????????410??2017-06-06?09:03??產生式鏈遍歷算法.c
?????文件????????2059??2017-06-06?08:38??文件讀取算法.c
?????文件????????1483??2017-06-10?07:08??錯誤的算法記錄.c

評論

共有 條評論