编译原理LL(1)文法的判断(first集、follow集和select集)

2023-05-16

编译原理LL(1)文法的判断(first集、follow集和select集)

1、问

  • 如何通过给定的文法,判断该文法是否是LL(1)文法?

2、答

  • 求出该文法的first集、follow集和select集,通过select集之间的关系进行判断

3、集合

3.1 first集

  1. B->abS first(B)={a}
  2. B->AS
  • 若A(A可0步或多步得出A->ε),first(B)={first(A)-{ε}}∪first(S)
  • 若A(A不可0步或多步得出A->ε),first(B)=first(A)
  • 若A满足,S也满足,即A和S均可0步或多步得出->ε,则first(B)={first(A)-{ε}}∪{first(S)-{ε}}∪{ε}
  1. 反复使用上述2步,直到每个符号的first集不再增大为止

同理由一个符号的first集可得出符号串的first集

3.2 follow集合

  1. 对起始符,follow集加入{#}
  2. 对A->aBbc,follow(B)={b}
  3. 对A->aBD,
    若D(D不可0步或多步得出D->ε) ,follow(B)=first(D)
    若D(D可0步或多步得出D->ε) ,follow(B)=follow(A)
  4. 反复使用上述步骤,直到每个符号的follow集不再增大为止

3.3 select集合

select集是对每个产生式进行处理

  1. select(S->ab)=first(a)
  2. select(S->AB)
    若AB均可 0步或多步得出->ε,则select(S->AB)={first(AB)-{ε}}∪follow(S)
    反之,select(S->AB)=first(AB)
  3. 采用上述步骤,直到获得所有产生式的select集

3.4 LL(1)文法判断

由上步的select集,然后对相同的左部进行交集判断,若所有的交集均为空,则表示该文法是LL(1)文法
若有一类非终结符不满足条件,则都不可称之为LL(1)文法

4、例

文法G[S]:
S→AaS|BbS|d
A→a
B→ε|e

  1. first集:
    first(S)=first(AaS)∪first(BbS)∪{d}
    =first(A)∪{first(B)-{ε})∪first(b)∪{d}
    ={a,e,b,d}
    first(A)={a}
    first(B)={e,ε}
    first(AaS)=first(A)={a}
    first(BbS)={first(B)-{ε}}∪first(b)={e,b}
    first(d)=first(d)={d}
    first(a)=first(a)={a}
    first(ε)=first(ε)={ε}
    first(e)=first(e)={e}
  2. follow集:
    follow(S)=follow(S)∪follow(S)∪{#}={#}
    follow(A)=first(a)={a}
    follow(B)=first(b)={b}
  3. select集:
    select(S->AaS)=first(A)={a}
    select(S->BbS)={first(B)-{ε}}∪first(b)={e,b}
    select(S->d)=first(d)={d}
    select(A->a)=first(a)={a}
    select(B->ε)=first(ε)={ε}
    select(B->e)=first(e)={e}
  4. 判断
    select(S->AaS)∩select(S->BbS)∩select(S->d)=Ø
    select(B->ε)∩select(B->e)=Ø
    因此称之为LL(1)文法

如有任何问题请留言,24小时内回复,谢谢。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编译原理LL(1)文法的判断(first集、follow集和select集) 的相关文章

随机推荐

  • hdu - 4642 - Fliping game(博弈)

    题意 xff1a Alice和Bob玩游戏 xff0c 一个N M的矩阵 xff0c 里面是1或0 xff0c 每人每次选择一个1的位置 xff0c 然后将这个位置到右下角的整个矩形元素全部取反 xff08 1变0 xff0c 0变1 xf
  • 图形界面报错“已拒绝X11转移申请”的解决方法

    今天想通过本机给虚拟机起x manager图形界面的时候报出 解决办法 xff1a 原来X11 forwarding依赖 xorg x11 xauth 软件包 xff0c 所以必须先安装 xorg x11 xauth 软件包 yum ins
  • bash: ifconfig: command not found 解决办法

    经常遇到 34 bash xxxx command not found 34 这样的问题 xff0c 用root用户也不行 xff0c 在网上查阅了此问题 xff0c 解决方法如下 xff1a 原文1 http hi baidu com j
  • 用CMfcShellTree和CMFCShellListCtrl实现资源管理器并过滤扩展名

    资源管理器 CMfcShellTree和CMFCShellListCtrl是VS2008 SP1和VS2010内自带的控件 xff0c 用这两个控件实现资源管理器只需几行代码 CMFCShellTreeCtrl m tree CMyShel
  • 解决虚拟机下CentOS系统无法识别usb设备

    其实不是什么 解决 xff0c 虚拟机默认是自动挂载usb设备的 只是要注意插usb设备的时候 xff0c 虚拟机必须要处于当前窗口 然后就会自动弹出已安装好usb设备的提示 xff08 如果系统比较卡 xff0c 需要多等一会 xff09
  • 基于MDK的汇编语言编写及小灯闪烁的汇编程序实现

    基于MDK的STM32汇编语言编写及小灯闪烁的汇编程序实现 一 新建工程二 配置环境1 选择设备2 选择运行环境3 添加源文件 三 测试代码1 源码2 仿真器设置3 编译调试 四 HEX文件解读五 闪烁LED的程序六 总结参考 一 新建工程
  • WIndows10连接虚拟机显示connection confused

    Windows10连接虚拟机显示connection confused 当我们想由win10连接虚拟机终端时 xff0c 使用第三方软件Putty或者win10的cmd都可能出现connection confused问题 xff0c 解决这
  • 交换两个数字(不使用其他变量)

    面试题 交换两个数字 xff08 不使用其他变量 xff09 一 题目要求 xff1a 有两个整数变量a 61 6 b 61 100不使用其他变量 xff0c 交换两个变量的值 二 解法 解法1 xff08 使用其他变量 xff09 xff
  • unity如何使用电脑模拟VR环境

    unity如何通过VRTK模拟VR环境 如何在没有HTC VIVE的前提下使用VR xff1f 由于作者研究室课题是基于虚拟现实的人机交互 xff0c 需要用到VR下的场景 xff0c 但由于实验室设备只有一套 xff0c 而当我们想要随时
  • 笔试算法:青蛙跳台阶

    笔试算法 xff1a 青蛙跳台阶 1 题目表述 假设青蛙正在跳台阶 需要 n 阶你能到达楼顶 每次青蛙可以跳 1 或 2 个台阶 xff0c 但不可以连续跳2个 请问有多少种不同的方法可以到楼顶呢 xff1f 注意 xff1a 给定 n 是
  • 输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数

    输入一行字符 xff0c 分别统计出其中英文字母 空格 数字和其他字符的个数 首先需要判断各自所出的范围 xff1a 中英文字母 xff1a a到z A到Z 空格 xff1a 空一个字符 数字 xff1a 1 9 然后则对一串字符进行逐个比
  • 逆波兰式的实现及表达式的值

    逆波兰式的实现 1 概念 逆波兰式也叫后缀表达式 xff0c 这里先简单帮大家理解一下概念性问题 像我们平常使用到的表达式如 a 43 b c
  • C语言栈的用法(创建、入栈、出栈、遍历)

    C语言栈的用法 xff08 创建 入栈 出栈 遍历 xff09 本篇博客主要简单介绍如何使用C语言构建栈 xff0c 元素入栈 xff0c 元素出栈以及遍历所有的栈内元素 1 栈的定义 首先对栈进行定义 xff0c 构建一个简单的结构体 x
  • 我印象中的徐志摩

    我印象中徐志摩 在我上中学的时候 xff0c 徐志摩对于我来说是一个神圣不可侵犯的名字 xff0c 那么一个具有才华和能力 xff0c 从他的作品里感受到他那浪漫的文艺气息和对自由生活的追求 xff0c 无不令我们这些初入青春期的孩子们留下
  • 根据文法规则,判断文法类型

    根据文法规则 xff0c 判断文法类型 1 实验要求 输入 xff1a 文法规则 输出 xff1a 文法类型 2 实验原理 文法规则 xff1a 以四元组的形式展示出来 xff1a 文法G 定义为四元组G 61 Vn Vt P S Vn x
  • 根据文法进行表达式推导

    根据文法进行表达式推导 xff08 编译原理 xff09 1 实验要求 已知文法 xff1a E gt T E 43 T T gt F T F F gt E i 请给出下述表达的推导公式 xff1a i 43 i i i 43 i i 2
  • (编译原理)正规文法转正规式(原代码)

    xff08 编译原理 xff09 正规文法转正规式 一 实验要求 输入 xff1a 正规文法输出 xff1a 正规式 例 xff1a 输入 xff1a S gt aB B gt b 输出 xff1a ab 输入 xff1a S gt aS
  • PDF转Word转换器

    PDF转换器 这款PDF转换器可以将PDF文件转换为Word Excel和PPT等 而且是免费的 xff0c 不用考虑PDF页数问题 xff0c 全都是免费的哦 1 安装链接 https pan baidu com s 18ySVrh wn
  • 构造LL(1)文法的递归下降子程序

    构造LL 1 文法的递归下降子程序 1 要求 输入 LL 1 文法输出 xff1a 递归下降子程序如 xff1a 文法G S S AaS BbS d A a B e若输入 xff1a aad 则输出 xff1a S AaS A a S d
  • 编译原理LL(1)文法的判断(first集、follow集和select集)

    编译原理LL 1 文法的判断 xff08 first集 follow集和select集 xff09 1 问 如何通过给定的文法 xff0c 判断该文法是否是LL 1 文法 xff1f 2 答 求出该文法的first集 follow集和sel