HackPluto's Blog

自己开发编译器(1)

字数统计: 342阅读时长: 1 min
2020/10/07 Share

为了对计算机底层有一个更充分的认识,以及对编译原理有更深入对理解,我决定自己动手写一个编译器。在这里记录一下开发的过程和体会。

大致想法:

  • 基于C语言编写
  • 可以实现对自身的编译,也就是可以compile itself
  • 针对真实的硬件平台可以工作,目前想法是针对X86架构和32位ARM

    编译器工作的基础

    编译器的工作是将一种语言(通常是高级语言)的输入转换为不同的输出语言(通常是比输入低的语言)。主要步骤是:

  • 做词法分析 以识别词法要素。
  • 解析输入,即识别输入的语法和结构元素,并确保它们符合语言的语法。
  • 做输入的语义分析,即理解输入的意思。
  • 将输入的含义翻译成另一种语言。在这里,我将输入转换为较低级别的语言。

词法分析

简单的词法分析器

在这一部分我计划先完成一个可以实现对

1
2
+ - * / 四个符号
0 - 9 整数

的字符识别

首先是定义token结构体以及token的种类,这个是词法分析的基础

1
2
3
4
5
6
7
8
9
10
// token struct
struct token{
int token;
int token_value;
}

// token type
enum{
T_PLUS,T_MINUS,T_STAR,T_SLASH,T_INTLIT
};

CATALOG
  1. 1. 编译器工作的基础
  2. 2. 词法分析
    1. 2.1. 简单的词法分析器