eelco-visser-compiler-const.../lecture/8b.html

1100 lines
15 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 8b: More Parsing Algorithms</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="../lectures/2021/08-more-parsing/CS4200-2020-8-parsing.pdf">
<img class="border border-dark" width="100%" src="../lectures/2021/08-more-parsing/title.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 8b: More Parsing Algorithms
</h1>
</div>
<div>
Eelco Visser
</div>
<div>
Lecture
| <a class="text-primary" href="../lectures/2021/08-more-parsing/CS4200-2020-8-parsing.pdf">PDF</a>
</div>
<div>
October 14, 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>Note: This lecture is for the interested student and will not be part of the exam material.</p>
<p>In this lecture we study two more parsing algorithms.</p>
<h3 id="predictive-parsing">Predictive Parsing</h3>
<p>Predictive parsing is a top-down parsing approach in which the stack contains the symbols to parse.
Actions consist in either popping a terminal off the stack when that coincides with the next input token, or in predicting a production for the non-terminal that is on top of the stack and replacing that non-terminal with the symbols on the right-hand side of the predicted production.
We discuss how to derive an LL(1) automaton from a grammar based on the FIRST and FOLLOW set for that grammar.</p>
<h3 id="generalized-parsing">Generalized Parsing</h3>
<p>Generalized LR parsing is a generalization of the LR parsing algorithm that we studied last week.
The LR parsing algorithm is deterministic.
At each point there is a single shift or reduce action that can take place.
That means, that an LR parser cannot handle shift/reduce conflicts in the parse table.
A Generalized-LR parser handles such conflicts by forking the stack and continuing to parse the input with two parsers in parallel.
This may lead to multiple parsers to be active simultaneously.
When two parsers end up in the same state again, their stacks are merged.</p>
<h3 id="other-parsing-algorithms">Other Parsing Algorithms</h3>
<p>There are many more parsing algorithms than we can study in this course.
In the references a couple of pointers to other sources about parsing algorithms.
These include <code class="language-plaintext highlighter-rouge">ALL(*)</code>, the algorithm that is at the basis of the popular ANTLR parser generator,
parsing expression grammars (PEGs) another popular parsing approach,
and parsing combinators in Haskell and Scala.</p>
<!-- The [PDF](/2021lectures/2020/08-more-parsing/CS4200-2020-8-parsing-builds.pdf) of the slides of the lecture with builds. -->
<h3 id="slides">Slides</h3>
<ul>
<li><a href="../lectures/2021/08-more-parsing/CS4200-2020-8-parsing.pdf">Slides</a></li>
<li><a href="../lectures/2021/08-more-parsing/CS4200-2020-8-parsing-builds.pdf">Slides with builds</a></li>
</ul>
<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="ParrHF14"></a>
<a class="font-weight-bold text-dark" target="_blank" href="http://doi.acm.org/10.1145/2660193.2660202">Adaptive LL(*) parsing: the power of dynamic analysis</a>
</div>
<div class="font-weight-light text-secondary" style="font-size:90%;">
<a class="text-secondary" href="http://www.cs.usfca.edu/~parrt/">Terence John Parr</a>, <a class="text-secondary" href="https://researchr.org/alias/sam-harwell">Sam Harwell</a>, <a class="text-secondary" href="https://researchr.org/alias/kathleen-fisher">Kathleen Fisher</a>.
</div>
<div class="font-weight-light text-secondary" style="font-size:90%;">
OOPSLA 2014
[<a class="text-secondary" href="http://doi.acm.org/10.1145/2660193.2660202" target="_blank">doi</a>, <a class="text-secondary" target="_blank" href="https://researchr.org/publication/ParrHF14/bibtex">bib</a>, <a href="https://researchr.org/publication/ParrHF14" class="text-secondary" target="_blank">researchr</a>]
<!-- ParrHF14 -->
</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="MoorsPO2008"></a>
Parser combinators in Scala
</div>
<div class="font-weight-light text-secondary" style="font-size:90%;">
<a class="text-secondary" href="http://www.google.com">Adriaan Moors</a>, <a class="text-secondary" href="https://researchr.org/alias/f.-piessens"> F. Piessens</a>, <a class="text-secondary" href="http://lampwww.epfl.ch/~odersky/">Martin Odersky</a>.
</div>
<div class="font-weight-light text-secondary" style="font-size:90%;">
Technical report , Department of Computer Science, K.U. Leuven, 2008
[<a class="text-secondary" target="_blank" href="https://researchr.org/publication/MoorsPO2008/bibtex">bib</a>, <a href="https://researchr.org/publication/MoorsPO2008" class="text-secondary" target="_blank">researchr</a>]
<!-- MoorsPO2008 -->
</div>
</div>
</li>
<li class="list-group-item pl-lg-0 border-0 pb-0">
<div class="bd-callout border-info pl-3">
<div>
<a name="AhoLSU2006"></a>
Compilers: Principles, Techniques, and Tools (2nd Edition)
</div>
<div class="font-weight-light text-secondary" style="font-size:90%;">
<a class="text-secondary" href="https://researchr.org/alias/a.-v.-aho">A. V. Aho</a>, <a class="text-secondary" href="https://researchr.org/alias/m.-s.-lam"> M. S. Lam</a>, <a class="text-secondary" href="https://researchr.org/alias/r.-sethi">R. Sethi</a>, <a class="text-secondary" href="https://researchr.org/alias/j.-d.-ullman"> J. D. Ullman</a>.
</div>
<div class="font-weight-light text-secondary" style="font-size:90%;">
[<a class="text-secondary" target="_blank" href="https://researchr.org/publication/AhoLSU2006/bibtex">bib</a>, <a href="https://researchr.org/publication/AhoLSU2006" class="text-secondary" target="_blank">researchr</a>]
<!-- AhoLSU2006 -->
</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="Ford04-PEG"></a>
<a class="font-weight-bold text-dark" target="_blank" href="http://doi.acm.org/10.1145/964001.964011">Parsing expression grammars: a recognition-based syntactic foundation</a>
</div>
<div class="font-weight-light text-secondary" style="font-size:90%;">
<a class="text-secondary" href="https://researchr.org/alias/bryan-ford">Bryan Ford</a>.
</div>
<div class="font-weight-light text-secondary" style="font-size:90%;">
POPL 2004
[<a class="text-secondary" href="http://doi.acm.org/10.1145/964001.964011" target="_blank">doi</a>, <a class="text-secondary" target="_blank" href="https://researchr.org/publication/Ford04-PEG/bibtex">bib</a>, <a href="https://researchr.org/publication/Ford04-PEG" class="text-secondary" target="_blank">researchr</a>]
<!-- Ford04-PEG -->
</div>
</div>
</li>
<li class="list-group-item pl-lg-0 border-0 pb-0">
<div class="bd-callout border-info pl-3">
<div>
<a name="Appel2002"></a>
Modern Compiler Implementation in Java, 2nd edition
</div>
<div class="font-weight-light text-secondary" style="font-size:90%;">
<a class="text-secondary" href="http://www.cs.princeton.edu/~appel/">Andrew W. Appel</a>.
</div>
<div class="font-weight-light text-secondary" style="font-size:90%;">
[<a class="text-secondary" target="_blank" href="https://researchr.org/publication/Appel2002/bibtex">bib</a>, <a href="https://researchr.org/publication/Appel2002" class="text-secondary" target="_blank">researchr</a>]
<!-- Appel2002 -->
</div>
</div>
</li>
<li class="list-group-item pl-lg-0 border-0 pb-0">
<div class="bd-callout border-danger pl-3">
<div>
<a name="Hutton92"></a>
Higher-Order Functions for Parsing
</div>
<div class="font-weight-light text-secondary" style="font-size:90%;">
<a class="text-secondary" href="http://www.cs.nott.ac.uk/~gmh/">Graham Hutton</a>.
</div>
<div class="font-weight-light text-secondary" style="font-size:90%;">
JFP 2(3) 1992
[<a class="text-secondary" target="_blank" href="https://researchr.org/publication/Hutton92/bibtex">bib</a>, <a href="https://researchr.org/publication/Hutton92" class="text-secondary" target="_blank">researchr</a>]
<!-- Hutton92 -->
</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="8.html">
&laquo;
</a>
</li>
<li class="page-item">
<a class="page-link" href="../lectures/index.html">
^
</a>
</li>
<li class="page-item">
<a class="page-link" href="9.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="8b.html#predictive-parsing">Predictive Parsing</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="8b.html#generalized-parsing">Generalized Parsing</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="8b.html#other-parsing-algorithms">Other Parsing Algorithms</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="8b.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="8b.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="8.html">
Previous
</a>
</li>
<li class="page-item">
<a class="page-link" href="9.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>