资源简介
编译原理课程设计。。。。简单的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
- 上一篇:串口调试助手[VC源码]
- 下一篇:osworkflow学习笔记
相关资源
- 云南大学软件学院编译原理实验1-5
- 山东科技大学编译原理课程设计
- 编译原理 实现TINY+编译器 课程实验报
- 广工编译原理历年真题及答案
- seu编译原理课程设计
- 符号表设计与实现
- 2014-20152编译原理-期末B卷.docx
- NFA确定化与DFA最小化
- 算术表达式翻译成对应的后缀表达式
- 编译原理学习大全,详解
- 广工编译原理实验报告+可执行程序
- [典例]编译原理学习笔记·文法的构造
- 广东工业大学编译原理实验报告PL0语
- 编译器的设计与实现 编译原理课程设
- 编译原理 华保健
- 编译原理课程设计完整
- NFA转换成DFA——编译原理
- LL1文法的判别以及非LL1文法的转换完
- Chomsky文法类型判断编译原理实验完整
- 山东大学编译原理2017试题
- 编译原理答案陈文宇、王晓斌
- 编译原理作业-表达式编译器
- 编译原理1题库完整版含答案
- Tiger语言语法手册
- 程序设计语言编译原理第三版课后习
- 编译原理课程设计 南京航空航天大学
- 编译原理算符优先文法实验源码
- 哈工大 编译原理作业
- 编译原理C-编译器源代码_min
- 编译原理.rar
评论
共有 条评论