blob: e1e477d57d2b9ec5e2263dc7318610c0b89eaa65 [file] [log] [blame]
Chris Lattner2243a1652019-04-07 13:17:16 +00001=============================================
Chris Lattner13d35052019-04-07 13:42:29 +00002My First Language Frontend with LLVM Tutorial
Chris Lattner2243a1652019-04-07 13:17:16 +00003=============================================
4
kristina63cf7042019-11-16 23:06:50 +00005.. toctree::
6 :hidden:
7
8 LangImpl01
9 LangImpl02
10 LangImpl03
11 LangImpl04
12 LangImpl05
13 LangImpl06
14 LangImpl07
15 LangImpl08
16 LangImpl09
17 LangImpl10
18
Chris Lattner0fa6c152019-04-07 14:23:11 +000019**Requirements:** This tutorial assumes you know C++, but no previous
20compiler experience is necessary.
21
Chris Lattner13d35052019-04-07 13:42:29 +000022Welcome to the "My First Language Frontend with LLVM" tutorial. Here we
23run through the implementation of a simple language, showing
24how fun and easy it can be. This tutorial will get you up and running
25fast and show a concrete example of something that uses LLVM to generate
26code.
Chris Lattner2243a1652019-04-07 13:17:16 +000027
Chris Lattner13d35052019-04-07 13:42:29 +000028This tutorial introduces the simple "Kaleidoscope" language, building it
29iteratively over the course of several chapters, showing how it is built
30over time. This lets us cover a range of language design and LLVM-specific
31ideas, showing and explaining the code for it all along the way,
Chris Lattner0fa6c152019-04-07 14:23:11 +000032and reduces the overwhelming amount of details up front. We strongly
Chris Lattner13d35052019-04-07 13:42:29 +000033encourage that you *work with this code* - make a copy and hack it up and
34experiment.
Chris Lattner2243a1652019-04-07 13:17:16 +000035
Chris Lattner0fa6c152019-04-07 14:23:11 +000036**Warning**: In order to focus on teaching compiler techniques and LLVM
Chris Lattner13d35052019-04-07 13:42:29 +000037specifically,
38this tutorial does *not* show best practices in software engineering
39principles. For example, the code uses global variables
Chris Lattner0fa6c152019-04-07 14:23:11 +000040pervasively, doesn't use
Chris Lattner2243a1652019-04-07 13:17:16 +000041`visitors <http://en.wikipedia.org/wiki/Visitor_pattern>`_, etc... but
Chris Lattner13d35052019-04-07 13:42:29 +000042instead keeps things simple and focuses on the topics at hand.
Chris Lattner2243a1652019-04-07 13:17:16 +000043
Chris Lattner13d35052019-04-07 13:42:29 +000044This tutorial is structured into chapters covering individual topics,
Chris Lattner0fa6c152019-04-07 14:23:11 +000045allowing you to skip ahead as you wish:
Chris Lattner2243a1652019-04-07 13:17:16 +000046
Chris Lattner0fa6c152019-04-07 14:23:11 +000047- `Chapter #1: Kaleidoscope language and Lexer <LangImpl01.html>`_ -
48 This shows where we are
Chris Lattner13d35052019-04-07 13:42:29 +000049 going and the basic functionality that we want to build. A lexer
50 is also the first part of building a parser for a language, and we
51 use a simple C++ lexer which is easy to understand.
Chris Lattner0fa6c152019-04-07 14:23:11 +000052- `Chapter #2: Implementing a Parser and AST <LangImpl02.html>`_ -
Chris Lattner2243a1652019-04-07 13:17:16 +000053 With the lexer in place, we can talk about parsing techniques and
54 basic AST construction. This tutorial describes recursive descent
Chris Lattner13d35052019-04-07 13:42:29 +000055 parsing and operator precedence parsing.
Chris Lattner0fa6c152019-04-07 14:23:11 +000056- `Chapter #3: Code generation to LLVM IR <LangImpl03.html>`_ - with
Chris Lattner13d35052019-04-07 13:42:29 +000057 the AST ready, we show how easy it is to generate LLVM IR, and show
58 a simple way to incorporate LLVM into your project.
Chris Lattner0fa6c152019-04-07 14:23:11 +000059- `Chapter #4: Adding JIT and Optimizer Support <LangImpl04.html>`_ -
60 One great thing about LLVM is its support for JIT compilation, so
Chris Lattner2243a1652019-04-07 13:17:16 +000061 we'll dive right into it and show you the 3 lines it takes to add JIT
Chris Lattner13d35052019-04-07 13:42:29 +000062 support. Later chapters show how to generate .o files.
kristina63cf7042019-11-16 23:06:50 +000063- `Chapter #5: Extending the Language: Control Flow <LangImpl05.html>`_ - With
64 the basic language up and running, we show how to extend
Chris Lattner13d35052019-04-07 13:42:29 +000065 it with control flow operations ('if' statement and a 'for' loop). This
66 gives us a chance to talk about SSA construction and control
Chris Lattner2243a1652019-04-07 13:17:16 +000067 flow.
Chris Lattner0fa6c152019-04-07 14:23:11 +000068- `Chapter #6: Extending the Language: User-defined Operators
69 <LangImpl06.html>`_ - This chapter extends the language to let
70 users define arbitrary unary and binary operators - with assignable
71 precedence! This allows us to build a significant piece of the
Chris Lattner13d35052019-04-07 13:42:29 +000072 "language" as library routines.
Chris Lattner0fa6c152019-04-07 14:23:11 +000073- `Chapter #7: Extending the Language: Mutable Variables
74 <LangImpl07.html>`_ - This chapter talks about adding user-defined local
Chris Lattner13d35052019-04-07 13:42:29 +000075 variables along with an assignment operator. This shows how easy it is
76 to construct SSA form in LLVM: LLVM does *not* require your front-end
77 to construct SSA form in order to use it!
Chris Lattner0fa6c152019-04-07 14:23:11 +000078- `Chapter #8: Compiling to Object Files <LangImpl08.html>`_ - This
Chris Lattner2243a1652019-04-07 13:17:16 +000079 chapter explains how to take LLVM IR and compile it down to object
Chris Lattner13d35052019-04-07 13:42:29 +000080 files, like a static compiler does.
Chris Lattner32a8e742019-04-07 14:34:24 +000081- `Chapter #9: Debug Information <LangImpl09.html>`_ - A real language
82 needs to support debuggers, so we
Chris Lattner0fa6c152019-04-07 14:23:11 +000083 add debug information that allows setting breakpoints in Kaleidoscope
Chris Lattner13d35052019-04-07 13:42:29 +000084 functions, print out argument variables, and call functions!
Chris Lattner0fa6c152019-04-07 14:23:11 +000085- `Chapter #10: Conclusion and other tidbits <LangImpl10.html>`_ - This
86 chapter wraps up the series by discussing ways to extend the language
87 and includes pointers to info on "special topics" like adding garbage
Chris Lattner2243a1652019-04-07 13:17:16 +000088 collection support, exceptions, debugging, support for "spaghetti
Chris Lattner0fa6c152019-04-07 14:23:11 +000089 stacks", etc.
Chris Lattner2243a1652019-04-07 13:17:16 +000090
91By the end of the tutorial, we'll have written a bit less than 1000 lines
Chris Lattner0fa6c152019-04-07 14:23:11 +000092of (non-comment, non-blank) lines of code. With this small amount of
Chris Lattner13d35052019-04-07 13:42:29 +000093code, we'll have built up a nice little compiler for a non-trivial
Chris Lattner2243a1652019-04-07 13:17:16 +000094language including a hand-written lexer, parser, AST, as well as code
Chris Lattner0fa6c152019-04-07 14:23:11 +000095generation support - both static and JIT! The breadth of this is a great
96testament to the strengths of LLVM and shows why it is such a popular
97target for language designers and others who need high performance code
98generation.