练习2-1

  1. 给出下述句子的推导,并画出语法树:

    (1) John ate the big peanut

    (2) John ate the big brown peanut

    (3) John ate the big roasted peanut

    (2)(3)推导方式类似,区别为最后的<名词短语>继续推导为<形容词><名词短语>

  2. 利用规则2-1,除最左推导外,给出句子"The big elephant ate the peanut"的另外两种推导(其中一种为最右推导)。

    注:所谓最左(最右)推导,是指在推导的每一步中,若符号串中有两个以上语法成分(非终结符号)同时存在时,总是选取最左边(最右边)的语法成分进行推导。后面将给出这两种推导的形式定义。

练习2-2

  1. 令A={0,1,2},又令x=01,y=2和z=001,写出如下符号串及其长度:

    xy={012} |xy|=3

    xyz={012001} |xyz|=6

    x4={01010101} |x4|=8

    (x3)(y2)={01010122} |(x3)(y2)|=8

    (xy)2={012012} |(xy)2|=6

  2. 令A={0,1,2},写出集合A+和集合A*的7个最短的符号串。

    A+: 0,1,2,00,01,02,10

    A*: ε,0,1,2,00,01,02

  3. 试证明:A+=AA*=A*A

    由定义:A+ =A1∪A2∪A3∪......∪An∪...... ={x, x2, x3, ... ,xn,... |x∈A}

    A* =A0∪A+={ε, x, x2, x3, ... ,xn,... |x∈A}

    故 A ={x, x2, x3, ... ,xn,... |x∈A}

    ={xε, xx, xx2, x3, ... ,xn,... |x∈A}

    =AA*

    ={εx, xx, x2x, x3x, ... ,xnx,... |x∈A}

    =A*A

练习2-3

  1. 写一文法,使其语言是偶整数的集合。

    G = <Vn,Vt,P,Z> = <{F,S,D,N}, {0,1,2,...,9,+, -}, P, S>

    P:

    F ::= + | -

    S ::= FND | FD | ND | D

    D ::= 0 | 2 | 4 | 6 | 8

    N ::= NN | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

  2. 写一文法,使其语言是偶整数的集合,但不允许有以0开始的偶整数。

    G = <Vn,Vt,P,Z> = <{F,S,K,D,N}, {0,1,2,...,9}, P, S>

    P:

    F ::= + | -

    S ::= KD | D

    K ::= KN | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

    D ::= 0 | 2 | 4 | 6 | 8

    N ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

  3. 设文法G的规则是< A > ::= b< A >|cc, 试证明:cc, bcc, bbcc, bbbcc ∈ L[G]。

    A => cc ∈ L[G]

    A => bA => bcc ∈ L[G]

    A => bA => bbA => bbcc ∈ L[G]

  4. 有文法G3[<表达式>]:

    <表达式> ::= <项> | <表达式>+<项> | <表达式>-<项>

    <项> ::= <因子> | <项>*<因子> | <项>/<因子>

    <因子> ::= (<表达式>) | i

    试给出下列符号串的推导:i, (i), i* i, i* i+i , i*(i+i)。

    <表达式> => <项> => <因子> => i

    <表达式> => <项> => <因子> => (<表达式>) => (<表达式>) => (<项>) => (<因子>) => (i)

    <表达式> => <项> => <因子> => <项>*<因子> => <项> *i => <因子> *i => i *i

    <表达式> => <表达式>+<项> => <表达式>+i => i*i+i

    <表达式> => <表达式>+<项> => <表达式>+<因子> => <表达式>+ (<表达式>) => <表达式>+ (<表达式>+<项>) => i+(i+i)

9. 设文法G为

        N ::= D |ND

        D ::= 0|1|2|3|4|5|6|7|8|9

        (1) G的语言L(G)是什么?

        (2) 给出句子0125和783的最右推导(规范推导)和最左推导。

(1) L(G) = {0,1,2,3,4,5,6,7,8,9}

(2) 0125: 最右:N => ND => N5 => ND5 => N25 => ND25 => N125 => D125 => 0125

最左:N => ND => NDD => NDDD => DDDD => 0DDD => 01DD => 012D => 0125

783: 最右:N => ND => N3 => ND3 => N83 => D83 => 783

最左:N => ND => NDD => DDD => 7DD => 78d =>783

知识点

从集合的角度看语言(符号、符号串)

符号: 字母表中的元素 例: a,b,c (–用英文字母表开头的小写字母和字母表靠近末尾 的大写字母来表示符号)

符号串: 符号的有穷序列 例:a, aa, ac, abc,... (用英文字母表靠近末尾的小写字母来表示符号串)

文法的形式定义:4元组

文法::G=<Vn,Vt,P,Z>

推导: 直接推导:v=>w

间接推导:v=>u0=>u1=>u2=>...=>un=w

规约

递归规则:规则右部具有和左部相同非终结符号。

简单短语: Z=*=>xUy且U=>u,称u是一个相对于非终结符号U的句型w的简单短语。

句柄: 任一句型最左简单短语称为该句型的句柄。

构造文法的基本技巧 :枚举、重复生成、对称

推导树:给定文法,推导句子

复习

