首页 > 其他分享 >编译原理(第3版)上课笔记

编译原理(第3版)上课笔记

时间:2024-09-09 08:56:03浏览次数:6  
标签:... 上课 一码 语法 笔记 词法 编译 add push

1、编译器

是一个程序、具有非常模块化的高层结构

离线方式offline

2、解释器

是一类处理程序的程序

在线方式online

3、静态计算

所生成的目标程序要和源代码语义相同(不能有任何改变)

4、动态计算

5、编译的各个阶段

(1)词法分析器:检查单词是否合法。

(2)语法分析器:生成语法树,检查是否符合语法规则,比如是否符合主谓宾。

(3)语义分析器:对语法树的合法性做处理,比如变量使用前是否声明,调用的函数是否定义。

(4)符号表:存取了程序编译过程相关的重要信息,可以给每个阶段提供支持。

例题:编译程序1+2+3到栈式计算机

第一步,词法分析:哪些部分组成(拆分成5个部分)

第二步,语法分析:是否满足语法要求

第三步,语法树构建:抽象的内部表示

         后序遍历:左右中

第四步,代码生成:规则——n:push n,+:add

注:add伪指令:x=pop();y=pop();z=x+y;push z;

push 1

push 2

add

push 3

add

6、词法分析

任务是由字符流到单词流的切分/转换。

字符流:和被编译的语言密切相关(ASCII,Unicode,or......)。

记号流:编译器内部定义的数据结构,编码所识别出的词法单元。

词法单元token:<种别码,属性值>

单词类型种别种别码
关键字Program、if、else、then、...一词一码
标识符变量名、数组名、记录名、过程名、...多词一码
常量整型、浮点型、字符型、布尔型、...一型一码
运算符算术(+、-、*、/、++、--)一词一码
关系(>、<、==、!=、>=、<=)
逻辑(&、|、~)一型一码
界限符;、()、=、{}、...一词一码

标签:...,上课,一码,语法,笔记,词法,编译,add,push
From: https://blog.csdn.net/2301_79046256/article/details/141998105

相关文章

  • 【C++学习笔记】数组与指针(三)
    目录一、数组1.1数组声明与赋值1.2数组的特点特点1:任意类型均可创建数组特点2:固定大小特点3:内存连续且有序特点4:C++无数组下标越界错误特点5:数组变量不记录数据1.3遍历数组普通for循环foreach增强循环1.4字符数组1.5多维数组二维数组三维数组遍历二维数......
  • 【C++学习笔记】逻辑判断语句与循环语句(二)
    目录一、逻辑判断语句1.1ifelse语句1.2 switch语句1.3枚举类型二、循环语句2.1while循环2.2dowhile循环2.3for循环2.4break与continue关键字2.5goto语句一、逻辑判断语句1.1ifelse语句#include"iostream"usingnamespacestd;intmain(){......
  • 【算法笔记】多源最短路问题——Floyd算法
    0.前言在图中,如果要求任意两点间的距离,则可以使用Floyd(\(\mathcalO(N^3)\)......
  • 【算法笔记】单源最短路问题——Dijkstra算法(无优化/优先队列/set优化)
    0.前言Dijkstra算法可在\(\mathcalO(m\logm)\)或\(\mathcalO(m\logn)\)的时间内求解无负权单源最短路问题。本文中,我们将详细介绍算法的原理、实现,以及常用的两种优化。另外,Dijkstra算法也不要乱用,比如说多源的最短路,用Dijkstra求解的复杂度只有\(\mathcalO(nm\logm)\),但......
  • 【算法笔记】三种背包问题——背包 DP
    前言背包(Knapsack)问题是经典的动态规划问题,也很有实际价值。01背包洛谷P2871[USACO07DEC]CharmBraceletSAtCoderEducationalDPContestD-Knapsack1有\(n\)个物品和一个总容量为\(W\)的背包。第\(i\)件物品的重量是\(w_i\),价值是\(v_i\)。求解将哪些物品装入背包......
  • 【算法笔记】Kruskal/Prim算法——求解最小生成树问题
    前言生活中经常遇到类似这种的问题:公路修建有一些城市,城市之间要修建高速公路,每两个城市之间都可以修双向的路。其中每两个城市之间修路都需要花费对应的金额。请问如何修路,使得总花费的金额最少,且任意两个城市之间都可以直接或间接通过修建的路来通行?实际上,我们可以把这种......
  • 【算法笔记】树状数组/Binary Indexed Tree/Fenwick Tree
    前言树状数组,即树形存储的数组,又称BinaryIndexedTree或FenwickTree。抛开它树形的存储结构,这种神奇的数据结构的应用看起来与「树」没什么关系:有一个序列\(A=(A_1,A_2,\dots,A_N)\),在不超过\(\mathcalO(\logN)\)的时间复杂度内完成下列操作:\(\to~\)求\([L,R]\)区间内所......
  • 【算法笔记】位运算详解
    0.前言突然想到位运算是个好东西,就来水一波文章了……注意:我把能想到的有关位运算的所有内容都放进来了,所以篇幅较长,请谅解!若有写的不清楚或者不够详细的地方欢迎在评论区补充,谢谢支持!本文中参考代码均使用C++编写。废话不多说,下面步入正题。1.基本运算有一定基础的可以......
  • 【算法笔记】最近公共祖先(LCA)问题求解——倍增算法
    0.前言最近公共祖先简称LCA(LowestCommonAncestor)。两个节点的最近公共祖先,就是这两个点的公共祖先里面,离根最远的那个。这种算法应用很广泛,可以很容易解决树上最短路等问题。为了方便,我们记某点集\(S=\{v_1,v_2,\ldots,v_n\}\)的最近公共祖先为\(\text{LCA}(v_1,v_2,\ld......
  • 【算法笔记】【专题】RMQ 问题:ST表/树状数组/线段树
    0.前言好久没更算法笔记专栏了,正好学了新算法来更新……这也是本专栏的第一个专题问题,涉及到三种数据结构,如果写得有问题请各位大佬多多指教,谢谢!1.关于RMQ问题RMQ的全称是RangeMinimum/MaximumQuery,即区间最大/最小值问题。本文中,我们的算法以求最大值为例(最小值基本......