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

2023-11-03

目录

前言

重点一览

词法分析概述

词法分析的功能

词法分析器的输出形式

词法分析器的结构

状态转换图

状态转换图的构造

词法分析器的设计

基本结构

内容

符号表

目的

组成

在词法分析中的作用

符号表的一般形式

常用的符号表结构

总结与补充 

为何分离词法和语法分析

本章小结


前言

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

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


重点一览


词法分析概述

词法分析的功能

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

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

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

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

词法分析器的输出形式

单词的种类

单词输出形式

二元式             

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


词法分析器的结构

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

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


状态转换图

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

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

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

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

状态转换图的构造


词法分析器的设计

基本结构

内容

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

符号表

目的

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

组成

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

在词法分析中的作用

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

符号表的一般形式

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

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

常用的符号表结构

线性表

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

HASH表/哈希表

 

总结与补充 

 

为何分离词法和语法分析

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

本章小结

 

 

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

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

  • 电子科技大学人工智能期末复习笔记(四):概率与贝叶斯网络

    目录 前言 概率 概率公式 贝叶斯公式 链式条件概率 例题 1 求联合概率分布 边缘概率分布 条件概率分布 2 灵活运用贝叶斯公式 概率总结 贝叶斯网络 判断独立性 两个事件独立的判断 条件独立性的判断 假设条件独立的链式法则 Active
  • 【编译原理】【C语言】实验三:递归下降分析法

    C语言 实验环境 Visual Studio 2019 author zoxiii 递归下降分析法 1 实验内容 2 前期准备 2 1 递归下降分析法原理 2 2 要实现的文法 2 3 需要的函数 3 分析过程 3 1 递归下降分析法设计思
  • 【编译原理】- 递归下降的语法分析器的实现

    目录 一 实验题目 二 分析与设计 三 源代码 一 实验题目 编写识别由下列文法G E 所定义的表达式的递归下降语法分析器 E E T E T T T T F T F F F E i 输入 含有十进制数或十六进制数的表达式 如 75 1ah
  • 编译原理之first集,follow集,select集解析

    为了方便自顶向下语法分析 需要求文法对应的first集 follow集 以及select集 本文主要分为两部分 一个是求法解析 还有一个例子详解 第一部分是求法解析 将对first集 follow集 select集分为三种讲解方法 定义介绍
  • 编译课设 (词法分析+LR1语法分析+语法制导翻译(四元式生成))

    代码已上传至 Github 完整的 VS2019 项目已上传至百度云 提取码 lql1 目录 源语言 语义动作 中间代码定义 整体框架 声明 语句 i f if if 语句
  • C++ 实现自动产生LR1分析器的产生器

    C 实现自动产生LR1分析器的产生器 1 介绍 2 总体思路 2 1 拓广文法 2 2 计算First集合 2 3 计算每个闭包的项目集以及GO函数 2 4 计算分析表的动作函数ACTION和状态转换函数GOTO 2 5 对语句进行语法分析
  • 【编译原理龙书笔记】(三)词法分析(附联系答案)(仍未完成)

    这篇博客是根据自己学习龙书的过程编写 因为博主习惯了英语环境 在强行从英语转化为中文的时候难免会有些不自然 请大家谅解 配套的练习题答案可以在 https github com Oh233 Dragon book exercise 看到 感
  • cucu: a compiler u can understand (part 2)

    原文地址 http blog csdn net roger wong article details 8502477 原文地址 http zserge com blog cucu part2 html 到目前为止 我们已经定义了我们语言的语
  • 【编译原理】LALR(1)语法分析方法(c++实现)

    前文回顾 编译原理 LR 0 分析方法 c 实现 编译原理 SLR 1 分析方法 c 实现 编译原理 LR 1 分析方法 c 实现 这几个程序的代码大部分是一样的 根据不同算法特点做了部分修改而已 代码 LALR 1 的代码就是在LR 1
  • 【编译原理】课程一:编译原理入门

    目录 1 为什么要学习编译原理 2 什么是编译原理 3 编译与计算机程序设计语言的关系 3 1 程序设计语言的转换方式 3 2 编译的转换过程 3 3 编译器在语言处理系统中的位置 3 4 编译系统的结构 3 4 1 词法分析 扫描 3 4
  • GDB 程序调试常用命令

    调试之前 若要在GDB中调试程序在编译时需要加上调试信息 在GCC中添加的方法 GCC g a c o a exe 或下面提供更符合GDB的调试信息 GCC ggdb a c o a exe 运行流程 命令 作用 start 开始执行程序
  • LLVM SSA 介绍

    最近做研究碰到了一个难题 需要对程序变量按生命期进行重命名 考虑到 SSA 中一个变量在不同的程序分支中赋值时会进行重命名 因此打算以此作为参考 看看能否采取同样的方法达到目的 由于之前看到的文档中都说 LLVM IR 是 SSA 形式的
  • 编译原理实验一:词法分析

    实验一 词法分析程序 一 实验目的 通过设计编制调试一个具体的词法分析程序 加深对词法分析原理的理解 并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法 编制一个读单词过程 从输入的源程序中 识别出各个具有独立意义的
  • OCaml 安装以及简单的加减乘除Demo(以Ubuntu16.04为例)

    安装nix 参考 https mirrors tuna tsinghua edu cn help nix 安装nix sh lt curl https mirrors tuna tsinghua edu cn nix latest inst
  • 语法分析—自上而下分析

    1 美图 2 位置 语法分析器的功能 语法分析的任务是分析一个文法的句子结构 语法分析器的功能 按照文法的产生式 语言的语法规则 识别输入符号串是否为一个句子 合式程序 语法分析的方法 不行 看不懂 我太难了 不看了
  • 【学习笔记】mybatis-generator自动生成工具的使用教程 2021最新版

    一 什么是mybatis generator mybatis geneator是一款mybatis自动代码生成工具 可以通过配置 快速生成DAO POJO和xml等文件 二 如何在IDEA上使用mybatis generator 1 导入依
  • 编译原理-总概

    语言执行过程 代码 解释器编译器 机器代码 cpu执行 编译型语言 在程序在执行之前需要一个专门的编译过程 通过编译器把程序编译成为可执行文件 再由机器运行这个文件 运行时不需要重新翻译 直接使用编译的结果就行了 解释型语言 是一边执行一边
  • 编译原理实验:使用C/C++语言编写C-语言的词法分析器

    文章目录 实验目的 实验任务 实验内容 实验步骤 分析c 的词法规则 算法基本思想 Step1 find token Step2 DFA状态图构建 Step3 使用while switch双循环将DFA代码化 主程序流程 各程序模块之间层次
  • 编译原理LL(1)文法之提取左公因子,消除左递归

    在判断LL 1 文法是否符合的时候 需要判断LL 1 文法是否存在左公因子 和左递归的情况 以下给出相应的判断方法以及通过提取左公因子和消除左递归使非LL 1 文法转换为LL 1 法的方法 第一种情况 存在左公因子 解决方法 提取左公因子
  • Compiler- volatile关键字

    为了直观的感受编译器为程序所做的编译优化 我们通过以下的C 程序来进行演示 只能体现编译优化的一小部分hh 请大家预测一下下面代码的输出结果 include

