电子科技大学编译原理复习笔记(五):词法分析

news2024/11/26 16:37:09

目录

前言

重点一览

词法分析概述

词法分析的功能

词法分析器的输出形式

词法分析器的结构

状态转换图

状态转换图的构造

词法分析器的设计

基本结构

内容

符号表

目的

组成

在词法分析中的作用

符号表的一般形式

常用的符号表结构

总结与补充 

为何分离词法和语法分析

本章小结


前言

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

开始进入最最重点部分,下面是剩余知识的概要框架


重点一览


词法分析概述

词法分析的功能

扫描源程序的字符串,按照词法规则识别出单词符号作为输出,对于识别过程中发现的此法错误,则输出有关的错误信息(可以给出错信息赋予一个行号)。

词法分析器和语法分析器的关系

① 词法分析器可以作为单独的一环

② 词法分析器可以作为语法分析器的子程序

词法分析器的输出形式

单词的种类

单词输出形式

二元式             

单词类别划分:基本字(保留字)一字一码;标识符(字母开头的字母数字串)单列一种;常数按类型分类(整形、实型、布尔型、字符型……)


词法分析器的结构

  • 输入缓冲区:存放源程序 
  • 预处理程序:取消注解、提出无用的空白、制表、换行、回车等符号
  • 扫描缓冲区(词法分析真正要使用的):从输入缓冲区输入固定长度的字符串到另一个
  • 缓冲区(扫描缓冲区),词法分析器可以直接在此缓冲区进行符号识别

词法分析技术——超前搜索:为了判定一个单词符号的类别,必须多扫描一个或几个单位 


状态转换图

定义:一张有限有向图,圆圈表示节点,代表状态,有向边连接节点,其上的标记字符表示该状态下可能接受或识别的字符,有唯一初态,若干终态。

加*的状态表示如果最后识别的字符不在单词表中则需要退回一个字符

用状态转换图识别单词符号:

1)从初态开始;
2)从输入串中读一个字符;
3)判明读入字符与从当前状态出发的哪条
弧上 的标记相匹配,便转到相应匹配的那
条弧所指向的状态;
4)重复3),均不匹配时便告失败;到达终态时便识别出一个单词符号。
  • 如何区别符合标识符的基本字/保留字?
  • 在符号表中预留保留字,并指明它们不是标识符。为保留字建立单独的状态转换图 

状态转换图的构造


词法分析器的设计

基本结构

内容

  • 单词
  • 单词表
  • 状态转换图 
  • 匹配算法

符号表

目的

程序中,用户用标识符定义了很多名称来代表不同的数据对象,编译程序可以将这些名称保存在符号表

组成

符号表除了记录名称本身,还记录了与名称关联的各种属性信息

在词法分析中的作用

  • 建立符号表、查填符号表
  • 将不重复的标识符、数字常数和字符常数的性质填入符号表
  • 将变量/常数在符号表中的入口地址写到其自身的单词(token)中 

符号表的一般形式

每个名字对应一个表项,一个表项包括名字域和信息域

信息域设若干子域和标志位,内容和名字有关

常用的符号表结构

线性表

用N个数组来存放符号表的N个子域

HASH表/哈希表

 

总结与补充 

 

为何分离词法和语法分析

  • 简化编译器的设计
  • 提高编译器的效率
  • 增强编译器的可移植性

本章小结

 

 

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

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

相关文章

小学百分数思维导图怎么画?这样制作不出错

百分数是数学中的一个重要概念,它用于表示一个数在另一个数中所占的比例。在日常生活中,我们经常使用百分数进行计算和比较。而百分数思维导图是一种图形化的表示方法,用于展示数值之间的比例关系。它通过将数值转化为百分数的形式&#xff0…

python学习——描述统计df.describe

文章目录 1 描述统计1.1 查看常见统计量 describe1.2 一般对数值型数据统计1.2.1 基于非空数值统计sum\mean\max\min\var\std1.2.2 每一列中最大值的行索引 idxmax1.2.3 每一行中最大值的列索引 idxmax(axis 1)1.2.4 非空的数量 count() 1.3 一般对字符…

Sugar BI 预测服务:快速通过机器学习,进行数据预测分析

什么是预测服务? 机器学习是一门关于数据学习的科学技术,它能帮助机器从现有的复杂数据中学习规律,以预测未来的行为结果和趋势。 Sugar BI 作为对数据进行分析的可视化平台,也支持用户对自己的数据使用机器学习算法进行探索试分…

赛灵思 ZYNQ UltraScale+ MPSoC Petalinux驱动开发:Linux字符驱动开发

目录 赛灵思 ZYNQ UltraScale MPSoC:Linux字符驱动开发1、Linux驱动程序简介2、Linux字符设备开发步骤2.1、系统调用2.2、驱动模块的加载与卸载2.2.1、驱动加载/卸载方式:2.2.2、驱动注册函数和卸载注册函数2.2.3、字符设备注册与注销2.2.4、实现设备操作…

遥感云大数据在灾害、水体与湿地领域典型案例实践及GPT模型应用

近年来遥感技术得到了突飞猛进的发展,航天、航空、临近空间等多遥感平台不断增加,数据的空间、时间、光谱分辨率不断提高,数据量猛增,遥感数据已经越来越具有大数据特征。遥感大数据的出现为相关研究提供了前所未有的机遇&#xf…

GRPC C++ windows下的简易安装方法

