File: index.html

package info (click to toggle)
llvm-toolchain-13 1%3A13.0.1-6~deb10u4
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 1,418,792 kB
  • sloc: cpp: 5,290,827; ansic: 996,570; asm: 544,593; python: 188,212; objc: 72,027; lisp: 30,291; f90: 25,395; sh: 24,900; javascript: 9,780; pascal: 9,398; perl: 7,484; ml: 5,432; awk: 3,523; makefile: 2,892; xml: 953; cs: 573; fortran: 539
file content (220 lines) | stat: -rw-r--r-- 11,316 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220


<!DOCTYPE html>

<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>My First Language Frontend with LLVM Tutorial &#8212; LLVM 13 documentation</title>
    <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
    <link rel="stylesheet" href="../../_static/llvm-theme.css" type="text/css" />
    <script id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
    <script src="../../_static/jquery.js"></script>
    <script src="../../_static/underscore.js"></script>
    <script src="../../_static/doctools.js"></script>
    <link rel="index" title="Index" href="../../genindex.html" />
    <link rel="search" title="Search" href="../../search.html" />
    <link rel="next" title="1. Kaleidoscope: Kaleidoscope Introduction and the Lexer" href="LangImpl01.html" />
    <link rel="prev" title="LLVM Tutorial: Table of Contents" href="../index.html" />
