电子科技大学编译原理复习笔记(四):程序语言的设计

news2024/11/27 6:31:06

目录

前言

重点一览

语言的定义

比较:生成观点与识别观点

语义又该怎么描述?

符号串

符号串集合

⭐文法(超重点)

定义

组成

表示

⭐分类(重点) 

文法产生的语言

⭐短语、直接短语和句柄(求它们目的是语法分析)

⭐语法树(推导树)

语言的设计

本章习题

本章小结


前言

本复习笔记基于张老师的课堂PPT,供自己期末复习与学弟学妹参考用。


重点一览

这一章开始正式进入编译原理的重点,文法部分。 


语言的定义

  • 语言=语法(规则)+语义(规则)
  • 语法:用以构造程序及其成分(语法单位)的规则的集合
  • 语义:用以规定语法正确的语法单位的含义的规则的集合
  • 程序设计语言是用来描述计算机所执行的算法的形式表示
  • 词法规则:规定什么样的字符序列可以构成语言的有效符号
  • 语法规则:确定一个符号序列是否为一个句子,并提供句子结构(判断是否合法)
  • 生成的观点:每一行称为一条语法规则,语法就是所有句子的集合,可形成文法
  • 识别的观点:用语法图来定义给定的语言,每一个非终结符连同相应的产生式对应一个语法图

识别观点下的语言:语法图能识别的所有终结符序列的集合

比较:生成观点与识别观点

语义又该怎么描述?

至今尚无一典型描述工具,许多语言仍采用自然语言描述语义。

符号串

符号串的概念需要介绍,它在后面的知识是一个基础,不然可能连题都看不懂。

基本概念

  • 设x和y是符号串,x是abc,y是edf,那么xy就是abcdef,这个行为就叫作符号串的连接;
  • 当符号串z是kk...kk时,记作z=k^n,即把k重复写n次
  • 特殊地,当n=0时,z=ε(空船,无值符号);当k=pq时,z=pqpq…pqpq

符号串集合

用一个例子简单说明:

特殊地,A^0={ε} ,并且串集的连接一定有顺序性。


⭐文法(超重点)

定义

文法是描述语言的我语法结构的形式规则

文法的重要特性:有限规则描述无限语言 

组成

很明显,文法包含:终结符、非终结符、开始符号、产生式四个元素,我们约定大写字母表示非终结符,小写字母表示终结符,希腊小写字母表示串 

产生式是可以简写的,左侧相同时,右侧可以用 " | " 符号分开,表示或。

表示

想要描述文法,直接给出产生式的集合即可。

例:算术表达式文法G0:(第一条表达式第二项应该是E-T,老师写错了)

⭐分类(重点) 

① 0型文法(短语文法)

产生式形如α→β,α是一个至少含一个非终结符的串,而β是任意一个串。

② 1型文法(上下文有关文法)

1型文法在0型上加了限制,要求左边的长度必须小于右边的长度,也就是必然有非终结符要被替换成串,产生式形如αAβ→αγβ。

本质上是A→γ,但有前后的α和β的限制,所以只能在这两个串之间(上下文环境)中才能替换

2型文法(上下文无关文法)

产生式形如A→α,容易看出2型文法解除了上下文的限制,只要有左边非终结符的出现就可以进行串的替换,由于这种文法对于程序基本可以描述,因此上下文无关文法常简称为文法

④ 3型文法(正则文法/右线性文法)

产生式形如A→α或A→αB(A、B是非终结符,α规定为终结符串),也就是替换了以后左边一定已经被终结符锁定,只有右边可以变。

文法产生的语言

推导与规约

  • 直接推导:用产生式右边直接替换产生式左边
  • 推导:星号双箭头表示经过0次以上推导得到右边的串,加号双箭头表示经过至少1次的推导得到右边的串
  • 归约:推导的逆过程 
  • 最左/右推导:每次都替换最左/右边的非终结符,最推导又叫规范推导

