编译语言原理与编译实验报告

课程名称 编程语言原理与编译
实验项目 语言与文法

实验目的

  • 了解文法的历史
  • 理解产生式规则
  • 掌握最左推导,最右推导
  • 掌握文法的二义性
  • 掌握文法的分类与层次

实验内容

一、阅读课件完成课后习题

1、给出语言 L2={a^n b^m| m≥n≥1} 的文法

P1:S→ABA→aAb∣abB→bB∣εP_{1}:S\to AB\\ A\to aAb\mid ab\\ B\to bB\mid \varepsilon P1​:S→ABA→aAb∣abB→bB∣ε

2、给出语言 L1={a^(2n+1)|n≥0} 的文法

P2:A→aAa∣aP_{2}:A\to aAa\mid a P2​:A→aAa∣a

3、给出语言L3={a^n b^m c^k| n,m,k≥0}的文法

P3:S→ABCA→AA∣a∣εB→BB∣b∣εC→CC∣c∣εP_{3}:S\to ABC\\ A\to AA\mid a\mid \varepsilon \\ B\to BB\mid b\mid \varepsilon \\ C\to CC\mid c\mid \varepsilon \\ P3​:S→ABCA→AA∣a∣εB→BB∣b∣εC→CC∣c∣ε

4、写一个文法,使其语言是正偶数的集合,每个偶数不以0开头

P4:S→NN→2∣4∣6∣8∣NMM→0∣2∣4∣6∣8P_{4}:S\to N \\ N\to 2\mid 4\mid 6\mid 8\mid NM \\ M\to 0\mid 2\mid 4\mid 6\mid 8 P4​:S→NN→2∣4∣6∣8∣NMM→0∣2∣4∣6∣8

5、给出语言L={1^n 0^m 1^m 0^n | n,m≥0}的文法

P5:S→1S0∣0A1∣εA→0A1∣εP_{5}:S\to 1S0\mid 0A1\mid \varepsilon \\ A\to 0A1\mid \varepsilon P5​:S→1S0∣0A1∣εA→0A1∣ε

6、给出语言L={ WaW^t | W∈{0|1}* },其中W^t表示W的逆的文法

P6:S→a∣0S0∣1S1P_{6}:S\to a\mid 0S0\mid 1S1 P6​:S→a∣0S0∣1S1

7、文法G[A]=({A},{a,b},{A→bA | a}, A) 所生成的语言是什么?

L(G[A])={bna∣n≥0}L(G[A])=\left \{ b^{n} a\mid n\ge 0 \right \} L(G[A])={bna∣n≥0}

8、文法G[N]为:

N→ND∣DD→0∣1∣2∣3∣4∣5∣6∣7∣8∣9N\to ND\mid D\\ D\to 0\mid 1\mid 2\mid 3\mid 4\mid 5\mid 6\mid 7\mid 8\mid 9 N→ND∣DD→0∣1∣2∣3∣4∣5∣6∣7∣8∣9

(1) G[N]所生成的语言是什么?

L(G[A])={α∣α为数字串}L(G[A])=\left \{ \alpha \mid \alpha 为数字串 \right \} L(G[A])={α∣α为数字串}

(2) 给出句子0127的最左、最右推导。

最左推导
N⟹ND⟹NDD⟹NDDD⟹DDDD⟹0DDD⟹01DD⟹012D⟹0127N\Longrightarrow ND\Longrightarrow NDD\Longrightarrow NDDD\Longrightarrow DDDD\Longrightarrow 0DDD\Longrightarrow 01DD\Longrightarrow 012D\Longrightarrow 0127 N⟹ND⟹NDD⟹NDDD⟹DDDD⟹0DDD⟹01DD⟹012D⟹0127
最右推导
N⟹ND⟹N7⟹ND7⟹N27⟹ND27⟹N127⟹D127⟹0127N\Longrightarrow ND\Longrightarrow N7\Longrightarrow ND7\Longrightarrow N27\Longrightarrow ND27\Longrightarrow N127\Longrightarrow D127\Longrightarrow 0127 N⟹ND⟹N7⟹ND7⟹N27⟹ND27⟹N127⟹D127⟹0127

9、已知文法G[S]=( {A,B},{a,b,c,d}, P, S ) , 其中 P 为:

S→ABA→aAb∣abB→cBd∣cdS\to AB\\ A\to aAb\mid ab\\ B\to cBd\mid cd S→ABA→aAb∣abB→cBd∣cd

该文法 所生成的语言是什么?
L(G[S])={anbncmdm∣n,m≥1}L(G[S])=\left \{ a^{n}b^{n}c^{m}d^{m}\mid n,m \ge 1\right \} L(G[S])={anbncmdm∣n,m≥1}

