当前位置: 首页 > news >正文

编译原理(1)----LL(1)文法(首符号集,后跟符号集,选择符号集)

一.首符号集(First(\alpha))

技巧:找最左边可能出现的终结符

例:

1.First(E)

E->TE^{'},最左边为T,又因为T->FT^{'},最左边为F,F->(E)|i,则最左边为{(,i }

2.First(TE^{'}):只需要看符号串最左边的符号,即=First(T)

T->FT^{'},最左边为F,F->(E)|i,则最左边为{(,i }

3.First((E)):也只需要看最左边的

   First((E))={ ( }

4.First(i):终结符的first集就是它本身

First(i)={i} 

其他以此类推:

 

二.后跟符号集(Follow(\alpha)):只针对非终结符

技巧:看”->“的右边,找出非终结符后面所能跟随的所有终结符

1. # \epsilon Follow (S),S为识别符号,即 ”#“要放在开始符号"S"的 Follow集中

2.若存在规则U->xWy,First(y)-{\varepsilon}(空串) \epsilonFollow(W)

3.若存在规则U->xW或U->xWy,其中y能广义推导出\varepsilon(空串),则Follow(U)\epsilonFollow(W)

Follow(E)

首先E是开始符号,Follow(E)={#}

在"->"右边找E,看E后面跟的所有终结符号,这里F->(E)| i,E的右边为")",终结符的First集就是它本事(对应第二条规则)

所以Follow(E)={#,)}

 Follow(T)

首先找”->“的右边,看T后面跟的所有终结符号

E->TE^{'}        E^{'}->+TE^{'}|\varepsilon

T后面跟的是E^{'}E^{'}的First集是{+,\varepsilon},将\varepsilon去掉,最后得到{+},又因为E^{'}可以推导出\varepsilon空串(对应第三条规则),就要把

E->TE^{'}        E^{'}->+TE^{'}|\varepsilon    ”->“左边的E和E^{'}的follow集写上

Follow(T)={+,#,)}

 Follow(E‘)

首先找”->“的右边,看E’后面跟的所有终结符号

E->TE^{'}        E^{'}->+TE^{'}|\varepsilon

E^{'}后面没有符号,E^{'}的follow集就是”->“左边E和E^{'}的follow集

Follow(E^{'})={#,)}

以此类推:

总结

 在"->"右边寻找需要求的非终结符,如果非终结符后面是终结符号,直接放到follow集中,如果非终结符后面是非终结符,就看非终结符的first集内容是什么,如果有\varepsilon(空串)

1.那么将空串去掉写入follow集中

2.并且将”->“左边的非终结集的follow集也写入该follow集中

3. 选择符号集:Select(A->\partial)

约束:有两条或两条以上产生式才算可选集

E->TE'        不用算可选集

E‘->+TE'|\varepsilon        算可选集

规则: 

Select (E'->+TE')

根据规则,不能广义推导出\varepsilon,那么运用第一条规则

Select (E'->+TE')={+}

Select(E'->\varepsilon

运用第二条规则,”->“右边的首符号集-空串(这里-\varepsilon后为空集),再并上E’的follow集

Select(E'->\varepsilon) ={#,)}

Select(T'->+FT')

”+"号的首符号集就是”+“,所以

 Select(T'->+FT')={+}

以此类推:

 

http://www.lryc.cn/news/220976.html

相关文章:

  • 远程仓库地址改变后更换url
  • VR全景如何助力乡村振兴,乡村发展在哪些方面用到VR全景技术
  • 21.6 Python 构建ARP中间人数据包
  • DVWA靶场SQL注入
  • AD教程 (九)导线及NetLabel的添加
  • Rust函数进阶
  • springboot前后端时间类型传输
  • Deepin安装英特尔AX200 Wifi驱动
  • 第十九节——vue内置组件
  • 路由器基础(二): BGP原理与配置
  • 【漏洞复现】Django _2.0.8_任意URL跳转漏洞(CVE-2018-14574)
  • 【广州华锐互动】军用飞机VR实战训练系统
  • AI生图王者之战!深度体验实测,谁是真正的艺术家?
  • Spring Cloud - 手写 Gateway 源码,实现自定义局部 FilterFactory
  • 14、Python继承和多态:基础继承、方法重写、多态的基本概念
  • 聊聊logback的StatusManager
  • [PyTorch][chapter 61][强化学习-免模型学习1]
  • 网络运维Day04-补充
  • 前端埋点方式
  • iOS导航栏返回按钮
  • 2023中国视频云市场报告:腾讯云音视频解决方案份额连续六次蝉联榜首,加速全球化布局
  • jpa Repository的常用写法总结
  • 笔记本电脑 禁用/启用 自带键盘
  • 基于 golang 从零到一实现时间轮算法 (三)
  • k8s 1.28安装
  • 安装anaconda时控制台conda-version报错
  • 链表(1)
  • 智慧农业:农林牧数据可视化监控平台
  • 知识注入以对抗大型语言模型(LLM)的幻觉11.6
  • 机器人物理交互场景及应用的实际意义