【C++实现】编译原理 免考小队 FIRSTVT集生成算法
发布日期:2021-06-29 14:32:36
浏览次数:2
分类:技术文章
本文共 1820 字,大约阅读时间需要 6 分钟。
背景
期末考试免考,冲!
实验名称
FIRSTVT集生成算法
实验时间
2020年6月3日 到 2020年6月9日
院系
信息科学与工程学院
组员姓名
Chocolate、kry2025、钟先生、leo、小光
实验环境介绍
- windows 10 操作系统
- Eclipse 进行 java 编程
- CodeBlocks 进行 C++ 编程
实验目的与要求
目的
- 深刻理解FIRSTVT集生成算法
- 掌握FIRSTVT集生成的过程
- 加强团队合作能力
- 提高自身的编程能力和解决问题的能力
要求
- 编程实现FIRSTVT集生成算法
- 算法简洁,不冗余
解决问题
Firstvt集的求法,有三条规则:
(1)A->a…,即以终结符开头,该终结符入Firstvt (2)A->B…,即以非终结符开头,该非终结符的Firstvt入A的Firstvt (3)A->Ba…,即先以非终结符开头,紧跟终结符,则终结符入Firstvt实验结果
源代码
#include#define endl '\n'#define mst(a,b) memset(a,b,sizeof(a))using namespace std;const int maxn=1e3+5;class node{ public: string left; vector right; node(const string& str){ //类似构造函数 left=str; right.clear(); } void push(char str[]){ //放入产生式右部 right.push_back(str); } void print(){ //打印产生式 printf("%s->%s",left.c_str(),right[0].c_str()); for(int i=1;i vnode;map mp;vector vt;set firstVt[maxn];//dfs搜索void dfs(int x){ if(vis[x]) return; vis[x]=1; string& left=vnode[x].left; //取出当前产生式左部 for(int i=0;i 1 && !isupper(str[1])) //判断第二个是否为终结符,是的话加入 firstVt[x].insert(str[1]); dfs(y); //搜索当前非终结符 set ::iterator it = firstVt[y].begin(); for(;it!=firstVt[y].end();it++) //加入非终结符y的firstVt集合 firstVt[x].insert(*it); }else{ firstVt[x].insert(str[0]); //如果是终结符,直接加入 } }}void makeFirstVt(){ memset(vis,0,sizeof(vis)); for(int i=0;i ::iterator it = firstVt[i].begin(); for(;it!=firstVt[i].end();it++) printf("%c ",*it); puts(""); }}//初始化工作,清空数组void init(){ memset(used,0,sizeof(used)); //初始化used数组,用于记录VT集 vt.clear(); //清空VT集合 vnode.clear(); //清空产生式node集 mp.clear(); //清空维护产生式下标集 for(int i=0;i<=maxn;i++) //清空输出结果firstVt集 firstVt[i].clear();}int main(){ while(cin>>n){ init(); //初始化工作 for(int i=0;i
输出结果
测试样例
8E->E+TE->TT->T*FT->FF->P^FF->PP->(E)P->i
参考文献
转载地址:https://chocolate.blog.csdn.net/article/details/106634252 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月16日 19时03分55秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Windows 11答疑:大家最关心的10个问题
2019-04-29
select、poll、epoll之间的区别
2019-04-29
Shopify!Shopify!Shopify!
2019-04-29
这是美国MarTech最大的一家独立公司:HubSpot
2019-04-29
从开发到产出:关于机器学习的七则干货建议
2019-04-29
你想成为数据科学家吗?不要把机器学习当成入门第一课
2019-04-29
你想成为数据科学家吗?不要把机器学习当成入门第一课
2019-04-29
现代社会悖论:信息泛滥是一只不守规矩的野兽
2019-04-29
如何设计自己的第一个加密交易机器人?
2019-04-29
浪费在Excel上的时间:如何开始专家式机器学习实验追踪?
2019-04-29
失业三星期:我寻找第二份编程工作之路
2019-04-29
跳过媒介,我们能不能只用思想控制计算机?
2019-04-29
服务器宕机:谷歌最近经历了“黑客攻击”吗?
2019-04-29
RepVGG:极简架构,SOTA性能,让VGG式模型再次伟大
2019-04-29
提升查询技能,这7条SQL查询错误必须解决
2019-04-29
TKDE 2020 | 综述:基于知识图谱的推荐系统
2019-04-29
休息时间!哪些业余活动能提升开发人员的技能?
2019-04-29
把人脑“森林”上传到计算机:人类脑计划只是一个科幻野心?
2019-04-29
智力测试:如何超越动物之智?
2019-04-29
事关人类生存?为什么要探寻AI系统的可解释性?
2019-04-29