[LLVM教程]LLVM之第一个语言前端

目录:
[LLVM教程]LLVM之第一个语言前端
[LLVM教程]LLVM之第一个语言前端/“万花筒”:介绍与词法分析器
LLVM Tutorial: Table of Contents — LLVM 17.0.0git documentation
[LLVM]自制脚本语言实践
编译原理学习笔记

需求:这个教程假设你懂C++,但编译器经验不是必须的。

欢迎来到“LLVM之第一个语言前端”教程。我们通过实现一个简单的语言,来体验其乐趣与简单。本教程将展示一个使用LLVM生成代码的具体实例,来带你快速进入角色。

这个教程介绍了一个简单的语言“万花筒”,我们通过几章教程一步步构建它。这可以让我们感受到语言设计的多个层面以及LLVM的重要观念,同时教程也会展示和解释构建“万花筒”过程中的代码,并避免过度细节。我们强烈建议你制作一个代码的副本,并修改和试验。

警告:为了专注于教授编译器技术和LLVM,这个教程不关心软件工程原理中的最佳实践。例如,代码普遍使用全局变量,不使用访问器等等。但我们会尽量保持简单并专注于我们的话题。

该教程根据独立的话题划分了若干章节,可根据需求食用:

  • 第一章:“万花筒”与词语分析器(Lexer)——介绍我们的目标和想要构建的基本功能。一个词法分析器也是构建语言解析器的第一部分。我们搞一个简单又易于理解的的C++词法分析器。
  • 第二章:实现一个解析器(Parser)和抽象语法树AST——由词法分析器后,我们就可以讨论解析技术和基本的AST构建。本章解释了递归下降解析和运算符优先解析。
  • 第三章:生成LLVM中间代码(IR)——有抽象语法树后,我们会展示生成LLVM中间代码是多么容易,也会展示将LLVM融合到我们的项目中的简单方法。
  • 第四章:添加即时(JIT)和优化支持——LLVM的一个优点就是它支持即时编译,我们在这里深入讨论它,并展示添加JIT支持所需的三行代码。后面的章节将展示如何生成.o文件。
  • 第五章:扩展语言:控制流——语言启动和运行后,我们将展示如何扩展它使其支持控制流操作(“if”语句和“for”循环)。这给了我们一个讨论静态单赋值(SSA)构建和控制流的机会。
  • 第六章:扩展语言:用户定义操作符——本章扩展了语言,允许用户定义任意一元和二元运算符,并具有优先级分配能力!这允许我们构建语言的重要部分,库运行时。
  • 第七章:扩展语言:可变变量——本章讨论添加用户定义的附带赋值操作符的局部变量。它展示了从LLVM构建静态单赋值(SSA)的易用性:LLVM不需要前端构建静态单赋值形式就可以使用它。
  • 第八章:编译为目标文件——本章解释如何将LLVM IR编译为目标文件,就像静态编译器那样。
  • 第九章:调试信息——一个真正的语言需要支持调试器,所以我们添加了调试信息,这允许我们在“万花筒”的函数中设置断点、打印变量和调用函数!
  • 第十章:结论与花絮——本章通过讨论扩展语言的方法来结束本系列,并包括“特殊主题”信息的指向信息,像添加垃圾回收支持、异常、调试、“意大利面栈”的支持等。

到本教程结束时,我们将编写不到1000行代码(除注释和空行)。仅如此少量的代码,我们就可以构建一个不错的小编译器来构建一个非凡的语言——它包括一个手写的词法分析器、解析器、抽象语法树和代码生成支持,包括静态和即时!这一点充分证明了LLVM的能力,并说明了它为什么对于语言设计师和其它需要高性能代码生成的人是如此热门的对象。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值