<style type="text/css">
  table.right { float: right; margin-left: 20px; }
  table.right td { border: 1px solid #ccc; }
</style>

  </head><body>
<div class="logo">
  <a href="../../index.html">
    <img src="../../_static/logo.png"
         alt="LLVM Logo" width="250" height="88"/></a>
</div>

    <div class="related" role="navigation" aria-label="related navigation">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="../../genindex.html" title="General Index"
             accesskey="I">index</a></li>
        <li class="right" >
          <a href="LangImpl01.html" title="1. Kaleidoscope: Kaleidoscope Introduction and the Lexer"
             accesskey="N">next</a> |</li>
        <li class="right" >
          <a href="../index.html" title="LLVM Tutorial: Table of Contents"
             accesskey="P">previous</a> |</li>
  <li><a href="https://llvm.org/">LLVM Home</a>&nbsp;|&nbsp;</li>
  <li><a href="../../index.html">Documentation</a>&raquo;</li>

          <li class="nav-item nav-item-1"><a href="../../GettingStartedTutorials.html" >Getting Started/Tutorials</a> &#187;</li>
          <li class="nav-item nav-item-2"><a href="../index.html" accesskey="U">LLVM Tutorial: Table of Contents</a> &#187;</li>
        <li class="nav-item nav-item-this"><a href="">My First Language Frontend with LLVM Tutorial</a></li> 
      </ul>
    </div>

      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
        <div class="sphinxsidebarwrapper">

<h3>Documentation</h3>

<ul class="want-points">
    <li><a href="https://llvm.org/docs/GettingStartedTutorials.html">Getting Started/Tutorials</a></li>
    <li><a href="https://llvm.org/docs/UserGuides.html">User Guides</a></li>
    <li><a href="https://llvm.org/docs/Reference.html">Reference</a></li>
</ul>

<h3>Getting Involved</h3>

<ul class="want-points">
    <li><a href="https://llvm.org/docs/Contributing.html">Contributing to LLVM</a></li>
    <li><a href="https://llvm.org/docs/HowToSubmitABug.html">Submitting Bug Reports</a></li>
    <li><a href="https://llvm.org/docs/GettingInvolved.html#mailing-lists">Mailing Lists</a></li>
    <li><a href="https://llvm.org/docs/GettingInvolved.html#irc">IRC</a></li>
    <li><a href="https://llvm.org/docs/GettingInvolved.html#meetups-and-social-events">Meetups and Social Events</a></li>
</ul>

<h3>Additional Links</h3>

<ul class="want-points">
    <li><a href="https://llvm.org/docs/FAQ.html">FAQ</a></li>
    <li><a href="https://llvm.org/docs/Lexicon.html">Glossary</a></li>
    <li><a href="https://llvm.org/pubs">Publications</a></li>
    <li><a href="https://github.com/llvm/llvm-project//">Github Repository</a></li>
</ul>
  <div role="note" aria-label="source link">
    <h3>This Page</h3>
    <ul class="this-page-menu">
      <li><a href="../../_sources/tutorial/MyFirstLanguageFrontend/index.rst.txt"
            rel="nofollow">Show Source</a></li>
    </ul>
   </div>
<div id="searchbox" style="display: none" role="search">
  <h3 id="searchlabel">Quick search</h3>
    <div class="searchformwrapper">
    <form class="search" action="../../search.html" method="get">
      <input type="text" name="q" aria-labelledby="searchlabel" />
      <input type="submit" value="Go" />
    </form>
    </div>
</div>
<script>$('#searchbox').show(0);</script>
        </div>
      </div>

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body" role="main">
            
  <div class="section" id="my-first-language-frontend-with-llvm-tutorial">
<h1>My First Language Frontend with LLVM Tutorial<a class="headerlink" href="#my-first-language-frontend-with-llvm-tutorial" title="Permalink to this headline">¶</a></h1>
<div class="toctree-wrapper compound">
</div>
<p><strong>Requirements:</strong> This tutorial assumes you know C++, but no previous
compiler experience is necessary.</p>
<p>Welcome to the “My First Language Frontend with LLVM” tutorial. Here we
run through the implementation of a simple language, showing
how fun and easy it can be.  This tutorial will get you up and running
fast and show a concrete example of something that uses LLVM to generate
code.</p>
<p>This tutorial introduces the simple “Kaleidoscope” language, building it
iteratively over the course of several chapters, showing how it is built
over time. This lets us cover a range of language design and LLVM-specific
ideas, showing and explaining the code for it all along the way,
and reduces the overwhelming amount of details up front.  We strongly
encourage that you <em>work with this code</em> - make a copy and hack it up and
experiment.</p>
<p><strong>Warning</strong>: In order to focus on teaching compiler techniques and LLVM
specifically,
this tutorial does <em>not</em> show best practices in software engineering
principles.  For example, the code uses global variables
pervasively, doesn’t use
<a class="reference external" href="http://en.wikipedia.org/wiki/Visitor_pattern">visitors</a>, etc… but
instead keeps things simple and focuses on the topics at hand.</p>
<p>This tutorial is structured into chapters covering individual topics,
allowing you to skip ahead as you wish:</p>
<ul class="simple">
<li><p><a class="reference external" href="LangImpl01.html">Chapter #1: Kaleidoscope language and Lexer</a> -
This shows where we are
going and the basic functionality that we want to build.  A lexer
is also the first part of building a parser for a language, and we
use a simple C++ lexer which is easy to understand.</p></li>
<li><p><a class="reference external" href="LangImpl02.html">Chapter #2: Implementing a Parser and AST</a> -
With the lexer in place, we can talk about parsing techniques and
basic AST construction. This tutorial describes recursive descent
parsing and operator precedence parsing.</p></li>
<li><p><a class="reference external" href="LangImpl03.html">Chapter #3: Code generation to LLVM IR</a> - with
the AST ready, we show how easy it is to generate LLVM IR, and show
a simple way to incorporate LLVM into your project.</p></li>
<li><p><a class="reference external" href="LangImpl04.html">Chapter #4: Adding JIT and Optimizer Support</a> -
One great thing about LLVM is its support for JIT compilation, so
we’ll dive right into it and show you the 3 lines it takes to add JIT
support. Later chapters show how to generate .o files.</p></li>
<li><p><a class="reference external" href="LangImpl05.html">Chapter #5: Extending the Language: Control Flow</a> - With
the basic language up and running, we show how to extend
it with control flow operations (‘if’ statement and a ‘for’ loop). This
gives us a chance to talk about SSA construction and control
flow.</p></li>
<li><p><a class="reference external" href="LangImpl06.html">Chapter #6: Extending the Language: User-defined Operators</a> - This chapter extends the language to let
users define arbitrary unary and binary operators - with assignable
precedence!  This allows us to build a significant piece of the
“language” as library routines.</p></li>
<li><p><a class="reference external" href="LangImpl07.html">Chapter #7: Extending the Language: Mutable Variables</a> - This chapter talks about adding user-defined local
variables along with an assignment operator. This shows how easy it is
to construct SSA form in LLVM: LLVM does <em>not</em> require your front-end
to construct SSA form in order to use it!</p></li>
<li><p><a class="reference external" href="LangImpl08.html">Chapter #8: Compiling to Object Files</a> - This
chapter explains how to take LLVM IR and compile it down to object
files, like a static compiler does.</p></li>
<li><p><a class="reference external" href="LangImpl09.html">Chapter #9: Debug Information</a> - A real language
needs to support debuggers, so we
add debug information that allows setting breakpoints in Kaleidoscope
functions, print out argument variables, and call functions!</p></li>
<li><p><a class="reference external" href="LangImpl10.html">Chapter #10: Conclusion and other tidbits</a> - This
chapter wraps up the series by discussing ways to extend the language
and includes pointers to info on “special topics” like adding garbage
collection support, exceptions, debugging, support for “spaghetti
stacks”, etc.</p></li>
</ul>
<p>By the end of the tutorial, we’ll have written a bit less than 1000 lines
of (non-comment, non-blank) lines of code. With this small amount of
code, we’ll have built up a nice little compiler for a non-trivial
language including a hand-written lexer, parser, AST, as well as code
generation support - both static and JIT!  The breadth of this is a great
testament to the strengths of LLVM and shows why it is such a popular
target for language designers and others who need high performance code
generation.</p>
</div>


            <div class="clearer"></div>
          </div>
        </div>
      </div>
      <div class="clearer"></div>
    </div>
    <div class="related" role="navigation" aria-label="related navigation">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="../../genindex.html" title="General Index"
             >index</a></li>
        <li class="right" >
          <a href="LangImpl01.html" title="1. Kaleidoscope: Kaleidoscope Introduction and the Lexer"
             >next</a> |</li>
        <li class="right" >
          <a href="../index.html" title="LLVM Tutorial: Table of Contents"
             >previous</a> |</li>
  <li><a href="https://llvm.org/">LLVM Home</a>&nbsp;|&nbsp;</li>
  <li><a href="../../index.html">Documentation</a>&raquo;</li>

          <li class="nav-item nav-item-1"><a href="../../GettingStartedTutorials.html" >Getting Started/Tutorials</a> &#187;</li>
          <li class="nav-item nav-item-2"><a href="../index.html" >LLVM Tutorial: Table of Contents</a> &#187;</li>
        <li class="nav-item nav-item-this"><a href="">My First Language Frontend with LLVM Tutorial</a></li> 
      </ul>
    </div>
    <div class="footer" role="contentinfo">
        &#169; Copyright 2003-2021, LLVM Project.
      Last updated on 2021-09-18.
      Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.5.4.
    </div>
  </body>
</html>