eelco-visser-compiler-const.../lecture/1.html

957 lines
14 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="Eelco Visser">
<meta name="generator" content="Jekyll v3.8.5">
<title>Lecture 1: What is a Compiler?</title>
<!-- <base href="/2021"> -->
<!--link rel="canonical" href="https://getbootstrap.com/docs/4.3/examples/starter-template/"-->
<link rel="icon" href="../img/logo/pl_ico2_2B3_icon.ico" type="image/x-icon">
<!-- Bootstrap core CSS -->
<!--link href="https://getbootstrap.com/docs/4.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"-->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<style>
.bd-placeholder-img {
font-size: 1.125rem;
text-anchor: middle;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
@media (min-width: 768px) {
.bd-placeholder-img-lg {
font-size: 3.5rem;
}
}
</style>
<!-- Custom styles for this template -->
<link href="../css/main.css" rel="stylesheet">
<link href="../css/borders-responsive.css" rel="stylesheet">
<link rel="stylesheet" href="../css/pl.css">
</head>
<body>
<nav class="navbar navbar-expand-md navbar-dark bg-dark fixed-top">
<a class="navbar-brand" href="../index.html">
TU Delft | CS4200
</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarsExampleDefault" aria-controls="navbarsExampleDefault" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarsExampleDefault">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="../lectures/index.html" tabindex="-1" aria-disabled="true">Lectures</a>
</li>
<li class="nav-item active">
<a class="nav-link" href="../homework/index.html" tabindex="-1" aria-disabled="true">Homework</a>
</li>
<li class="nav-item active">
<a class="nav-link" href="../project/index.html" tabindex="-1" aria-disabled="true">Project</a>
</li>
<li class="nav-item active">
<a class="nav-link" href="../news/index.html" tabindex="-1" aria-disabled="true">News</a>
</li>
<li class="nav-item active">
<a class="nav-link" href="../blog/index.html" tabindex="-1" aria-disabled="true">Blog</a>
</li>
</ul>
</div>
</nav>
<div class="container">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-12 col-xl-12">
<a href="https://tudelft-cs4200.github.io/2021/lectures/2021/01-introduction/CS4200-2021-1-introduction.pdf">
<img class="border border-dark" width="100%" src="../lectures/2021/01-introduction/CS4200-2021-1-introduction/CS4200-2021-1-introduction.001.png"/>
</a>
<div class="mt-3 mb-3 pt-3 pb-3 text-dark border-top border-bottom border-grey">
<div class="text-dark font-weight-bold">
<h1>
Lecture 1: What is a Compiler?
</h1>
</div>
<div>
Eelco Visser
</div>
<div>
Lecture
| <a class="text-primary" href="https://tudelft-cs4200.github.io/2021/lectures/2021/01-introduction/CS4200-2021-1-introduction.pdf">PDF</a>
</div>
<div>
September 02, 2021
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-9 border-lg-right border-grey">
<p>In the opening lecture we look at what compilers are, why you would want to study them, and how the course is organized.</p>
<h3 id="slides">Slides</h3>
<ul>
<li><a href="../lectures/2021/01-introduction/CS4200-2021-1-introduction.pdf">Slides</a></li>
<li><a href="../lectures/2021/01-introduction/CS4200-2021-1-introduction-builds.pdf">Slides with builds</a></li>
</ul>
<h3 id="reading-material">Reading Material</h3>
<p>The lecture discusses the traditional compiler pipeline. In the course we will be using the Spoofax language workbench to define and implement languages. The [OOPSLA 2010] paper describes the design of Spoofax. The [SEFM 2020] paper gives an overview of SDF3, the language we will for syntax definition.</p>
<h3 id="tutorial">Tutorial</h3>
<iframe width="560" height="315" src="https://www.youtube.com/embed/7BBYQUp5ZnE" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe>
<p>Introduction to a <a href="https://pldi20.sigplan.org/details/pldi-2020-tutorials/3/Declarative-Language-Definition-with-Spoofax">tutorial on Spoofax</a> at the <a href="https://pldi20.sigplan.org/">PLDI 2020</a> conference in June 2020.</p>
<h3 id="references">References</h3>
<ul class="list-group list-group-flush pb-3">
<li class="list-group-item pl-lg-0 border-0 pb-0">
<div class="bd-callout border-primary pl-3">
<div>
<a name="AmorimV20"></a>
<a class="font-weight-bold text-dark" target="_blank" href="https://doi.org/10.1007/978-3-030-58768-0_1">Multi-purpose Syntax Definition with SDF3</a>
</div>
<div class="font-weight-light text-secondary" style="font-size:90%;">
<a class="text-secondary" href="https://www.linkedin.com/profile/view?id=136481548">Luis Eduardo de Souza Amorim</a>, <a class="text-secondary" href="http://eelcovisser.org">Eelco Visser</a>.
</div>
<div class="font-weight-light text-secondary" style="font-size:90%;">
SEFM 2020
[<a class="text-secondary" href="https://doi.org/10.1007/978-3-030-58768-0_1" target="_blank">doi</a>, <a class="text-secondary" target="_blank" href="https://researchr.org/publication/AmorimV20/bibtex">bib</a>, <a href="https://researchr.org/publication/AmorimV20" class="text-secondary" target="_blank">researchr</a>, <a class="text-secondary" data-toggle="collapse" href="1.html#AbstractAmorimV20" role="button" aria-expanded="false" aria-controls="AbstractAmorimV20"">abstract</a>]
<!-- AmorimV20 -->
</div>
<div class="collapse mt-1 mb-2" id="AbstractAmorimV20">
<div class="">
SDF3 is a syntax definition formalism that extends plain context-free grammars with features such as constructor declarations, declarative disambiguation rules, character-level grammars, permissive syntax, layout constraints, formatting templates, placeholder syntax, and modular composition. These features support the multi-purpose interpretation of syntax definitions, including derivation of type schemas for abstract syntax tree representations, scannerless generalized parsing of the full class of context-free grammars, error recovery, layout-sensitive parsing, parenthesization and formatting, and syntactic completion. This paper gives a high level overview of SDF3 by means of examples and provides a guide to the literature for further details.
</div>
</div>
</div>
</li>
<li class="list-group-item pl-lg-0 border-0 pb-0">
<div class="bd-callout border-success pl-3">
<div>
<a name="PadhyeSH19"></a>
<a class="font-weight-bold text-dark" target="_blank" href="https://chocopy.org/chocopy_language_reference.pdf">ChocoPy v2.2: Language Manual and Reference</a>
</div>
<div class="font-weight-light text-secondary" style="font-size:90%;">
<a class="text-secondary" href="https://researchr.org/alias/rohan-padhye">Rohan Padhye</a>, <a class="text-secondary" href="https://researchr.org/alias/koushik-sen">Koushik Sen</a>, <a class="text-secondary" href="https://researchr.org/alias/paul-hilfnger"> Paul Hilfnger</a>, <a class="text-secondary" href="https://researchr.org/alias/rohan-padhye">Rohan Padhye</a>, <a class="text-secondary" href="https://researchr.org/alias/koushik-sen">Koushik Sen</a>, <a class="text-secondary" href="https://researchr.org/alias/paul-hilfnger"> Paul Hilfnger</a>.
</div>
<div class="font-weight-light text-secondary" style="font-size:90%;">
[<a href="https://tudelft-cs4200.github.io/2021https://chocopy.org/chocopy_language_reference.pdf" class="text-secondary" target="_blank">pdf</a>, <a class="text-secondary" target="_blank" href="https://researchr.org/publication/PadhyeSH19/bibtex">bib</a>, <a href="https://researchr.org/publication/PadhyeSH19" class="text-secondary" target="_blank">researchr</a>]
<!-- -->
</div>
</div>
</li>
<li class="list-group-item pl-lg-0 border-0 pb-0">
<div class="bd-callout border-primary pl-3">
<div>
<a name="KatsV10"></a>
<a class="font-weight-bold text-dark" target="_blank" href="https://doi.org/10.1145/1869459.1869497">The Spoofax language workbench: rules for declarative specification of languages and IDEs</a>
</div>
<div class="font-weight-light text-secondary" style="font-size:90%;">
<a class="text-secondary" href="http://www.lclnet.nl/">Lennart C. L. Kats</a>, <a class="text-secondary" href="http://eelcovisser.org">Eelco Visser</a>.
</div>
<div class="font-weight-light text-secondary" style="font-size:90%;">
OOPSLA 2010
[<a href="../publications/2010/KatsV10.pdf" class="text-secondary" target="_blank">pdf</a>, <a class="text-secondary" href="https://doi.org/10.1145/1869459.1869497" target="_blank">doi</a>, <a class="text-secondary" target="_blank" href="https://researchr.org/publication/KatsV10/bibtex">bib</a>, <a href="https://researchr.org/publication/KatsV10" class="text-secondary" target="_blank">researchr</a>, <a class="text-secondary" data-toggle="collapse" href="1.html#AbstractKatsV10" role="button" aria-expanded="false" aria-controls="AbstractKatsV10"">abstract</a>]
<!-- -->
</div>
<div class="collapse mt-1 mb-2" id="AbstractKatsV10">
<div class="">
Spoofax is a language workbench for efficient, agile development of textual domain-specific languages with state-of-the-art IDE support. Spoofax integrates language processing techniques for parser generation, meta-programming, and IDE development into a single environment. It uses concise, declarative specifications for languages and IDE services. In this paper we describe the architecture of Spoofax and introduce idioms for high-level specifications of language semantics using rewrite rules, showing how analyses can be reused for transformations, code generation, and editor services such as error marking, reference resolving, and content completion. The implementation of these services is supported by language-parametric editor service classes that can be dynamically loaded by the Eclipse IDE, allowing new languages to be developed and used side-by-side in the same Eclipse environment.
</div>
</div>
</div>
</li>
</ul>
</div>
<div class="col-sm-12 col-md-12 col-lg-3 col-xl-3 " >
<div class="sticky-top top70 d-none d-lg-block d-xl-block">
<div class="pb4 mb3 border-bottom border-grey ">
<nav>
<ul class="pagination justify-content-left">
<li class="page-item">
<a class="page-link" href="../lectures/index.html">
^
</a>
</li>
<li class="page-item">
<a class="page-link" href="2.html">&raquo;</a>
</li>
</ul>
</nav>
</div>
<ul id="my_toc" class="toc list-group list-group-flush d-none d-lg-block d-xl-block p-0 ml-0 mt-3">
<li class="list-group-item pl-0 ml-0 border-0 pl-0 pt-0 pb-1 pr-0 m-0 mr-3"><a href="1.html#slides">Slides</a></li>
<li class="list-group-item pl-0 ml-0 border-0 pl-0 pt-0 pb-1 pr-0 m-0 mr-3"><a href="1.html#reading-material">Reading Material</a></li>
<li class="list-group-item pl-0 ml-0 border-0 pl-0 pt-0 pb-1 pr-0 m-0 mr-3"><a href="1.html#tutorial">Tutorial</a></li>
<li class="list-group-item pl-0 ml-0 border-0 pl-0 pt-0 pb-1 pr-0 m-0 mr-3"><a href="1.html#references">References</a></li>
</ul>
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<div class="border-top border-bottom border-grey mt-3 pt-3">
<nav>
<ul class="pagination justify-content-center">
<li class="page-item">
<a class="page-link" href="2.html">Next</a>
</li>
<li class="page-item">
<a class="page-link" href="../lectures/index.html">
Index
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
</div>
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
</body>
</html>