1:orphan:
2
3=============================================
4My First Language Frontend with LLVM Tutorial
5=============================================
6
7**Requirements:** This tutorial assumes you know C++, but no previous
8compiler experience is necessary.
9
10Welcome to the "My First Language Frontend with LLVM" tutorial. Here we
11run through the implementation of a simple language, showing
12how fun and easy it can be.  This tutorial will get you up and running
13fast and show a concrete example of something that uses LLVM to generate
14code.
15
16This tutorial introduces the simple "Kaleidoscope" language, building it
17iteratively over the course of several chapters, showing how it is built
18over time. This lets us cover a range of language design and LLVM-specific
19ideas, showing and explaining the code for it all along the way,
20and reduces the overwhelming amount of details up front.  We strongly
21encourage that you *work with this code* - make a copy and hack it up and
22experiment.
23
24**Warning**: In order to focus on teaching compiler techniques and LLVM
25specifically,
26this tutorial does *not* show best practices in software engineering
27principles.  For example, the code uses global variables
28pervasively, doesn't use
29`visitors <http://en.wikipedia.org/wiki/Visitor_pattern>`_, etc... but
30instead keeps things simple and focuses on the topics at hand.
31
32This tutorial is structured into chapters covering individual topics,
33allowing you to skip ahead as you wish:
34
35-  `Chapter #1: Kaleidoscope language and Lexer <LangImpl01.html>`_ -
36   This shows where we are
37   going and the basic functionality that we want to build.  A lexer
38   is also the first part of building a parser for a language, and we
39   use a simple C++ lexer which is easy to understand.
40-  `Chapter #2: Implementing a Parser and AST <LangImpl02.html>`_ -
41   With the lexer in place, we can talk about parsing techniques and
42   basic AST construction. This tutorial describes recursive descent
43   parsing and operator precedence parsing.
44-  `Chapter #3: Code generation to LLVM IR <LangImpl03.html>`_ - with
45   the AST ready, we show how easy it is to generate LLVM IR, and show
46   a simple way to incorporate LLVM into your project.
47-  `Chapter #4: Adding JIT and Optimizer Support <LangImpl04.html>`_ -
48   One great thing about LLVM is its support for JIT compilation, so
49   we'll dive right into it and show you the 3 lines it takes to add JIT
50   support. Later chapters show how to generate .o files.
51-  `Chapter #5: Extending the Language: Control Flow <LangImpl05.html>`_ - With the basic language up and running, we show how to extend
52   it with control flow operations ('if' statement and a 'for' loop). This
53   gives us a chance to talk about SSA construction and control
54   flow.
55-  `Chapter #6: Extending the Language: User-defined Operators
56   <LangImpl06.html>`_ - This chapter extends the language to let
57   users define arbitrary unary and binary operators - with assignable
58   precedence!  This allows us to build a significant piece of the
59   "language" as library routines.
60-  `Chapter #7: Extending the Language: Mutable Variables
61   <LangImpl07.html>`_ - This chapter talks about adding user-defined local
62   variables along with an assignment operator. This shows how easy it is
63   to construct SSA form in LLVM: LLVM does *not* require your front-end
64   to construct SSA form in order to use it!
65-  `Chapter #8: Compiling to Object Files <LangImpl08.html>`_ - This
66   chapter explains how to take LLVM IR and compile it down to object
67   files, like a static compiler does.
68-  `Chapter #9: Debug Information <LangImpl09.html>`_ - A real language
69   needs to support debuggers, so we
70   add debug information that allows setting breakpoints in Kaleidoscope
71   functions, print out argument variables, and call functions!
72-  `Chapter #10: Conclusion and other tidbits <LangImpl10.html>`_ - This
73   chapter wraps up the series by discussing ways to extend the language
74   and includes pointers to info on "special topics" like adding garbage
75   collection support, exceptions, debugging, support for "spaghetti
76   stacks", etc.
77
78By the end of the tutorial, we'll have written a bit less than 1000 lines
79of (non-comment, non-blank) lines of code. With this small amount of
80code, we'll have built up a nice little compiler for a non-trivial
81language including a hand-written lexer, parser, AST, as well as code
82generation support - both static and JIT!  The breadth of this is a great
83testament to the strengths of LLVM and shows why it is such a popular
84target for language designers and others who need high performance code
85generation.
86