随机推荐

  • 关于PCB模拟地和数字地的处理

    在PCB布线时板子上可能有几个地的情况 比较差的傻瓜式做法就是直接铺铜 这种对于低速板或者对干扰不敏感的板子来讲还是没问题的 但是高速或者要求精密的板子就不可取 这时候就需要把模拟地和数字地隔离好 通常楼主的做法是把模拟的元器件和数电的元器
  • msys2中导入window环境变量

    配置环境变量 MSYS2 PATH TYPE inherit
  • 1、Ubuntu16.04编译安装llvm+clang

    Ubuntu16 04编译安装llvm clang 一 环境介绍 操作系统 Ubuntu 16 04 不是虚拟机哦 在虚拟机上做过无数次尝试 均以失败告终 LLVM Clang版本 3 6 Cmake版本 3 6 二 下载安装 1 下载源码
  • java评论功能怎么实现_评论功能的简单实现

    最近在写一个问答功能 类似于评论 几番找资料才有点感觉 主要是太菜了 为了加深印象就单独抽出来记下笔记 然后这篇写完就开始SpringBoot的复习了 1 说明 网上看到有三种类型的评论 按照笔者的理解记下了过程 可能理解错了 望大神指出
  • 哈希算法题(砝码&数量得到种数)

    现有n种砝码 重量互不相等 分别为 m1 m2 m3 mn 每种砝码对应的数量为 x1 x2 x3 xn 现在要用这些砝码去称物体的重量 放在同一侧 问能称出多少种不同的重量 注 称重重量包括 0 include
  • MySQL【DQL查询数据(最重点)】

    DQL查询数据 最重点 4 1 DQL Data Query LANGUAGE 数据查询语言 所有的查询操作都用它 Select 简单的查询 复杂的查询它都能做 数据库中最核心的语言 最重要的语句 使用频率最高的语句 4 2 指定查询字段
  • HTML、CSS、JavaScript:网页开发的三大利器

    JavaScript 让网页更加生动有趣 JavaScript是一种广泛应用于网页开发的编程语言 它可以让网页更加生动有趣 在本文中 我们将介绍JavaScript的基本概念和应用 帮助读者更好地了解这个强大的编程语言 JavaScript
  • 一文读懂高速互联的阻抗及反射(中)

    一文读懂高速互联的阻抗及反射 中 勘误 上篇中 电感的电抗叫做感抗 表示为 X L j C
  • 2017网易游戏测试工程师-实习招聘在线笔试题

    网易游戏测试工程师 一 A游戏又要开新服了 为了在短时间内冲排名 你得尽可能多地完成游戏任务 通过事先查攻略我们知道了所有的游戏任务 以及每个任务的时间窗口 一旦选定了做某个任务 在所选定任务的整个持续时间内只能做这个任务 且只能等到当前任
  • SpringBoot整合多数据源Redis

    SpringBoot整合Redis 其实方法跟单数据差不多的 这里给大家写一下 文章目录 SpringBoot整合Redis 多数据源整合 多数据源整合 一 完成配置文件 Spring配置 spring 资源信息 messages 国际化资
  • python atexit模块的使用

    python atexit模块的使用 模块的简介 atexit模块主要的作用就是在程序即将结束之前执行的代码 atexit模块使用register函数用于注册程序退出时的回调函数 然后在回调函数中做一些资源清理的操作 该模块其实是一个对 s
  • 寻找峰值

    LeetCode 寻找峰值 峰值元素是指其值大于左右相邻值的元素 给定一个输入数组 nums 其中 nums i nums i 1 找到峰值元素并返回其索引 数组可能包含多个峰值 在这种情况下 返回任何一个峰值所在位置即可 你可以假设 nu
  • Eclipse、AndroidStudio

    Eclipse ADT SDK AndroidStudio Android Plugin for Gradle gradle SDK
  • 【自然语言处理】最大熵马尔可夫模型

    有任何的书写错误 排版错误 概念错误等 希望大家包含指正 由于这部分的参考资料比较少 网上大部分资料重复且不完整 对于一些关键计算没有推导 所以这里我主要讨论几篇论文和讲义 但是这些论文和讲义之间也有些许差别 讨论的过程中我会加入自己的理解
  • 百度网盘下载提速,推荐3种亲测有效的方法

    凉透的下载工具 自从PanDownload事件之后 陆续出了很多第三方的度盘不限速下载神器 但是最后都凉了 这些第三方下载神器 都是个人开发者 即便有盈利也承受不起巨大的风险 甚至有款下载神器 用爱发电 流程是这样的 1 用户提交下载链接
  • 34门课改变人生——牛人自学计算机总结

    转载说明 在人人网上看到一个在美国学生物的硕士通过MOOC学习最终找到IT工程师工作的故事 非常励志 而且每门课都有很有价值的点评 经过作者本人同意转载到MOOC学院 如果各位有后续问题可以把他本人拉来答疑 转载正文 首先这只是我个人的总结
  • Java小细节

    一 result null 和 result isEmpty 有什么区别 在 Java 中 result null 和 result isEmpty 是两个不同的检查 分别用于不同的目的 result null 这个检查用于确定变量 res
  • 最大平均值子数组

    最大平均值子数组
  • 企业级springboot项目架构模板V3.0,开箱即用

    此次 3 0 更新点 1 加入文件服务 quick storage 功能支持OSS FTP存储 该服务支持以SDK的方式引入 2 修复sentinel因path路径问题导致流控失效问题 3 修复word模板生成PDF文件工具类时首次生成时
  • 电子科技大学编译原理复习笔记(五):词法分析

    目录 前言 重点一览 词法分析概述 词法分析的功能 词法分析器的输出形式 词法分析器的结构 状态转换图 状态转换图的构造 词法分析器的设计 基本结构 内容 符号表 目的 组成 在词法分析中的作用 符号表的一般形式 常用的符号表结构 总结与补