文法:G=(Vn,Vt,P,Z)

  • 若有规则U ::= u,且 v=x Uy,w=xuy, 则有推导 xUy =>xuy ,即 v =>w

  • 注意弄清 =>【上面是+,*,|,+|】的概念

  • 文法G对应的语言L(G[Z]) = {x| x∈Vt*, Z+=>x}

  • 递归U =+= ...U...

  • 有句型w=xuy,若Z=*=>xUy,且U=+=u,则u是句型w相对于U的短语

  • 简单短语: Z=*=>xUy且U=>u,称u是一个相对于非终结符号U的句型w的简单短语。

  • 句柄: 任一句型最左简单短语称为该句型的句柄。

BUAA 编译作业 练习2-1 2-2 2-3相关推荐

  1. BUAA 编译作业 练习11

    1. 令A.B和C是任意正则表达式,证明以下关系成立. A|A = A (A*)* = A* A* = ε |AA* (AB)*A = A(BA)* (A|B)* = (A*B*)* = (A*|B* ...

  2. BUAA 编译作业 练习3

    伪代码那道题自己写的也不是很确定......暂时先鸽了/(ㄒoㄒ)/~~ 画出下述文法的状态图: <Z> ::= <B>e <B> ::= <A>f & ...

  3. BUAA数据结构作业——基于Huffman码的文件压缩工具

    目录 前言 题目 问题描述 输入形式 输出形式 样例 问题分析 代码实现 前言 大家好哇!今天给大家分享一道Huffman码的实战应用题.Huffman码来源于Huffman树,假设二叉树有m个叶结点 ...

  4. 编译Linux 2.6内核

    编译内核易如反掌.让人叹为观止的是,这实际上比编译和安装像glibc这样的系统级组伴还要简单.2.6内核提供了一套新工具,使编译内核更加容易,比早期发布的内核有了长足的进步. 2.3.1 配置内核 因 ...

  5. visual studio编译linux,在 Visual Studio 中配置 Linux MSBuild C++ 项目

    在 Visual Studio 中配置 Linux MSBuild C++ 项目Configure a Linux MSBuild C++ project in Visual Studio 10/16 ...

  6. mysql openwrt 编译_如何编译OpenWrt

    (!文末,附加人生如戏写的编译OPENWRT的TXT内容,可直接跳至末尾,有例子) Openwrt 官方正式的发行版是已编译好了的映像文件(后缀名bin或trx.trx2),此映像文件可从Openwr ...

  7. 读书笔记-内存初始化和清理

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 在Java开发中,对象创建.数据关系.垃圾回收始终是不变的话题,今天我们来简单说一下初始化和清理的问 ...

  8. 我终于加上博士大佬的微信!攒了近百个技术问题,一口气解决!(文末有福利)...

    昨天,我终于加上了CMU计算机博士大佬 Johnson 的微信了! 之前我研究机器学习的时候,遇到了很多小问题,希望这位大佬能帮忙指点一下. 毕竟CMU是计算机学科全球排名前三的顶级高校,当然出来的博 ...

  9. 架构编译器框架系统 LLVM 使用简介

    2019独角兽企业重金招聘Python工程师标准>>> LLVM 是什么 LLVM 是 low level virtual machine(底层虚拟机)的简称,它是一个开源的编译器架 ...

最新文章

  1. IntelliJ IDEA2016.2 Eclipse(mac os x)常用推荐捷键手册
  2. 方舟服务器显示队友位置,方舟如何看队友在哪 | 手游网游页游攻略大全
  3. express 的 middleware 设计
  4. css设置鼠标指针光标样式
  5. 分布式文件系统之MogileFS的使用
  6. 程序员如何财务自由【原创】
  7. [教程][6月4日更新]VMware 8.02虚拟机安装MAC lion 10.7.3教程 附送原版提取镜像InstallESD.iso!...
  8. 速卖通关键词挖掘工具_SEMer如何利用工具挖掘更多的关键词?拓词技巧
  9. U8 ActiveX 部件不能创建对象
  10. VisualAge使用技巧(二)
  11. mysql去除重复数据
  12. 使用Dir函数遍历文件和目录
  13. 路由器配置和静态路由
  14. java swing 多行文本,Java Swing JTextArea
  15. 神经网络控制与matlab仿真,matlab神经网络拟合预测
  16. 8.8 Web前端-小米商城项目实战
  17. 扎心了!当代大学生孤独等级测试,你是第几级?
  18. 牛客小白月赛3 B.躲藏
  19. 高新计算机考试题库安装,计算机信息高新技术考试模块题库教材配套一览表.doc...
  20. 比手机自带截图更吊的截图大师去广告汉化版摇一下即可截图!

热门文章

  1. 2021年秋季PAT乙级题解(C语言)
  2. 假如生活欺骗了你 (普希金诗歌)_ywyuan_新浪博客
  3. CainAbel工具的下载和使用
  4. php时间戳与日期格式比大小,比较两个时间戳的大小
  5. Bit-Z的投资忠告
  6. 运维 英文 日常 总结
  7. 信息处部门职责及岗位部门职责(附下载)
  8. Android架构组件Room功能详解,面试必问
  9. ❤️汇总贴❤️本科课程汇总(武汉理工大学计算机科学与技术专业)
  10. 清华EMBA课程系列思考之十六(1) -- 创新与企业转型