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

《编译原理》求 FIRSTVT 集和 LASTVT 集的步骤 - 例题解析

《编译原理》求 FIRSTVT 集和 LASTVT 集的步骤 - 例题解析

算符优先关系表的构造中涉及到求 FIRSTVT 集和 LASTVT 集。

表示及含义:

FIRSTVT(T)非终结符T的最左终结符集合
LASTVT(T)非终结符T的最右终结符集合

定义:

在这里插入图片描述

定义解释:

FIRSTVT(T)非终结符T经过1步或多步推导,得到的最左端终结符,以及左端第二个终结符的集合
LASTVT(T)非终结符T经过1步或多步推导,得到的最右端终结符,以及倒数第二个终结符的集合

求 FIRSTVT 集的步骤:

(1)若有产生式 T→a 或者 T→Ra…,则 a ∈ FIRSTVT(T)

(2)若 a ∈ FIRSTVT®,且有产生式 T→R…,则 a ∈ FIRSTVT(T)

​ 就是说如果 a 是非终结符 R 的 FIRSTVT 集,且 T 可以推出以非终结 R 带头的右部,则 a 也是非终结符 T 的 FIRSTVT 集。

注: 省略号 … 可以为空,就是没有

求 LASTVT 集的步骤:

(1)若有产生式 T→…a 或者 T→…aR,则 a ∈ LASTVT(T)

(2)若 a ∈ LASTVT®,且有产生式 T→…R,则 a ∈ LASTVT(T)

例题:

已给文法:
G[S]:
S→a|b|(B)
A→S, A|S
B→A

求所有非终结符的 FIRSTVT,LASTVT 集

解析:

(1)只要是让求 FIRSTVT,LASTVT 集,则该文法就隐含条件为算符优先文法。

(2)算符优先文法的特点是:不会出现两个相邻的非终结符,即两个非终结符中间夹着一个终结符。如果第一个是终结符则第二个是非终结符。

结果:

FIRSTVT 集LASTVT 集
S{a, b, ( }{a, b, ) }
A{a, b, (, 逗号 }{a, b, ), 逗号}
B{a, b, (, 逗号 }{a, b, ), 逗号}

相关文章:

  • 《编译原理》求短语,直接短语,句柄,素短语,最左素短语 - 例题解析
  • 《编译原理》LR 分析法与构造 LR(1) 分析表的步骤 - 例题解析
  • 《编译原理》控制流语句 if 和 while 语句的翻译 - 例题解析
  • 《编译原理》画 DAG 图与求优化后的 4 元式代码- 例题解析
  • 不用 qlv 格式转换成 mp4 - 优雅的下载腾讯视(mp4 格式)
  • LeetCode01 - 两数之和(Java 实现)
  • LeetCode02 - 两数相加(Java 实现)
  • LeetCode03 - 无重复字符的最长子串(Java 实现)
  • Idea 获取 git 仓库时更新类型update type 的选择
  • Java 工具类 IpUtil - 获取本机所有 IP 地址,LocalHost 对应地址 IP
  • 8080 端口被占用的解决方法 netstat -ano;taskkill (命令行)
  • 手写 Spring MVC
  • Oracle 在 Drop 表时的 Cascade Constraints
  • Oracle:ORA-01219:database not open:queries allowed on fixed tables/views only
  • MyBatis: Invalid bound statement (not found) 错误的可能原因
  • exports和module.exports
  • JavaScript对象详解
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • 阿里云购买磁盘后挂载
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 前端知识点整理(待续)
  • 问题之ssh中Host key verification failed的解决
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 学习Vue.js的五个小例子
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 国内开源镜像站点
  • 湖北分布式智能数据采集方法有哪些?
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • $L^p$ 调和函数恒为零
  • (02)vite环境变量配置
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (十八)SpringBoot之发送QQ邮件
  • (一)Dubbo快速入门、介绍、使用
  • *** 2003
  • .NET Core中的去虚
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • [20140403]查询是否产生日志
  • [Android]使用Android打包Unity工程
  • [BetterExplained]书写是为了更好的思考(转载)
  • [CareerCup] 17.8 Contiguous Sequence with Largest Sum 连续子序列之和最大
  • [EFI]Lenovo ThinkPad X280电脑 Hackintosh 黑苹果引导文件
  • [Flutter]打包IPA
  • [Intel Edison开发板] 05、Edison开发基于MRAA实现IO控制,特别是UART通信
  • [java]删除数组中的某一个元素
  • [JDBC-1] JDBC Base Template
  • [MicroPython]TPYBoard v102 CAN总线通信
  • [na]wireshark抓包排错-tcp.flags.reset
  • [NISACTF 2022]join-us
  • [one_demo_10]递归解决汉诺塔问题
  • [ROS2] --- ROS diff ROS2
  • [UIUCTF 2022] crypto ASR,WringingRing