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

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

时间:2024-09-09 08:56:03浏览次数:15  
标签:... 上课 一码 语法 笔记 词法 编译 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)\)......
  • 【算法笔记】三种背包问题——背包 DP
    前言背包(Knapsack)问题是经典的动态规划问题,也很有实际价值。01背包洛谷P2871[USACO07DEC]CharmBraceletSAtCoderEducationalDPContestD-Knapsack1有\(n\)个物品和一个总容量为\(W\)的背包。第\(i\)件物品的重量是\(w_i\),价值是\(v_i\)。求解将哪些物品装入背包......
  • 【算法笔记】Kruskal/Prim算法——求解最小生成树问题
    前言生活中经常遇到类似这种的问题:公路修建有一些城市,城市之间要修建高速公路,每两个城市之间都可以修双向的路。其中每两个城市之间修路都需要花费对应的金额。请问如何修路,使得总花费的金额最少,且任意两个城市之间都可以直接或间接通过修建的路来通行?实际上,我们可以把这种......