【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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:php-rabbitmq结合rabbitmq_delayed_message_exchange实现延时队列
下一篇:字节跳动前端一面面经

发表评论

最新留言

很好
[***.229.124.182]2024年04月16日 19时03分55秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章