自己动手制作C 语言编译器(0):前言

本文作为'手把手教你构建C语言编译器'系列的开篇,介绍了学习编译原理的重要性,以及作者创建该项目的初衷。文章探讨了为何编译器令人敬佩,传统编译原理课程的复杂性,以及大多数学生无法深入学习的原因。作者受到c4项目启发,决定创建一个功能完善的C语言编译器,并通过教程分享实现过程。警告读者编写编译器可能会遇到的挑战,并提供了相关学习资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

“手把手教你构建 C 语言编译器” 这一系列教程将带你从头编写一个 C 语言的编译器。希望通过这个系列,我们能对编译器的构建有一定的了解,同时,我们也将构建出一个能用的 C 语言编译器,尽管有许多语法并不支持。

在开始进入正题之前,本篇是一些闲聊,谈谈这个系列的初衷。如果你急切地想进入正篇,请跳过本章。

前言

为什么要学编译原理

如果要我说计算机专业最重要的三门课,我会说是《数据结构》、《算法》和《编译原理》。在我看来,能不能理解“递归”像是程序员的第一道门槛,而会不会写编译器则是第二道。

(当然,并不是说是没写过编译器就不是好程序员,只能说它是一个相当大的挑战吧)

以前人们会说,学习了编译原理,你就能写出更加高效的代码,但随着计算机性能的提升,代码是否高效显得就不那么重要了。那么为什么要学习编译原理呢?

原因只有一个:装B。

好吧,也许现在还想学习编译原理的人只可能是因为兴趣了。一方面想了解它的工作原理;另一方面希望挑战一下自己,看看自己能走多远。

理论很复杂,实现也很复杂?

我对编译器一直心存敬佩。所以当学校开《编译原理》的课程后,我是抱着满腔热情去上课的,但是两节课后我就放弃了。原因是太复杂了,听不懂。

一般编译原理的课程会说一些:

1.如何表示语法(BNF什么的)

2.词法分析,用什么有穷自动机和无穷自动机

3.语法分析,递归下降法,什么LL(k),LALR 分析。

4.中间代码的表示

5.代码的生成

6.代码优化

我相信绝大多数(98%)的学生顶多学到语法分析就结束了。并且最重要的是,学了这么多也没用!依旧帮助不了我们学习编译器!这其中最主要的原因是《编译原理》试图教会我们的是如何构造“编译器生成器”,即构造一个工具,根据文法来生成编译器(如 lex/yacc)等等。

这些理论试图教会我们如何用通用的方法来自动解决问题,它们有很强的实际意义,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值