本文已收录于 中科大编译原理学习笔记 系列,共计 6 篇,本篇是第 5 篇

简述 有时候直接直接翻译成汇编指令较为困难,认为的拆成几个单独的步骤和模块。 如果简化下中间只翻译一次就得到汇编指令,这种简化后的可以直接叫代码生成器。 代码生成的任务 真实物理机器也可,java虚拟机也可。 代码的等价性非常重要,源程序想输出4,编译器处理后的汇编代码不能是输出5。当然,现在像gc …

阅读全文 »

本文已收录于 中科大编译原理学习笔记 系列,共计 6 篇,本篇是第 4 篇

语义分析做什么事情? 下面一段代码有7个语义错误,编译器的语义分析就是研究这样的问题。 语法分析器所做的事情:输入程序语言的语义规则,输出Yes或者No。 同时语义分析器也是代码和编译器的工作界限,一段代码如果通过了语义分析器再有任何问题就不属于代码的问题,而是编译器的问题。 程序语言的语义规则 与 …

阅读全文 »

本文已收录于 中科大编译原理学习笔记 系列,共计 6 篇,本篇是第 3 篇

语法制导翻译 前面的语法分析器部分仅仅是回答了是否识别,Yes or No。 除了语法分析之外,还需要做其他工作。——这就是语法制导翻译所做的事情。 LR分析算法中的语法制导翻译,举个例子 右部最规约的时候进行计算,得到的值放在规约后的符号上。其实就是二叉树的后序遍历,先左再右最后是根部。先得到第一 …

阅读全文 »

本文已收录于 中科大编译原理学习笔记 系列,共计 6 篇,本篇是第 2 篇

实现语法分析器内部 上面已经讨论了语法分析器要做什么事情,本节来讨论具体的实现,讨论语法分析器内部的数据结构和算法。 自顶向下分析分析算法——盲目的尝试右部 因为是随意推导,所以如果 t != s 并不代表不能识别,而是需要回溯,重新推导… … 不断的匹配和回溯,如果第一个终 …

阅读全文 »

本文已收录于 中科大编译原理学习笔记 系列,共计 6 篇,本篇是第 1 篇

语法分析的目标 语法分析的最终目标是生成抽象语法树。   上下文无关文法:用数学理论描述语言的语法规则 早有数学家帮我们构造好了数学方法,数学的发展总是快工程一步! 3型文法描述语言的词法结构;2型文法描述语言的语法结构。上图的文氏图表示更外部的文法描述的范围更广。1型文法和0型文法在目前 …

阅读全文 »

本文已收录于 CMU数据库系统学习笔记 系列,共计 11 篇,本篇是第 7 篇

课程小结 视频:https://www.bilibili.com/video/BV1Jq4y1B7ce/?spm_id_from=333.788 之前的课程中我们研究了存储引擎、缓存池和访问方法(哈希表与树索引)。本节开始研究算子。 研究四个议题: 算子算法。例如 排序、join等具体是怎么执行的。 …

阅读全文 »

本文已收录于 CMU数据库系统学习笔记 系列,共计 11 篇,本篇是第 6 篇

作业项目进度提示   并发控制 视频:https://www.bilibili.com/video/BV1eR4y1W7rW 本节讨论让数据结构具备并发安全的特点,尽管本节仅仅是介绍 B+ Tree 上的相关技术。在前两节中讨论的数据结构中,我们都只考虑单线程访问的情况,即只能有一个线程在 …

阅读全文 »

本文已收录于 清华大学操作系统课程笔记 系列,共计 9 篇,本篇是第 7 篇

信号量和管程:都是操作系统提供的同步方法 今天来讲解 与 锁同级的一种抽象办法。——信号量 信号量(Semaphore),有时被称为信号灯,是操作系统提供的,在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。 两个进程协调谁能使用,由操作系统作为“裁判”。 …

阅读全文 »

本文已收录于 清华大学操作系统课程笔记 系列,共计 9 篇,本篇是第 6 篇

同步互斥 并发多线程,如果不用锁的话,每次运行结果都可能不同。 如果对多并发进程之间要求每次结果应该一样,就需要考虑同步互斥问题;有时候却还需要多进程不同运行时候的结果不一样,例如在通信的时候,就期望不同,这时候就不需要考虑这种问题。 这就会出现间歇性问题。但进程并发执行有很多好处,我们不能抛弃它。 …

阅读全文 »