编译原理_中科大(华保健)详细笔记

编译原理-中科大(华保健)

词法分析:

词法分析的功能和主要接口是什么—》涉及的数据结构和算法。
1.词法分析的主要作用:字符流到记号流的转换
字符流:和被编译的语言密切相关(ASCII【c】,Unicode【java】,or…)
记号流:编译器内部定义的数据结构token,编码所识别出的词法单元
2.词法分析实现方式:手工,自动生成器

编译器的结构图/阶段划分:

在这里插入图片描述
​​​解释:
前端:接受源程序产生中间表示。处理源与源程序相关的属性。
后端:接受中间表示生成目标程序。处理具体的体系结构和目标基相关的属性。

前端的阶段划分:
词法分析器分析一个字符流,对字符流切分得到记号流。记号流进一步做传递输入给语法分析器。语法分析器读入记号流产生抽象语法树。抽象语法树作为一个数据结构进一步传递给语义分析器/类型检查器,检查语法树的正确性,进一步输出中间表示/中间代码。
在这里插入图片描述

词法分析器的任务:

描述任何一个软件系统,首先最重要的可能都是要看清楚他的I/O接口。

输入字符流,词法分析器进行切分,输出记号流。
在这里插入图片描述
字符流是什么?记号流是什么?
字符流:源程序
单词流/记号流:是一个数据结构,用来记录词法单元。token<类型,值>
IF(关键字) IDENT(x)(标识符+具体的元素是什么) EOF(文件描述符)…

在这里插入图片描述

实现流程:数据结构的定义+算法的实现

(记号的数据结构—》字符流到记号流的算法)

记号的数据结构定义:
枚举类型 { 词法分析器所能识别的所有的记号的分类 }
结构体定义{ 枚举类型; 具体的单词的值;}
具体的单词值为0,表示实际上没有赋任何的值
在这里插入图片描述
词法分析器的实现的两个方法

  1. 手工编码实现法:纯手工编写程序代码实现词法分析的I/O接口功能
  • 相对复杂,容易出错,但很主流
    • eg.GCC,LLVM …
  1. 词法分析器的生成器:仅需要词法分析的声明
  • 可快速原型,代码量少,较难控制细节

转移图:
用来记录词法分析的过程。
双圆圈:接受/识别状态—》一个单词的识别已经结束了—》返回所识别出来的token数据结构。
星号other的情况:多读的字符 新回滚被分析的程序/缓存中去,返回单独的一个<。
<> 是 !=
在这里插入图片描述

转移图算法:
返回token数据结构 命名nextToken()
在这里插入图片描述
标识符的转移图:
标识符以小或大写字母/下划线开头,中间循环读取字母下划线和数字,当读到其他的就表示结束了,*星号回滚最后一个读入的字符C,双圈返回所识别的ID。
是一个不断递归识别的过程。

在这里插入图片描述

标识符和关键字
关键字是标识符的一部分。eg.关键字:if,while,else…;标识符:字符串。

在这里插入图片描述
如何识别关键字呢?

  • 在原来节点上扩展新的节点和边
    在这里插入图片描述
  1. 关键字表
  • 构建关键字哈希表H【对任何语言,关键字都是确定的有限集合】
  • 不在状态图上区分标识符和关键字,统一按标识符的转移图识别
  • 查看H表查看是否是关键字
  • 合理的构造哈希表H(完美哈希),可以在O(1)时间内完成。

正则表达式

1.1 编译器概述.flv 1.2 编译器结构.flv 1.3 编译器实例.flv 2.1 词法分析的任务.flv 2.2.1 词法分析器的手工构造1.flv 2.2.2 词法分析器的手工构造2.flv 2.2.3 词法分析器的手工构造3.flv 2.3.1 正则表达式1.flv 2.3.2 正则表达式2.flv 2.3.3 正则表达式3.flv 2.3.4 正则表达式4.flv 2.4.1 有限状态自动机1.flv 2.4.2 有限状态自动机2.flv 3.1.1 RE转换成NFA:Thompson算法1.flv 3.1.2 RE转换成NFA:Thompson算法2.flv 3.1.3 RE转换成NFA:Thompson算法3.flv 3.2.1 NFA转换成DFA:子集构造算法1.flv 3.2.2 NFA转换成DFA:子集构造算法2.flv 3.2.3 NFA转换成DFA:子集构造算法3.flv 3.2.4 NFA转换成DFA:子集构造算法4.flv 3.3.1 DFA的最小化:Hopcroft算法1.flv 3.3.2 DFA的最小化:Hopcroft算法2.flv 3.3.3 DFA的最小化:Hopcroft算法3.flv 3.4.1 从DFA生成分析算法1.flv 3.4.2 从DFA生成分析算法2.flv 3.4.3 从DFA生成分析算法3.flv 4.1.1 语法分析的任务1.flv 4.1.2 语法分析的任务2.flv 4.1.3 语法分析的任务3.flv 4.2.1 上下文无关文法和推导1.flv 4.2.2 上下文无关文法和推导2.flv 4.2.3 上下文无关文法和推导3.flv 4.2.4 上下文无关文法和推导4.flv 4.2.5 上下文无关文法和推导5.flv 4.3.1 分析树和二义性文法1.flv 4.3.2 分析树和二义性文法2.flv 4.3.3 分析树和二义性文法3.flv 4.3.4 分析树和二义性文法4.flv 4.4.1 自顶向下分析1.flv 4.4.2 自顶向下分析2.flv 4.4.3 自顶向下分析3.flv 4.4.4 自顶向下分析4.flv 4.5.1 递归下降分析算法1.flv 4.5.2 递归下降分析算法2.flv 4.5.3 递归下降分析算法3.flv 4.5.4 递归下降分析算法4.flv 5.1.1 LL(1)分析算法1.flv 5.1.2 LL(1)分析算法2.flv 5.1.3 LL(1)分析算法3.flv 5.1.4 LL(1)分析算法4.flv 5.1.5 LL(1)分析算法5.flv 5.1.6 LL(1)分析算法6.flv 5.1.7 LL(1)分析算法7.flv 5.1.8 LL(1)分析算法8.flv 5.2 LL(1)分析的冲突处理.flv 5.3.1 LR(0)分析算法1.flv 5.3.2 LR(0)分析算法2.flv 5.3.3 LR(0)分析算法3.flv 5.3.4 LR(0)分析算法4.flv 5.4 SLR分析算法.flv 5.5 LR(1)分析算法.flv 5.6.1 LR(1)分析工具1.flv 5.6.2 LR(1)分析工具2.flv 5.6.3 LR(1)分析工具3.flv 6.1.1 语法制导翻译1.flv 6.1.2 语法制导翻译2.flv 6.1.3 语法制导翻译3.flv 6.2.1 语法制导翻译的实现原理1.flv 6.2.2 语法制导翻译的实现原理2.flv 6.3.1 抽象语法树1.flv 6.3.2 抽象语法树2.flv 6.3.3 抽象语法树3.flv 6.3.4 抽象语法树4.flv 6.4.1 抽象语法树的自动生成1.flv 6.4.2 抽象语法树的自动生成2.flv 7.1.1 语义分析的任务1.flv 7.1.2 语义分析的任务2.flv 7.1.3 语义分析的任务3.flv 7.2.1 语义规则及实现1.flv 7.2.2 语义规则及实现2.flv 7.2.3 语义规则及实现3.flv 7.2.4 语义规则及实现4.flv 7.3.1 符号表1.flv 7.3.2 符号表2.flv 7.3.3 符号表3.flv 7.4 语义分析中的其它问题.flv
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值