最近因为想给Llama.cpp加一个grpc入口,折腾了一圈GRPC运行时的安装,起初参考GRPC官方的Build from source,未果。 主要原因是基于cmake的安装和调用遭遇到几次大的问题。 一是vscode编译器集成的问题,二是cmake的find_package的…

C++入门--初步认识类和对象

0.前言 前面几章,我们一起学习了C和C语言的不同之处,已经算是半只脚迈入了C的“门槛”,本章让我们继续学习C的类和对象。 1.面向对过程和面向对象的初步认识 C语言是面向过程的,关注的是过程,分析出求解问题的步骤&…

【网络协议详解】——电子邮件系统协议(学习笔记)

目录 🕒 1. 电子邮件系统概述🕒 2. 简单邮件传送协议SMTP🕒 3. SMTP协议的命令和响应🕘 3.1 命令🕤 3.1.1 HELO🕤 3.1.2 MAIL FROM🕤 3.1.3 RCPT TO🕤 3.1.4 DATA🕤 3.1.…

【软件设计与体系结构】 软件体系结构风格

软件体系结构(Software Architecture) 软件体系结构(Software Architecture)包括构成系统的设计元素的描述、 设计元素 之间的交互、 设计元素的组合模式以及在这些模式中的约束。 定义 软件体系结构表示系统的框架结构&#xf…

IIC接口

一、IIC总线简介 IIC总线是由飞利浦公司推出的一种串行、同步、半双工通信协议。它由两条线组成,时钟线(SCL)和数据线(SDA)。主机产生通信用的时钟,可以产生起始信号和结束信号来开始或者结束一次通信。 …

OFGF光流引导特征:用于视频动作识别的快速且稳健的运动表示【含源码】

论文地址:https://openaccess.thecvf.com/content_cvpr_2018/papers/Sun_Optical_Flow_Guided_CVPR_2018_paper.pdf 这个 repo 包含论文的实现代码: Optical Flow Guided Feature: A Fast and Robust Motion Representation for Video Action Recognition,Shuyang Sun,Zh…

基于MATLAB的数字滤波器语音信号去噪

文章目录 一、滤波器的种类及简介二、设计流程三、滤波器设计实现与结果仿真参考文献基于MATLAB的FPR滤波器设计源代码 本课程设计通过分析FIR滤波器的基本原理,在MATLAB环境下利用窗函数法设计出FIR滤波器,实现FIR滤波器的仿真。首先是采集一段语音信号&#xff0c…

C++高级数据结构——ST表(倍增表)

从上次写文章到现在已经27天了,将近一个月蒟蒻没有更新了。 最近学的ST表太难理解了,再加上忙,一直没时间…… ----------------------------------------------------------------------------------------------------------------------…

Tarball管理

文章目录 Tarball管理Tarball安装的基本步骤一般 Tarball 软件安装的建议事项 Tarball管理 从源代码的说明我们知道制作一个二进制程序需要很多东西,这包括下面这些基础的软件。 gcc或cc等C语言编译器make及autoconfig等软件需要内核提供的Library以及相关的inclu…

win11使用命令行建立wifi热点,并可以设定名称密码等

主要是想自动化的实现打开wifi热点,ssid和wifi密码可控!手机设定比较简单,但是用程序行来设定还真是比较麻烦。 查了一下,有人使用netsh 无法解决,也就是说无法使用如下命令启动移动热点: netsh wlan set hostednetwork mode=allow ssid=wifi888 key=88888888 netsh wl…

信息安全实践1.2(重放攻击)

前言 这个实验是看一本书做的,就是李华峰老师的书——《Metasploit Web 渗透测试实战》,我之前写过一篇Slowloris DoS攻击的博客,也是看这本书写的,总的来说,有用处。这篇博客其实也只是很浅显的去做一下重放攻击。 要…

PyTorch 深度学习 || 专题二:PyTorch 编程基础

PyTorch 编程基础 文章目录 PyTorch 编程基础1. backword 求梯度2. 常用损失函数2.1 均方误差损失函数2.2 L1范数误差损失函数2.3 交叉熵损失函数 3. 优化器 1. backword 求梯度 import torchw torch.tensor([1.], requires_gradTrue) x torch.tensor([2.], requires_gradTr…

R实践——【rgplates】安装、介绍、入门

【rgplates】安装、介绍、入门 1. rgplates 安装1.1 easy way1.2 备案方法 2. rgplates 介绍3. rgplates 在线方法入门3.1 加载rgplates3.2 板块重建3.3 独立的地点坐标3.3.1 单个现存坐标点3.3.2 单个点的古坐标3.3.3 多个点的古坐标 3.4 现今的海岸线3.5 其他的重建模型3.6 在…

JMeter 性能测试基本过程及示例

jmeter 为性能测试提供了一下特色: 2023年最新出炉性能测试教程,真实企业性能压测全流程项目实战训练大合集!_哔哩哔哩_bilibili2023年最新出炉性能测试教程,真实企业性能压测全流程项目实战训练大合集!共计11条视频&…

javascript获取对象的键名列表、键值列表

Object.keys&#xff1a;获取对象的键名列表 Object.values&#xff1a;获取对象的键值列表 <script>var obj {name: 1,age: 2,order: 3}const klist Object.keys(obj)const vals Object.values(obj)console.log(obj, obj)console.log(键名列表, klist)console.log(键…