摘要: 在上一章的旅程中,我们讨论了词法分析器的实现思路,我们也为词法分析器的实现做了许多准备工作。现在,就让我们来实现词法分析器吧。 1. 词法分析器的类定义 词法分析器的类定义如下: class __LexicalAnalyzer { // Friend friend class Core; publi 阅读全文
posted @ 2021-02-19 16:26 樱雨楼 阅读(459) 评论(0) 推荐(0) 编辑
摘要: 在这一章的旅程中,我们将要为整个编译器的"前端中的前端":词法分析器的实现做好充足的准备。 1. 词法分析器概观 纵观编译器的输入:源代码,我们不难发现,源代码说白了也就是一个很长很长的字符串。而说到字符串,我们不难想到字符串的分割函数。这类分割函数以空格,或任意的什么字符或字符串作为分隔符,将一个 阅读全文
posted @ 2021-02-19 16:25 樱雨楼 阅读(472) 评论(0) 推荐(0) 编辑
摘要: 在这一章的旅程中,我们将要深入编译器前端一探究竟。看看编译器前端到底由哪些组件组成,其分别又是在做什么。 1. 编译器前端的结构组成 似乎比我们想象的要简单,编译器前端仅由两个组件组成,词法分析器与语法分析器。请看下图: + + + + 源代码 -> | 词法分析器 | -> 记号流 -> | 语法 阅读全文
posted @ 2021-02-19 16:24 樱雨楼 阅读(401) 评论(1) 推荐(0) 编辑
摘要: 编译器,近在咫尺却又远在天边。当我们写下任何非机器语言代码后,我们都需要借助编译器将这些代码变为通过计算机可运行的状态。但是,就是这样一个使用率极高的程序,我们对其却知之甚少。什么是编译器?编译器对我们的代码做了什么?又是怎么做的呢?如果你也怀有这些疑问,想要深入编译器内部一探究竟的话,那就随我一起 阅读全文
posted @ 2021-02-19 15:31 樱雨楼 阅读(554) 评论(0) 推荐(3) 编辑
摘要: 0 论抽象——前言 故事要从一个看起来非常简单的功能开始: 请计算两个数的和。 如果你对Python很熟悉,你一定会觉得:“哇!这太简单了!”,然后写出以下代码: def Plus(lhs, rhs): return lhs + rhs 那么,C语言又如何呢?你需要面对这样的问题: /* 这里写什么 阅读全文
posted @ 2021-02-18 09:27 樱雨楼 阅读(965) 评论(4) 推荐(8) 编辑