句型与句子

  • 文法开始符号推出的一个串中包含非终结符,它就是一个句型;如果此串只含终结符,那它就是一个句子
  • 只含终结符的句型就是句子
  • 句子一定是句型,句型不一定是句子
  • 文法G产生的所有句子的集合称为由文法产生的语言L(G)
  • 如果两个文法产生的语言相同,则称这两个文法等价

例题:求语言(简答题)

 

 

⭐短语、直接短语和句柄(求它们目的是语法分析)

短语

 

直接短语

 

 

上述注意事项可用于判断某短语是否为直接短语,只需要找所有产生式右端即可。 

理解短语与直接短语

 

句柄 

一个句型的最左直接短语称为该句型的句柄,例题如下:

素短语 

含有终结符的短语,且它的真子串不具有这个特性(素短语的子串不是含终结符的短语)

⭐语法树(推导树)

  • 语法树用图的方式来表示推导过程,语法树的本质是推导过程,所以文法的每个句型(句子)都有一颗对应的语法树
  • 推导树的边缘(语法树所有叶结点的从左到右的连接)就是句型(句子)
  • 当一个句子有两棵不同的语法树是,我们说这个文法具有二义性
  • 我们还可以通过推导树确定短语/直接短语/句柄,语法树的子树和简单子树对应着短语和直接短语,而最左边的简单子树自然就是句柄
  • 语法树有n个内部节点,就有n棵子树,就有n个短语;m棵直接子树(只有父子两代)就有m个直接短语。

例子

 


语言的设计

在实验中体现,不会考察。


本章习题

 

 


本章小结

短语、直接短语与句柄、素短语

语法树概念、与短语的联系、绘制语法树 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/577771.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

幂等问题解决

什么是幂等性? 幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。 在数学中,主要有两个定义 如果在一元运算中,x 为某集合中的任意数,如果满足 f(f(x))f(x)&#xff0…

软件质量测试笔记-合工大

第一章 软件质量和测试背景 应从以下几个方面考虑软件质量: 软件结构功能与性能开发标准与文档 IEEE关于软件质量的定义: 系统,部件,过程满足规定需求的程度系统,部件,过程满足顾客或者用户需要的期望程…

vue css变量实现多主题皮肤切换

实现方式 多主题皮肤切换有很多种实现方式,可以用css预处理器实现,可以用js实现,其实最近简单的一种方式是用css变量(css variable)实现 单页面应用中,可以通过设置body的css变量爱控制整个系统的颜色,body添加一个属…

chatgpt赋能python:Python中的绝对值函数简介

Python中的绝对值函数简介 绝对值是数学中一个基本的概念,在Python中也有相应的函数来实现求绝对值,本文将为大家介绍Python中的绝对值函数及其使用方法。 什么是绝对值 绝对值是一个数的大小,与数本身的符号无关。即如果一个数为正数&…

chatgpt赋能python:自动填写在SEO中的作用

自动填写在SEO中的作用 在SEO中,关键词的密度是非常重要的一项指标。然而,如果手动填写关键词,不仅费时费力,还很容易出现错误。这时候,一款自动填写工具就能够提高效率,减少出错率,从而提高网…

chatgpt赋能python:Python生成Pyd文件的全面指南