10、已知文法G[E]:

E→E+T∣E−T∣TT→T∗F∣T/F∣FF→(E)∣iE\to E+T\mid E-T\mid T\\ T\to T*F\mid T/F\mid F\\ F\to (E)\mid i E→E+T∣E−T∣TT→T∗F∣T/F∣FF→(E)∣i

证明 E+T*F 是它的一个句型,指出这个句型的短语、直接短语和句柄
E⟹E+T⟹E+T∗F短语:E+T∗F、T∗F直接短语:T∗F句柄:T∗FE\Longrightarrow E+T\Longrightarrow E+T*F\\\\ 短语:E+T*F、T*F\\ 直接短语:T*F\\ 句柄:T*F E⟹E+T⟹E+T∗F短语:E+T∗F、T∗F直接短语:T∗F句柄:T∗F

11、已知文法G[S]:

S→(AS)∣(b)A→(SaA)∣(a)S\to (AS)\mid (b)\\ A\to (SaA)\mid (a) S→(AS)∣(b)A→(SaA)∣(a)

试找出符号串(a)和(A((SaA)(b)))的短语﹑直接短语和句柄(如果有的话)

  • 符号串(a))不是文法的句型,因此它没有短语﹑直接短语和句柄

  • S⟹(AS)⟹(A(AS))⟹(A(A(b)))⟹(A((SaA)(b)))短语:(A((SaA)(b)))、((SaA)(b))、(SaA)、(b)直接短语:(SaA)、(b)句柄:(SaA)S\Longrightarrow (AS)\Longrightarrow (A(AS))\Longrightarrow (A(A(b)))\Longrightarrow (A((SaA)(b)))\\\\ 短语:(A((SaA)(b)))、((SaA)(b))、(SaA)、(b)\\ 直接短语:(SaA)、(b)\\ 句柄:(SaA) S⟹(AS)⟹(A(AS))⟹(A(A(b)))⟹(A((SaA)(b)))短语:(A((SaA)(b)))、((SaA)(b))、(SaA)、(b)直接短语:(SaA)、(b)句柄:(SaA)

12、设有文法G[S]: S→iSeS| iS | i,试证明文法G[S]有二义性。

13、设有文法G[N]:

N→SE∣ES→SD∣DE→0∣2∣4∣6∣8∣10D→0∣1∣2∣3∣4∣5∣6∣7∣8∣9N\to SE\mid E\\ S\to SD\mid D\\ E\to 0\mid 2\mid 4\mid 6\mid 8\mid 10\\ D\to 0\mid 1\mid 2\mid 3\mid 4\mid 5\mid 6\mid 7\mid 8\mid 9 N→SE∣ES→SD∣DE→0∣2∣4∣6∣8∣10D→0∣1∣2∣3∣4∣5∣6∣7∣8∣9

(1)试证明文法G[N]有二义性。

(2)此文法所描述的语言是什么?

该文法所描述的语言是所有无符号偶数的集合(可以0开头)。

(3)试写出另一文法G’使L(G’)=L(G)且G’是无二义性的

N→SE∣ES→SD∣DE→0∣2∣4∣6∣8D→0∣1∣2∣3∣4∣5∣6∣7∣8∣9N\to SE\mid E\\ S\to SD\mid D\\ E\to 0\mid 2\mid 4\mid 6\mid 8\\ D\to 0\mid 1\mid 2\mid 3\mid 4\mid 5\mid 6\mid 7\mid 8\mid 9 N→SE∣ES→SD∣DE→0∣2∣4∣6∣8D→0∣1∣2∣3∣4∣5∣6∣7∣8∣9

二、阅读教材了解直线式语言SPL

代码与文法的对应关系

将代码等价转换为树形结构来描述,只注重语句和表达式,形成了直线式程序。

文法的产生式规则

与type 类型定义的关系

可以将文法直接翻译成数据结构的定义,其中每个文法符号对应这个数据结构中的一个typedef,例如:

而其中的A_stm其实是一个结构体。

与解释器interp的关系

通过解释器,利用构造器来解释执行语言,并对其环境、抽象语法、树数据结构的递归性予以展示。

三、参考简单语言解释器 Naive.fs 代码,尝试写出其文法

四、下面文法生成的语言分别是什么

G1 : S-> ABA -> aA|εB->bc|bBcG2: S ->aA|aA ->aS

G1:任意a个字符(包括0个)后跟着n个b和c,n至少为1

G2:任意奇数个a(至少一个)组成的字符串

