编译器写作之旅

  最近在Github上看到一个十分有趣的项目acwj(A Compiler Writing Journey),一个用C语言编写编译器的项目。身为一个程序员,这在我看来是一件十分酷的事情。于是便跟随着作者的项目学习,在此记录学习过程,并于大家分享。

本系列文章的目标

  • 编写一个可以自编译的编译器,也就是说是一个C语言编译器
  • 至少针对一个硬件平台。
  • 在编译器领域有很多研究。我想在这个旅程中从绝对零开始,所以我倾向于采用实用的方法,而不是重理论的方法。
  • 遵循 KISS 原则:保持简单,傻瓜式!我肯定会在这里使用 Ken Thompson 的原则:“如有疑问,请使用蛮力。”
  • 我会将旅程分解为许多简单的步骤,而不是进行大的飞跃。这将使编译器的每一个新添加都成为一口大小且易于消化的东西。

编译器的工作基础

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

让我们来依次介绍:

  1. 词法分析:识别词法元素。例如标识符、关键字、运算符等等,我们称其为token
  2. 语法分析:解析输入,即识别输入的语法和结构元素,并确保它们符合语言的语法。
  3. 语义分析:即理解输入的意思。这实际上与识别语法和结构不同。
  4. 转义:将输入的含义翻译成不同的语言。在这里,我们一次将输入部分转换为较低级别的语言。

  本次编译器开发简述到此为止。下一节我们将开始从scanner开始编写,扫描我们的输入文件并找到作为我们语言词汇元素的token。

本文Github地址:https://github.com/Shaw9379/acwj/tree/master/00_Introduction

C语言编译器开发之旅(开篇)的更多相关文章

  1. C语言编译器开发之旅(二):解析器

    本节是我们这个编译器系列的第二节,进入语法分析与语义分析的部分解.在本节我们会编写一个简单的解析器. 解析器的主要功能分为两个部分: 识别输入的语法元素生成AST(Abstract Syntax Tr ...

  2. C语言编译器开发之旅(一):词法分析扫描器

    本节我们先从一个简易的可以识别四则运算和整数值的词法分析扫描器开始.它实现的功能也很简单,就是读取我们给定的文件,并识别出文件中的token将其输出. 这个简易的扫描器支持的词法元素只有五个: 四个基 ...

  3. 基于GTK+3 开发远程控制管理软件(C语言实现)系列 一 开篇

    近期趁公司没项目来,想学习一下C和GTK+3 ,顺道再学习一下Linux下有关网络编程方面的知识. 一.学习知识: 1.C基本语法 2.GTK+3 API学习 GUI相关知识学习 3.Glade使用及 ...

  4. 大熊君{{bb}}移动开发之旅(第一季)

    一,开篇概述 Hi,大家好!大熊君又和大家见面了,从这篇文章开始我要和大家聊聊移动开发的话题,这部分文章共8季,分别从不同角度来讲解什么是移动开发?移动开发涉及到什么方面的技术点以及移动开发中的常见问 ...

  5. JVM 平台上的各种语言的开发指南

    JVM 平台上的各种语言的开发指南 为什么我们需要如此多的JVM语言? 在2013年你可以有50中JVM语言的选择来用于你的下一个项目.尽管你可以说出一大打的名字,你会准备为你的下一个项目选择一种新的 ...

  6. 第一个C语言编译器是怎样编写的?

    首先向C语言之父Dennis MacAlistair Ritchie致敬! 当今几乎所有的实用的编译器/解释器(以下统称编译器)都是用C语言编写的,有一些语言比如Clojure,Jython等是基于J ...

  7. 【转】自己动手写SC语言编译器

    自序 编译原理与技术的一整套理论在整个计算机科学领域占有相当重要的地位,学习它对程序设计人员有很大的帮助.我们考究历史会发现那些人人称颂的程序设 计大师都是编译领域的高手,像写出BASIC语言的BIL ...

  8. 嵌入式C语言编译器

    GCC与gcc: 初识编译器: 扩展问题: 如何理解“多语言混合开发”? 参考: 狄泰软件学院唐佐林视频教程

  9. 跨平台、跨语言应用开发,Elements 介绍

    目录 1,Elements 介绍 2,Elements 版本 3,Elements 能干嘛 4,Elements  IDES 5,Elements 工具 1,Elements 介绍 RemObject ...

随机推荐

  1. C#如何优雅的多表读取

    关键词:C#.SqlDataReader.IDataReader.NextResult().Read(). Load().Dapper.多表,方便索引和搜索 最近有个需求,需要读一下模具系统的模具信息 ...

  2. OO第四单元与全课程总结

    OO第四单元与全课程总结 一.作业代码架构设计 1.第一次作业 作业类图如下: 具体架构设计: 第一次作业的全部查询工作都是和类图有关,需要解决的主要问题就是如何解析原有UML类图数据的结构,并形成自 ...

  3. flex 弹性盒模型的一些例子;

    1.垂直居中 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  4. Python爬虫 XPath语法和lxml模块

    XPath语法和lxml模块 什么是XPath? xpath(XML Path Language)是一门在XML和HTML文档中查找信息的语言,可用来在XML和HTML文档中对元素和属性进行遍历. X ...

  5. PowerShell-1.入门及其常用

    PowerShell可以理解成是加强版的批处理,但是和批处理完全不同,比如可以调用API等.应用场景平时使用的用户机基本都支持了(出了XP). 常用情节:便捷快速开发,或者是**(因为不存在自己的PE ...

  6. Intel汇编语言程序设计学习-第六章 条件处理-上

    条件处理 本章要点 1.简介 2.布尔和比较指令 3.条件跳转 4.条件循环指令 5.条件结构 6.应用:有限状态机 7.决策伪指令 6.1  简介 本章,读者将看到高级条件分支如何翻译成底层的实现代 ...

  7. Redis中几种数据类型的基本操作指令

    Redis基本指令 单线程+多路IO复用技术 1. Key 指令 作用 keys * 查看当前库所有键 exists <key> 判断此键是否存在 type <key> 查看键 ...

  8. Sublime 快捷生成HTML 插件安装

    更多精彩关注公众号 1 安装 Package Control1.1 ctrl + ` 呼出控制台1.2 复制(不要带最外层的双引号,该代码仅适用于sublime text 3)"import ...

  9. 一、postman基础

  10. Python数模笔记-Sklearn(3)主成分分析

    主成分分析(Principal Components Analysis,PCA)是一种数据降维技术,通过正交变换将一组相关性高的变量转换为较少的彼此独立.互不相关的变量,从而减少数据的维数. 1.数据 ...