编译原理实验 求first集和follow集1
需积分: 0 126 浏览量
更新于2022-08-08
收藏 21KB DOCX 举报
编译原理实验求first集和follow集
本资源摘要信息将为您详细介绍编译原理实验中求first集和follow集的知识点。
实验目标
本实验的目标是编程实现first集和follow集的计算,以便更好地理解和掌握编译原理中的基本概念。
输入格式
输入格式为每行输入一个产生式,左部右部中间的→用空格代替。非终结符等价于大写字母/^表示空不包含有|的产生式(即含有|的产生式已分成多个产生式)#表示输入右端的结束标记输入到文件结束,或用0 0结尾。
First 集
First集是指给定非终结符或终结符的可能的开头符号集合。计算First集需要遵循以下规则:
1. 若X∈VT,则FIRST(X)={X}。即终结符的First集就是它本身。
2. 若X∈VN,且有产生式X→a…,a∈VT,则a∈FIRST(X)。即非终结符X能推导出以终结符a开头的串,那么这个终结符a属于X的First集。
3. X→ε,则ε∈FIRST(X)。即非终结符X能推导出空符号串ε,那么空符号串ε也属于X的First集。
4. X→Y…是一个产生式且Y∈VN,则把FIRST(Y)中的所有非空符号串ε元素都加入到FIRST(X)中。
5. 若X∈VN;Y1,Y2,…,Yi∈VN,且有产生式X→Y1 Y2 … Yn;当Y1 Y2 … Yn-1都能推导出ε时,则FIRST(Y1)、FIRST(Y2)、…、FIRST(Yn-1)的所有非空元素和FIRST(Yn)包含在FIRST(X)中。
Follow 集
Follow集是指给定非终结符的可能的后续符号集合。计算Follow集需要遵循以下规则:
1. 设S为文法中开始符号,把{#}加入FOLLOW(S)中。
2. 若A→αBβ是一个产生式,则把FIRST(β)的非空元素加入FOLLOW(B)中。如果β能够推导出ε则把FOLLOW(A)也加入FOLLOW(B)中。
可能用到的数据结构
在计算First集和Follow集时,可能用到的数据结构包括:
* map:用于存储First集和Follow集的元素
* set:用于存储非终结符和终结符的集合
* vector:用于存储产生式的右部符号
* multimap:用于存储非终结符和其对应的First集和Follow集
可能用到的子功能模块
在计算First集和Follow集时,可能用到的子功能模块包括:
* 判断大小写:判断终结符与非终结符
* 判断非终结符能否推导出空
* 不考虑左递归的情况(如有左递归出现,可简单的报错处理)
* 求follow集时,右侧最后的非终结符(直接或间接)的follow需要加入该条产生式左侧非终结符的follow集中
行走的瓶子Yolo
- 粉丝: 36
- 资源: 342
最新资源
- 云计算,搭建分布式,然后实现Titantic数据集训练、分类的的代码
- 同城宠物照看-JAVA-基于Spring Boot的同城宠物照看系统的设计与实现(毕业论文)
- 云计算,实现中文字频统计代码,课程设计
- weixin138社区互助养老+ssm(论文+源码)-kaic.zip
- 扶贫助农系统-JAVA-基于spring boot扶贫助农系统设计与实现(毕业论文)
- 母婴护理知识共享-JAVA-基于SpringBoot+vue 的母婴护理知识共享系统(毕业论文)
- 番茄叶片图像病害多标签分类,约5600张数据
- 影音互动科普网站-JAVA-基于SpringBoot的哈利波特书影音互动科普网站设计与实现(毕业论文)
- 航空散货调度-JAVA-基于SpringBoot的航空散货调度系统设计与实现(毕业论文)
- 基于Python Scrapy的贝壳找房爬虫程序
- zigbee CC2530无线自组网协议栈实现一个协调器+多个终端的通讯及控制.zip
- 校园二手物品交易-JAVA-基于springBoot的校园二手物品交易系统的设计与实现(毕业论文)
- 计算机视觉项目:Swin-Transformer 【tiny、small、base】模型实现的图像识别项目:番茄病害图像分类
- 功能完善的电商数据智能爬虫采集系统项目全套技术资料.zip
- 青少年心理健康教育网-JAVA-基于springboot的青少年心理健康教育网站的设计与实现(毕业论文)
- 密评流程及商密应用方案解析