ZUCC_编译语言原理与编译_实验04 语言与文法相关推荐

  1. 编译原理实验c语言cfg文法,编译原理

    地址在符号表中引入指针previous,来连接上一个符号的首地址运行时存储空间组织活动记录用于管理函数变量的信息栈式存储过程进入和返回通过变更top和sp指针,实现活动记录的栈式处理静态链实现局部变量 ...

  2. java基础训练_实验1Java语言程序设计基础训练.doc

    实验1Java语言程序设计基础训练 实验1 java语言程序设计基础训练 实验目的 熟悉Java程序结构,掌握基本数据类型的使用方法,熟练运用分支.循环等语句控制程序流程,掌握方法.重载方法的定义和使 ...

  3. ZUCC_计算机网络实验_实验04 VLAN配置

    浙江大学城市学院实验报告 文件下载 1.CSDN 2.百度网盘,提取码: vrvq 一.实验目的 掌握交换机VLAN的配置. 二.实验内容 用Packet Tracer模拟器建立网络,进行单交换机VL ...

  4. ZUCC_操作系统原理实验_Lab9进程的通信消息队列

    lab9进程的通信–消息队列 一.两个进程并发执行,通过消息队列,分别进行消息的发送和接收 1.代码: //接受消息 #include<stdio.h> #include<stdli ...

  5. 微型计算机原理及其应用彭楚武答案第三章,微机原理及其应用_第1章.ppt

    微机原理及其应用_第1章微机原理及其应用_第1章 本课程的考核方式: 开卷考试 评分标准: 期末考试成绩占70 %. 实验成绩占10 %. 课堂考核及作业占20% . 全院各专业统一命题.流水作业阅卷 ...

  6. c语言while求a和b的和程序,数据结构实验1_C语言_输入集合A和B求并集、交集、差集(while +...

    数据结构实验1_C语言_输入集合A和B求并集.交集.差集(while + 数据结构实验1_C语言_输入集合A和B求并集.交集.差集(while + switch + 功能函数)) 实验1 (1)实验目 ...

  7. linux 内核 3.3.8,Linux内核编译 Ubuntu 14.04.3 server 升级至3.19.8

    读书笔记:,原书第3版,陈莉君 康华 译 第2章:从内核出发 2.3节:编译内核 实验: ======================================================= ...

  8. java文件加密解密实验报告_《网络信息安全技术》_实验报告_破译vigenamp#232;re_密码加密的密文...

    <<网络信息安全技术>_实验报告_破译vigen&amp#232;re_密码加密的密文>由会员分享,可在线阅读,更多相关<<网络信息安全技术>_实验报 ...

  9. linux下qt静态编译_自由出土文物的空间_百度空间

    linux下qt静态编译_自由出土文物的空间_百度空间 linux下qt静态编译_自由出土文物的空间_百度空间 linux下qt静态编译 2012-04-09 13:10 测试通过,贴一下过程,仅用来 ...

最新文章

  1. MVC之前的那点事儿系列(4):Http Pipeline详细分析(上)
  2. Python中map()函数浅析
  3. 【C++ Primer】第十五章 友元、异常和其他 --之一---友元和嵌套类
  4. SPI协议学习Cubmx——读写Flash W25Q64
  5. navicat can not load oci dll,193,126
  6. IDEA集成Gerrit插件
  7. WireShark抓Intel网卡的802.1q包
  8. 云计算:SaaS、PaaS、IaaS、CaaS并不神秘
  9. WWDG 窗口看门狗 知识详解
  10. yishaadmin,yishaadmin修改数据后回到起始页的解决办法,保持在修改前的页码,分页组件在修改数据后不返回到第一页
  11. oracle—高级查询
  12. lintcode backpack
  13. 通过这一篇文章,可以把Java中的类加载器了解的七七八八了
  14. Python一些技巧
  15. 雷达基础系列文章之二:雷达信号的旁瓣对消和旁瓣匿影
  16. pyinstaller 打包小坑2
  17. 机器学习-11.神经网络
  18. 【饭谈】测试人员负责上线合理么?
  19. 三国杀服务器维护时间,三国杀十周年维护公告
  20. 【超详细】逻辑回归之kaggle糖尿病预测实战

热门文章

  1. 利用python实现贪心算法-----摇摆序列
  2. 十分钟带你了解阿里、美团、滴滴、头条等互联网头部大厂面经
  3. 最新Android基础入门教程目录(完结版)
  4. 利用辐射光谱计算温度 matlab,时间调制型FTIR光谱仪辐射度定标方法的研究
  5. 查看pg 用户组_PostgreSQL 角色用户管理
  6. 23种设计模式-单一原则
  7. android gravity 代码,android:layout_gravity和android:gravity属性的区别
  8. 为什么需要虚拟DOM?
  9. 计算机上的mrc代表,mrc是什么?
  10. CRM客户关系管理系统界面截图