Python生成Pyd文件的全面指南 介绍 在Python编程中,我们会发现在某些情况下需要使用C或其他高效语言来提高代码执行速度。在这种情况下,将Python和其他语言混合编程是一个不错的选择。 本指南将介绍如何使用Python生成Python定义的C扩展程序文件 (.py…

[论文分享] jTrans: Jump-Aware Transformer for Binary Code Similarity

jTrans: Jump-Aware Transformer for Binary Code Similarity [ISSTA 2022] 二进制代码相似性检测(Binary code similarity detection, BCSD)在漏洞检测、软件构件分析、逆向工程等领域具有重要应用。最近的研究表明,深度神经网络(DNNs)可以理解二进制代码的指令或…

Solidity基础四

あなたもきっと、誰かの奇跡 (你也一定会是某个人的奇迹) 目录 一、Solidity的结构体 1.结构体的实例化 2.结构体的基本使用 访问和修改结构体成员 3.结构体的修饰符 二、Solidity的映射 1.映射的基本使用 查询和修改某个value值 三、Solidit…

Jmeter下载安装---Windows系统

Jmeter下载安装---Windows系统 jmeter是什么Jmeter下载安装安装jmeter前置必须jdk8Jmeter下载 jmeter插件环境变量配置 jmeter是什么 Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具,用于对软件做压力测试;在接口及性能测试中广泛使用&…

如何使用JQuery实现Js二级联动和三级联动

前言:使用JQuery封装好的js方法来实现二级三级联动要比直接使用js来实现二级三级联动要简洁很多。所以说JQuery是个非常强大的、简单易用的、兼容性好的JavaScript库,已经成为前端开发人员不可缺少的一部分,是Web开发中最流行的JavaScript库之…

《Spring Guides系列学习》guide61 - guide65

要想全面快速学习Spring的内容,最好的方法肯定是先去Spring官网去查阅文档,在Spring官网中找到了适合新手了解的官网Guides,一共68篇,打算全部过一遍,能尽量全面的了解Spring框架的每个特性和功能。 接着上篇看过的gui…

mybatisplus递归传递多个参数 | mybatisplus传递多个参数获取层级数据 | mybatisplus传递多个参数获取树形数据

搜索关键字: mybatisplus关联查询传递参数|"select""树形结构"|"select""树形结构""传参"| "select""many""传参"| "select""column""传参" 1、…

chatgpt赋能python:用Python自动操作其他软件优化你的SEO

用Python自动操作其他软件优化你的SEO 作为一名有着10年Python编程经验的工程师,我了解到Python具有强大的自动化功能,可以帮助我们自动化执行任务,节省时间和精力。其中,自动操作其他软件应用案例极为常见,如此&…

C#自定义控件:提示未将对象引用设置到对象实例

一、概述 1、当自定义的控件在添加的时候提示:提示未将对象引用设置到对象实例;如下所示: 2、添加上的自定义控件提示:未将对象引用设置到对象实例;如下所示: 二、问题分析 分析1: 在项目中使…

关于“烫烫烫烫烫烫烫”的程序员笑话

环境 Microsoft Visual Studio Community 2022Windows 11 家庭中文版 笑话 小明在超市买了3瓶汽水,他先打开第0瓶汽水,咕咚咕咚喝光了,接着打开第1瓶汽水,又咕咚咕咚喝光了,然后又打开第2瓶汽水,咕咚咕咚…

运维实用脚本整理

运维实用脚本整理 Linux运维日常巡检脚本系统指标巡检脚本日常命令性能相关的命令进程相关的命令javadump.sh 常用工具一键部署安装常用lib库安装系统检查脚本SPN 日常巡查脚本ffmpeg脚本打开进程,并判断进程数量关闭进程 java jar包启动-剔除Pom中依赖Java jar包通…

SAP QM 检验批上的‘容器数’

近期遇到一个问题。项目上质量部门发现某个原料批次收货打印出来的样品标签数不对。经查发现收货后触发的检验批上的‘容器数’(No.Containers)为999,实际上此次收货的箱数有1500多。 对于栏位‘容器数’,SAP的官方帮助文档&#…

指针 --- C语言

目录 1.指针是什么 2.指针和指针类型 3.野指针 4.指针运算 5.指针和数组 6.二级指针 7.指针数组 1.指针是什么 为了更好地管理内存,把内存分为了1个个小小的内存单元,大小是一个字节,每个字节给一个编号,内存的编号就是地…

《Spring Guides系列学习》guide56 - guide60

要想全面快速学习Spring的内容,最好的方法肯定是先去Spring官网去查阅文档,在Spring官网中找到了适合新手了解的官网Guides,一共68篇,打算全部过一遍,能尽量全面的了解Spring框架的每个特性和功能。 接着上篇看过的gu…

Entity Framework Core 简明教程(3)- 关系处理

在数据库层面,表之间关系,通过主键、外键来实现,基于约束 (constraint) 和数据完整性来制约。 在 EF Core 技术层面,并不是简单地与数据库这些关系和约束对应,EF Core 有它自己的机制。本篇介绍 EF core 在处理表关系方…