CINXE.COM
Compiler – Wikipedia
<!DOCTYPE html> <html class="client-nojs" lang="de" dir="ltr"> <head> <meta charset="UTF-8"> <title>Compiler – Wikipedia</title> <script>(function(){var className="client-js";var cookie=document.cookie.match(/(?:^|; )dewikimwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":false,"wgSeparatorTransformTable":[",\t.",".\t,"],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy","wgMonthNames":["","Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],"wgRequestId":"b0db4849-b2b6-4300-9ff0-77d062108a52","wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"Compiler","wgTitle":"Compiler","wgCurRevisionId":250482251,"wgRevisionId":250482251,"wgArticleId":968,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":[ "Wikipedia:Defekte Weblinks/Ungeprüfte Archivlinks 2024-11","Compilerbau","Programmierwerkzeug"],"wgPageViewLanguage":"de","wgPageContentLanguage":"de","wgPageContentModel":"wikitext","wgRelevantPageName":"Compiler","wgRelevantArticleId":968,"wgIsProbablyEditable":true,"wgRelevantPageIsProbablyEditable":true,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"wikipedia","wgCiteReferencePreviewsActive":true,"wgFlaggedRevsParams":{"tags":{"accuracy":{"levels":1}}},"wgStableRevisionId":250482251,"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgPopupsFlags":0,"wgVisualEditor":{"pageLanguageCode":"de","pageLanguageDir":"ltr","pageVariantFallbacks":"de"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":true,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":50000,"wgRelatedArticlesCompat":[],"wgCentralAuthMobileDomain":false,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage", "wgULSisCompactLinksEnabled":true,"wgVector2022LanguageInHeader":false,"wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q47506","wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"],"GEHomepageSuggestedEditsEnableTopics":true,"wgGETopicsMatchModeEnabled":false,"wgGEStructuredTaskRejectionReasonTextInputEnabled":false,"wgGELevelingUpEnabledForUser":false};RLSTATE={"ext.gadget.citeRef":"ready","ext.gadget.defaultPlainlinks":"ready","ext.gadget.dewikiCommonHide":"ready","ext.gadget.dewikiCommonLayout":"ready","ext.gadget.dewikiCommonStyle":"ready","ext.gadget.NavFrame":"ready","ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.cite.styles":"ready","ext.pygments":"ready","skins.vector.styles.legacy":"ready","ext.flaggedRevs.basic":"ready","mediawiki.codex.messagebox.styles":"ready", "ext.visualEditor.desktopArticleTarget.noscript":"ready","codex-search-styles":"ready","ext.uls.interlanguage":"ready","wikibase.client.init":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["ext.cite.ux-enhancements","ext.pygments.view","mediawiki.page.media","site","mediawiki.page.ready","mediawiki.toc","skins.vector.legacy.js","ext.centralNotice.geoIP","ext.centralNotice.startUp","ext.flaggedRevs.advanced","ext.gadget.createNewSection","ext.gadget.WikiMiniAtlas","ext.gadget.OpenStreetMap","ext.gadget.CommonsDirekt","ext.gadget.donateLink","ext.urlShortener.toolbar","ext.centralauth.centralautologin","mmv.bootstrap","ext.popups","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.echo.centralauth","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.compactlinks","ext.uls.interface","ext.cx.eventlogging.campaigns","ext.checkUser.clientHints","ext.growthExperiments.SuggestedEditSession","wikibase.sidebar.tracking"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=de&modules=codex-search-styles%7Cext.cite.styles%7Cext.flaggedRevs.basic%7Cext.pygments%2CwikimediaBadges%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cmediawiki.codex.messagebox.styles%7Cskins.vector.styles.legacy%7Cwikibase.client.init&only=styles&skin=vector"> <script async="" src="/w/load.php?lang=de&modules=startup&only=scripts&raw=1&skin=vector"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=de&modules=ext.gadget.NavFrame%2CciteRef%2CdefaultPlainlinks%2CdewikiCommonHide%2CdewikiCommonLayout%2CdewikiCommonStyle&only=styles&skin=vector"> <link rel="stylesheet" href="/w/load.php?lang=de&modules=site.styles&only=styles&skin=vector"> <meta name="generator" content="MediaWiki 1.44.0-wmf.5"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="Compiler – Wikipedia"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//de.m.wikipedia.org/wiki/Compiler"> <link rel="alternate" type="application/x-wiki" title="Seite bearbeiten" href="/w/index.php?title=Compiler&action=edit"> <link rel="apple-touch-icon" href="/static/apple-touch/wikipedia.png"> <link rel="icon" href="/static/favicon/wikipedia.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="Wikipedia (de)"> <link rel="EditURI" type="application/rsd+xml" href="//de.wikipedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://de.wikipedia.org/wiki/Compiler"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de"> <link rel="alternate" type="application/atom+xml" title="Atom-Feed für „Wikipedia“" href="/w/index.php?title=Spezial:Letzte_%C3%84nderungen&feed=atom"> <link rel="dns-prefetch" href="//meta.wikimedia.org" /> <link rel="dns-prefetch" href="//login.wikimedia.org"> </head> <body class="skin-vector-legacy mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject mw-editable page-Compiler rootpage-Compiler skin-vector action-view"><div id="mw-page-base" class="noprint"></div> <div id="mw-head-base" class="noprint"></div> <div id="content" class="mw-body" role="main"> <a id="top"></a> <div id="siteNotice"><!-- CentralNotice --></div> <div class="mw-indicators"> </div> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Compiler</span></h1> <div id="bodyContent" class="vector-body"> <div id="siteSub" class="noprint">aus Wikipedia, der freien Enzyklopädie</div> <div id="contentSub"><div id="mw-content-subtitle"></div></div> <div id="contentSub2"></div> <div id="jump-to-nav"></div> <a class="mw-jump-link" href="#mw-head">Zur Navigation springen</a> <a class="mw-jump-link" href="#searchInput">Zur Suche springen</a> <div id="mw-content-text" class="mw-body-content"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><div class="hintergrundfarbe1 rahmenfarbe1 navigation-not-searchable noprint vorlage-weiterleitungshinweis" style="border-bottom-style: solid; border-bottom-width: 1px; font-size:95%; margin-bottom:1em; padding: 0.25em; overflow: hidden; word-break: break-word; word-wrap: break-word;"><div class="noviewer noresize bksicon" style="display: table-cell; padding-bottom: 0.2em; padding-left: 0.25em; padding-right: 1em; padding-top: 0.2em; vertical-align: middle;" aria-hidden="true" role="presentation"><span typeof="mw:File"><span><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/e/ea/Disambig-dark.svg/25px-Disambig-dark.svg.png" decoding="async" width="25" height="19" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/e/ea/Disambig-dark.svg/38px-Disambig-dark.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/e/ea/Disambig-dark.svg/50px-Disambig-dark.svg.png 2x" data-file-width="444" data-file-height="340" /></span></span></div> <div style="display: table-cell; vertical-align: middle; width: 100%;"> <div role="navigation"> <i>Kompilieren</i> ist eine Weiterleitung auf diesen Artikel. Zu weiteren Bedeutungen des Begriffs siehe <a href="/wiki/Kompilation" class="mw-disambig" title="Kompilation">Kompilation</a>.</div> </div></div> <p>Ein <b>Compiler</b> (auch <i>Kompilierer</i>; von <span style="font-style:normal;font-weight:normal"><a href="/wiki/Englische_Sprache" title="Englische Sprache">englisch</a></span> <span lang="en-Latn" style="font-style:italic">compile</span> ‚zusammentragen‘ bzw. <span style="font-style:normal;font-weight:normal"><a href="/wiki/Latein" title="Latein">lateinisch</a></span> <span lang="la-Latn" style="font-style:italic">compilare</span> ‚aufhäufen‘) ist ein <a href="/wiki/Computerprogramm" title="Computerprogramm">Computerprogramm</a>, das <a href="/wiki/Quelltext" title="Quelltext">Quellcodes</a> einer bestimmten <a href="/wiki/Programmiersprache" title="Programmiersprache">Programmiersprache</a> in eine Form übersetzt, die von einem <a href="/wiki/Computer" title="Computer">Computer</a> (direkter) ausgeführt werden kann. Daraus entsteht ein mehr oder weniger direkt ausführbares Programm. Davon zu unterscheiden sind <a href="/wiki/Interpreter" title="Interpreter">Interpreter</a>, etwa für frühe Versionen von <a href="/wiki/BASIC" title="BASIC">BASIC</a>, die keinen <a href="/wiki/Maschinencode" class="mw-redirect" title="Maschinencode">Maschinencode</a> erzeugen. </p><p>Teils wird zwischen den Begriffen <i>Übersetzer</i> und Compiler unterschieden. Ein Übersetzer überführt ein Programm aus einer <i>formalen Quellsprache</i> in ein <a href="/wiki/Formale_Semantik" title="Formale Semantik">semantisches</a> <a href="/wiki/Programm%C3%A4quivalenz" class="mw-redirect" title="Programmäquivalenz">Äquivalent</a> in einer <i>formalen Zielsprache</i>. Compiler sind spezielle Übersetzer, die <a href="/wiki/Quelltext" title="Quelltext">Programmcode</a> aus <a href="/wiki/H%C3%B6here_Programmiersprache" title="Höhere Programmiersprache">höheren Programmiersprachen</a>, in ausführbare <a href="/wiki/Maschinensprache" title="Maschinensprache">Maschinensprache</a> einer bestimmten <a href="/wiki/Rechnerarchitektur" title="Rechnerarchitektur">Rechnerarchitektur</a> oder einen <a href="/wiki/Zwischencode" title="Zwischencode">Zwischencode</a> überführen. Diese Trennung zwischen den Begriffen Übersetzer und Compiler wird nicht in allen Fällen vorgenommen. </p><p>Der <i>Vorgang</i> der Übersetzung durch den Compiler wird als <i>Kompilierung</i> oder Umwandlung bezeichnet. Das Gegenteil, also die Rückübersetzung von Maschinensprache in Quelltext einer bestimmten Programmiersprache, wird <i>Dekompilierung</i> und entsprechende Programme <i><a href="/wiki/Decompiler" title="Decompiler">Decompiler</a></i> genannt. </p> <div id="toc" class="toc" role="navigation" aria-labelledby="mw-toc-heading"><input type="checkbox" role="button" id="toctogglecheckbox" class="toctogglecheckbox" style="display:none" /><div class="toctitle" lang="de" dir="ltr"><h2 id="mw-toc-heading">Inhaltsverzeichnis</h2><span class="toctogglespan"><label class="toctogglelabel" for="toctogglecheckbox"></label></span></div> <ul> <li class="toclevel-1 tocsection-1"><a href="#Terminologie"><span class="tocnumber">1</span> <span class="toctext">Terminologie</span></a></li> <li class="toclevel-1 tocsection-2"><a href="#Geschichte"><span class="tocnumber">2</span> <span class="toctext">Geschichte</span></a></li> <li class="toclevel-1 tocsection-3"><a href="#Arbeitsweise"><span class="tocnumber">3</span> <span class="toctext">Arbeitsweise</span></a></li> <li class="toclevel-1 tocsection-4"><a href="#Aufbau_eines_Compilers"><span class="tocnumber">4</span> <span class="toctext">Aufbau eines Compilers</span></a> <ul> <li class="toclevel-2 tocsection-5"><a href="#Frontend_(auch_„Analysephase“)"><span class="tocnumber">4.1</span> <span class="toctext">Frontend (auch „Analysephase“)</span></a> <ul> <li class="toclevel-3 tocsection-6"><a href="#Lexikalische_Analyse"><span class="tocnumber">4.1.1</span> <span class="toctext">Lexikalische Analyse</span></a></li> <li class="toclevel-3 tocsection-7"><a href="#Syntaktische_Analyse"><span class="tocnumber">4.1.2</span> <span class="toctext">Syntaktische Analyse</span></a></li> <li class="toclevel-3 tocsection-8"><a href="#Semantische_Analyse"><span class="tocnumber">4.1.3</span> <span class="toctext">Semantische Analyse</span></a></li> </ul> </li> <li class="toclevel-2 tocsection-9"><a href="#Backend_(auch_„Synthesephase“)"><span class="tocnumber">4.2</span> <span class="toctext">Backend (auch „Synthesephase“)</span></a> <ul> <li class="toclevel-3 tocsection-10"><a href="#Zwischencodeerzeugung"><span class="tocnumber">4.2.1</span> <span class="toctext">Zwischencodeerzeugung</span></a></li> <li class="toclevel-3 tocsection-11"><a href="#Programmoptimierung"><span class="tocnumber">4.2.2</span> <span class="toctext">Programmoptimierung</span></a></li> <li class="toclevel-3 tocsection-12"><a href="#Codegenerierung"><span class="tocnumber">4.2.3</span> <span class="toctext">Codegenerierung</span></a></li> </ul> </li> </ul> </li> <li class="toclevel-1 tocsection-13"><a href="#Einordnung_verschiedener_Compiler-Arten"><span class="tocnumber">5</span> <span class="toctext">Einordnung verschiedener Compiler-Arten</span></a></li> <li class="toclevel-1 tocsection-14"><a href="#Sonderformen"><span class="tocnumber">6</span> <span class="toctext">Sonderformen</span></a></li> <li class="toclevel-1 tocsection-15"><a href="#Programmoptimierung_(ausführlich)"><span class="tocnumber">7</span> <span class="toctext">Programmoptimierung (ausführlich)</span></a> <ul> <li class="toclevel-2 tocsection-16"><a href="#Einsparung_von_Maschinenbefehlen"><span class="tocnumber">7.1</span> <span class="toctext">Einsparung von Maschinenbefehlen</span></a></li> <li class="toclevel-2 tocsection-17"><a href="#Statische_Formelauswertung_zur_Übersetzungszeit"><span class="tocnumber">7.2</span> <span class="toctext">Statische Formelauswertung zur Übersetzungszeit</span></a></li> <li class="toclevel-2 tocsection-18"><a href="#Eliminierung_von_totem_Programmcode"><span class="tocnumber">7.3</span> <span class="toctext">Eliminierung von totem Programmcode</span></a></li> <li class="toclevel-2 tocsection-19"><a href="#Erkennung_unbenutzter_Variablen"><span class="tocnumber">7.4</span> <span class="toctext">Erkennung unbenutzter Variablen</span></a></li> <li class="toclevel-2 tocsection-20"><a href="#Optimierung_von_Schleifen"><span class="tocnumber">7.5</span> <span class="toctext">Optimierung von Schleifen</span></a></li> <li class="toclevel-2 tocsection-21"><a href="#Einfügen_von_Unterprogrammen"><span class="tocnumber">7.6</span> <span class="toctext">Einfügen von Unterprogrammen</span></a></li> <li class="toclevel-2 tocsection-22"><a href="#Halten_von_Werten_in_Registern"><span class="tocnumber">7.7</span> <span class="toctext">Halten von Werten in Registern</span></a></li> <li class="toclevel-2 tocsection-23"><a href="#Verwendung_schnellerer_äquivalenter_Anweisungen"><span class="tocnumber">7.8</span> <span class="toctext">Verwendung schnellerer äquivalenter Anweisungen</span></a></li> <li class="toclevel-2 tocsection-24"><a href="#Weglassen_von_Laufzeitüberprüfungen"><span class="tocnumber">7.9</span> <span class="toctext">Weglassen von Laufzeitüberprüfungen</span></a></li> <li class="toclevel-2 tocsection-25"><a href="#Reduktion_von_Paging_zur_Laufzeit"><span class="tocnumber">7.10</span> <span class="toctext">Reduktion von Paging zur Laufzeit</span></a></li> <li class="toclevel-2 tocsection-26"><a href="#Vorziehen_bzw._Verzögern_von_Speicherzugriffen"><span class="tocnumber">7.11</span> <span class="toctext">Vorziehen bzw. Verzögern von Speicherzugriffen</span></a></li> </ul> </li> <li class="toclevel-1 tocsection-27"><a href="#Ein_Beispielcompiler"><span class="tocnumber">8</span> <span class="toctext">Ein Beispielcompiler</span></a> <ul> <li class="toclevel-2 tocsection-28"><a href="#Grammatiken"><span class="tocnumber">8.1</span> <span class="toctext">Grammatiken</span></a></li> <li class="toclevel-2 tocsection-29"><a href="#Ausgabe_des_Beispiels"><span class="tocnumber">8.2</span> <span class="toctext">Ausgabe des Beispiels</span></a></li> </ul> </li> <li class="toclevel-1 tocsection-30"><a href="#Literatur"><span class="tocnumber">9</span> <span class="toctext">Literatur</span></a></li> <li class="toclevel-1 tocsection-31"><a href="#Weblinks"><span class="tocnumber">10</span> <span class="toctext">Weblinks</span></a></li> <li class="toclevel-1 tocsection-32"><a href="#Einzelnachweise"><span class="tocnumber">11</span> <span class="toctext">Einzelnachweise</span></a></li> </ul> </div> <div class="mw-heading mw-heading2"><h2 id="Terminologie">Terminologie</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Compiler&veaction=edit&section=1" title="Abschnitt bearbeiten: Terminologie" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Compiler&action=edit&section=1" title="Quellcode des Abschnitts bearbeiten: Terminologie"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Ein Übersetzer ist ein Programm, das als Eingabe ein in einer Quellsprache formuliertes Programm akzeptiert und es in ein <a href="/wiki/Formale_Semantik" title="Formale Semantik">semantisch</a> <a href="/wiki/Programm%C3%A4quivalenz" class="mw-redirect" title="Programmäquivalenz">äquivalentes</a> Programm in einer Zielsprache übersetzt.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> Es wird also insbesondere gefordert, dass das erzeugte Programm die gleichen Ergebnisse wie das gegebene Programm liefert. Als Ausnahme wird oft die Quell-Sprache <a href="/wiki/Assemblersprache" title="Assemblersprache">Assembler</a> angesehen – ihr Übersetzer (in Maschinencode) heißt „Assembler“ und wird i. A. nicht als „Compiler“ bezeichnet. Die Aufgabe des Übersetzers umfasst ein großes Spektrum an Teilaufgaben, von der <a href="/wiki/Syntaxanalyse" class="mw-redirect" title="Syntaxanalyse">Syntaxanalyse</a> bis zur Zielcodeerzeugung. Eine wichtige Aufgabe besteht auch darin, Fehler im Quellprogramm zu erkennen und zu melden. </p><p>Das Wort „Compiler“ stammt vom Englischen „to compile“ (dt. zusammentragen, zusammenstellen) ab und heißt im eigentlichen Wortsinn also „Zusammentrager“. In den 1950er-Jahren war der Begriff noch nicht fest in der Computerwelt verankert.<sup id="cite_ref-Busch171_2-0" class="reference"><a href="#cite_note-Busch171-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> Ursprünglich bezeichnete Compiler ein Hilfsprogramm, das ein Gesamtprogramm aus einzelnen <a href="/wiki/Unterprogramm" title="Unterprogramm">Unterprogrammen</a> oder Formelauswertungen zusammentrug, um spezielle Aufgaben auszuführen. (Diese Aufgabe erfüllt heute der <a href="/wiki/Linker_(Computerprogramm)" title="Linker (Computerprogramm)">Linker</a>, der jedoch auch im Compiler integriert sein kann.) Die einzelnen Unterprogramme wurden noch „von Hand“ in <a href="/wiki/Maschinensprache" title="Maschinensprache">Maschinensprache</a> geschrieben. Ab 1954 kam der Begriff „algebraic compiler“ für ein Programm auf, das die Umsetzung von Formeln in Maschinencode selbständig übernahm. Das „algebraic“ fiel im Laufe der Zeit weg.<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> </p><p>Ende der 1950er-Jahre wurde der Begriff des Compilers im englischsprachigen Raum noch kontrovers diskutiert. So hielt das <a href="/wiki/Fortran" title="Fortran">Fortran</a>-Entwicklerteam noch jahrelang am Begriff „translator“ (deutsch „Übersetzer“) fest, um den Compiler zu bezeichnen. Diese Bezeichnung ist sogar im Namen der Programmiersprache Fortran selbst enthalten: Fortran ist zusammengesetzt aus <b>For</b>mula und <b>Tran</b>slation, heißt also in etwa Formel-Übersetzung. Erst 1964 setzte sich der Begriff Compiler auch im Zusammenhang mit Fortran gegenüber dem Begriff Translator durch. Nach Carsten Busch liegt eine „besondere Ironie der Geschichte darin“, dass der Begriff Compiler im Deutschen mit „Übersetzer“ übersetzt wird.<sup id="cite_ref-Busch171_2-1" class="reference"><a href="#cite_note-Busch171-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> Einige deutsche Publikationen verwenden jedoch auch den englischen Fachbegriff Compiler anstelle von Übersetzer.<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> </p><p>In einem engeren Sinne verwenden einige deutschsprachige Publikationen den Fachbegriff Compiler jedoch nur, wenn die Quellsprache eine höhere Programmiersprache ist als die Zielsprache.<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> Typische Anwendungsfälle sind die Übersetzung einer <a href="/wiki/H%C3%B6here_Programmiersprache" title="Höhere Programmiersprache">höheren Programmiersprache</a> in die Maschinensprache eines Computers, sowie die Übersetzung in <a href="/wiki/Bytecode" title="Bytecode">Bytecode</a> einer <a href="/wiki/Virtuelle_Maschine" title="Virtuelle Maschine">virtuellen Maschine</a>. Zielsprache von Compilern (in diesem Sinne) kann auch eine <a href="/wiki/Assemblersprache" title="Assemblersprache">Assemblersprache</a> sein. Ein Übersetzer zur Übertragung von Assembler-Quellprogrammen in Maschinensprache wird als <a href="/wiki/Assembler_(Informatik)" title="Assembler (Informatik)">Assembler</a> oder Assemblierer bezeichnet.<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading2"><h2 id="Geschichte">Geschichte</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Compiler&veaction=edit&section=2" title="Abschnitt bearbeiten: Geschichte" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Compiler&action=edit&section=2" title="Quellcode des Abschnitts bearbeiten: Geschichte"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Bereits für die erste entworfene höhere Programmiersprache, den <a href="/wiki/Plankalk%C3%BCl" title="Plankalkül">Plankalkül</a> von <a href="/wiki/Konrad_Zuse" title="Konrad Zuse">Konrad Zuse</a>, plante dieser – nach heutiger Terminologie – einen Compiler. Zuse bezeichnete ein einzelnes Programm als <i>Rechenplan</i> und hatte schon 1944 die Idee für ein sogenanntes <i>Planfertigungsgerät</i>, welches automatisch aus einem mathematisch formulierten Rechenplan einen gestanzten <a href="/wiki/Lochstreifen" title="Lochstreifen">Lochstreifen</a> mit entsprechendem <a href="/wiki/Maschinensprache#Maschinenprogramm" title="Maschinensprache">Maschinenplan</a> für den <a href="/wiki/Zuse_Z4" title="Zuse Z4">Zuse-Z4</a>-Computer erzeugen sollte.<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup> </p><p>Konkreter als die Idee von Zuse eines Planfertigungsgeräts war ein Konzept von <a href="/wiki/Heinz_Rutishauser" title="Heinz Rutishauser">Heinz Rutishauser</a><sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup> zur automatischen Rechenplanfertigung. In einem Vortrag vor der <i>Gesellschaft für Angewandte Mathematik und Mechanik (<a href="/wiki/GAMM" class="mw-redirect" title="GAMM">GAMM</a>)</i> wie auch 1951 in seiner Habilitationsschrift an der <a href="/wiki/ETH_Z%C3%BCrich" title="ETH Zürich">ETH Zürich</a> beschrieb er, welche zusätzlichen Programmierbefehle (Instruktionen) und Hardware-Ergänzungen an der damals an der ETHZ genutzten Z4 nötig seien, um den Rechner ebenfalls als Hilfsmittel zur automatischen Programmerstellung einzusetzen.<sup id="cite_ref-10" class="reference"><a href="#cite_note-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup> </p> <figure class="mw-default-size" typeof="mw:File/Thumb"><a href="/wiki/Datei:Grace_Hopper.jpg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/5/55/Grace_Hopper.jpg/170px-Grace_Hopper.jpg" decoding="async" width="170" height="199" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/5/55/Grace_Hopper.jpg/255px-Grace_Hopper.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/55/Grace_Hopper.jpg/340px-Grace_Hopper.jpg 2x" data-file-width="517" data-file-height="606" /></a><figcaption>Grace Hopper (1984)</figcaption></figure> <p>Ein früher Compiler wurde 1949 von der Mathematikerin <a href="/wiki/Grace_Hopper" title="Grace Hopper">Grace Hopper</a> konzipiert. Bis zu diesem Zeitpunkt mussten Programmierer direkt Maschinencode erstellen. (Der erste <a href="/wiki/Assembler_(Informatik)" title="Assembler (Informatik)">Assembler</a> wurde zwischen 1948 und 1950 von <a href="/wiki/Nathaniel_Rochester" title="Nathaniel Rochester">Nathaniel Rochester</a> für eine <a href="/wiki/IBM_701" title="IBM 701">IBM 701</a> geschrieben.) Um diesen Prozess zu vereinfachen, entwickelte Grace Hopper eine Methode, die es ermöglichte, Programme und ihre Unterprogramme in einer mehr an der menschlichen als der maschinellen Sprache orientierten Weise auszudrücken.<sup id="cite_ref-13" class="reference"><a href="#cite_note-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup> Am 3. Mai 1952 stellte Hopper den ersten Compiler <a href="/wiki/A-0" title="A-0">A-0</a> vor, der <a href="/wiki/Algorithmus" title="Algorithmus">Algorithmen</a> aus einem Katalog abrief, Code umschrieb, in passender Reihenfolge zusammenstellte, Speicherplatz reservierte und die Zuteilung von <a href="/wiki/Speicheradresse" title="Speicheradresse">Speicheradressen</a> organisierte.<sup id="cite_ref-14" class="reference"><a href="#cite_note-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup> Anfang 1955 präsentierte Hopper bereits einen Prototyp des Compilers <a href="/wiki/B-0" class="mw-redirect" title="B-0">B-0</a>, der nach englischen, französischen oder deutschen Anweisungen Programme erzeugte.<sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup> Hopper nannte ihren Vortrag zum ersten Compiler „The Education of a Computer“ („Die Erziehung eines Computers“). </p><p>Die Geschichte des Compilerbaus wurde von den jeweils aktuellen Programmiersprachen (vgl. <a href="/wiki/Zeittafel_der_Programmiersprachen" title="Zeittafel der Programmiersprachen">Zeittafel der Programmiersprachen</a>) und Hardwarearchitekturen geprägt. Weitere frühe Meilensteine sind 1957 der erste <a href="/wiki/Fortran" title="Fortran">Fortran</a>-Compiler und 1960 der erste <a href="/wiki/COBOL" title="COBOL">COBOL</a>-Compiler. Viele Architekturmerkmale heutiger Compiler wurden aber erst in den 1960er Jahren entwickelt. </p><p>Früher wurden teilweise auch Programme als Compiler bezeichnet, die Unterprogramme zusammenfügen.<sup id="cite_ref-BECC_16-0" class="reference"><a href="#cite_note-BECC-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup> Dies geht an der heutigen Kernaufgabe eines Compilers vorbei, weil Unterprogramme heutzutage mit anderen Mitteln eingefügt werden können: Entweder im <i>Quelltext</i> selbst, beispielsweise von einem <a href="/wiki/Pr%C3%A4prozessor" title="Präprozessor">Präprozessor</a> (siehe auch <a href="/wiki/Precompiler" title="Precompiler">Precompiler</a>) oder bei <i>übersetzten Komponenten</i> von einem eigenständigen <a href="/wiki/Linker_(Computerprogramm)" title="Linker (Computerprogramm)">Linker</a>. </p> <div class="mw-heading mw-heading2"><h2 id="Arbeitsweise">Arbeitsweise</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Compiler&veaction=edit&section=3" title="Abschnitt bearbeiten: Arbeitsweise" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Compiler&action=edit&section=3" title="Quellcode des Abschnitts bearbeiten: Arbeitsweise"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Die prinzipiellen Schritte bei der Übersetzung eines Quellcodes in einen Zielcode lauten: </p> <dl><dt>Syntaxprüfung</dt> <dd>Es wird geprüft, ob der Quellcode ein gültiges Programm darstellt, also der <a href="/wiki/Syntax" title="Syntax">Syntax</a> der Quellsprache entspricht. Festgestellte Fehler werden protokolliert. Ergebnis ist eine Zwischendarstellung des Quellcodes.</dd></dl> <dl><dt>Analyse und Optimierung</dt> <dd>Die Zwischendarstellung wird analysiert und optimiert. Dieser Schritt variiert im Umfang je nach Compiler und Benutzereinstellung stark. Er reicht von einfacheren <a href="/wiki/Effizienz_(Informatik)" title="Effizienz (Informatik)">Effizienzoptimierungen</a> bis hin zu <a href="/wiki/Programmanalyse" title="Programmanalyse">Programmanalyse</a>.</dd></dl> <dl><dt>Codeerzeugung</dt> <dd>Die optimierte Zwischendarstellung wird in entsprechende Befehle der Zielsprache übersetzt. Hierbei können weitere, zielsprachenspezifische Optimierungen vorgenommen werden.</dd> <dd><b>Beachte:</b> Moderne Compiler führen mittlerweile (meist) keine Codegenerierung mehr selbst durch. <ul><li><b><a href="/wiki/C%2B%2B" title="C++">C++</a> bei eingeschalteter globaler Optimierung:</b> Die Codegenerierung erfolgt beim Linken.</li> <li><b><a href="/wiki/C-Sharp" title="C-Sharp">C#</a>:</b> Die Codegenerierung erfolgt aus, während der Kompilierung erzeugtem, <a href="/wiki/Common_Intermediate_Language" title="Common Intermediate Language">Common-Intermediate-Language</a>-Code während der Laufzeit durch den JIT- oder <a href="/w/index.php?title=NGEN&action=edit&redlink=1" class="new" title="NGEN (Seite nicht vorhanden)">NGEN</a>-Compiler der .NET-Umgebung.</li> <li>gleiches gilt für andere Sprachen, die die <a href="/wiki/Common_Language_Infrastructure" title="Common Language Infrastructure">Common Language Infrastructure</a> nutzen wie <a href="/wiki/F-Sharp" title="F-Sharp">F#</a> und <a href="/wiki/Visual_Basic_.NET" title="Visual Basic .NET">VB.NET</a>, siehe <a href="/wiki/Liste_von_.NET-Sprachen" title="Liste von .NET-Sprachen">Liste von .NET-Sprachen</a>.</li> <li><b><a href="/wiki/Java_(Programmiersprache)" title="Java (Programmiersprache)">Java</a>:</b> Die Codegenerierung erfolgt aus, während der Kompilierung erzeugtem, Java-Byte-Code während der Laufzeit durch den Java-JIT-Compiler.</li></ul></dd> <dd>Codegenerierung während der Runtime ermöglicht: <ul><li>modulübergreifende Optimierungen,</li> <li>exakte Anpassungen an die Zielplattform (Befehlssatz, Anpassung an die Fähigkeiten der CPU),</li> <li>Nutzung von Profiling-Informationen.</li></ul></dd></dl> <div class="mw-heading mw-heading2"><h2 id="Aufbau_eines_Compilers">Aufbau eines Compilers</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Compiler&veaction=edit&section=4" title="Abschnitt bearbeiten: Aufbau eines Compilers" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Compiler&action=edit&section=4" title="Quellcode des Abschnitts bearbeiten: Aufbau eines Compilers"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Der <a href="/wiki/Compilerbau" title="Compilerbau">Compilerbau</a>, also die Programmierung eines Compilers, ist eine eigenständige Disziplin innerhalb der <a href="/wiki/Informatik" title="Informatik">Informatik</a>. </p><p>Moderne Compiler werden in verschiedene Phasen gegliedert, die jeweils verschiedene Teilaufgaben des Compilers übernehmen. Einige dieser Phasen können als eigenständige Programme bzw. <a href="/wiki/Softwarekomponente" title="Softwarekomponente">Softwarekomponenten</a> realisiert werden, z. B. <a href="/wiki/Precompiler" title="Precompiler">Precompiler</a> oder <a href="/wiki/Pr%C3%A4prozessor" title="Präprozessor">Präprozessor</a>. Sie werden <a href="/wiki/Reihenfolge" title="Reihenfolge">sequentiell</a> ausgeführt. Im Wesentlichen lassen sich zwei Phasen unterscheiden: das Frontend (auch <i>Analysephase</i>), das den Quelltext analysiert und daraus einen <a href="/wiki/Attribut_(Programmierung)" title="Attribut (Programmierung)">attributierten</a> <a href="/wiki/Syntaxbaum" title="Syntaxbaum">Syntaxbaum</a> erzeugt, sowie das Backend (auch <i>Synthesephase</i>), das daraus den Programmcode der Zielsprache erzeugt. </p> <div class="mw-heading mw-heading3"><h3 id="Frontend_(auch_„Analysephase“)"><span id="Frontend_.28auch_.E2.80.9EAnalysephase.E2.80.9C.29"></span><span id="Frontend"></span> Frontend (auch „Analysephase“)</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Compiler&veaction=edit&section=5" title="Abschnitt bearbeiten: Frontend (auch „Analysephase“)" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Compiler&action=edit&section=5" title="Quellcode des Abschnitts bearbeiten: Frontend (auch „Analysephase“)"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Im Compiler-Frontend wird der Code analysiert, strukturiert und auf Fehler geprüft. Es ist selbst wiederum in Phasen gegliedert. Sprachen wie modernes C++ erlauben aufgrund von Mehrdeutigkeiten in ihrer Grammatik keine Aufteilung der Syntaxanalyse in lexikalische Analyse, syntaktische Analyse und semantische Analyse. Ihre Compiler sind entsprechend komplex. </p> <div class="mw-heading mw-heading4"><h4 id="Lexikalische_Analyse">Lexikalische Analyse</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Compiler&veaction=edit&section=6" title="Abschnitt bearbeiten: Lexikalische Analyse" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Compiler&action=edit&section=6" title="Quellcode des Abschnitts bearbeiten: Lexikalische Analyse"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="hauptartikel" role="navigation"><span class="hauptartikel-pfeil" title="siehe" aria-hidden="true" role="presentation">→ </span><i><span class="hauptartikel-text">Hauptartikel</span>: <a href="/wiki/Lexikalische_Analyse" title="Lexikalische Analyse">Lexikalische Analyse</a></i></div> <p>Die lexikalische Analyse zerteilt den eingelesenen Quelltext in lexikalische Einheiten (<i><a href="/wiki/Token_(%C3%9Cbersetzerbau)" title="Token (Übersetzerbau)">Tokens</a></i>) verschiedener Typen, zum Beispiel <a href="/wiki/Schl%C3%BCsselwort_(Programmierung)" title="Schlüsselwort (Programmierung)">Schlüsselwörter</a>, <a href="/wiki/Bezeichner" title="Bezeichner">Bezeichner</a>, <a href="/wiki/Zahl" title="Zahl">Zahlen</a>, <a href="/wiki/Zeichenkette" title="Zeichenkette">Zeichenketten</a> oder <a href="/wiki/Operator_(Mathematik)" title="Operator (Mathematik)">Operatoren</a>. Dieser Teil des Compilers heißt Tokenizer, Scanner oder Lexer. </p><p>Ein Scanner benutzt gelegentlich einen separaten <a href="/wiki/Screener_(Informatik)" title="Screener (Informatik)">Screener</a>, um Whitespace (<a href="/wiki/Leerraum" title="Leerraum">Leerraum</a>, also Leerzeichen, Tabulatorzeichen, Zeilenenden usw.) und <a href="/wiki/Kommentar_(Programmierung)" title="Kommentar (Programmierung)">Kommentare</a> zu überspringen. </p><p>Eine weitere Funktion der lexikalischen Analyse ist es, erkannte Tokens mit ihrer Position (z. B. Zeilennummer) im Quelltext zu assoziieren. Werden in der weiteren Analysephase, deren Grundlage die Tokens sind, Fehler im Quelltext gefunden (z. B. syntaktischer oder semantische Art), können die erzeugten Fehlermeldungen mit einem Hinweis auf den Ort des Fehlers versehen werden. </p><p><b>Lexikalische Fehler</b> sind Zeichen oder Zeichenfolgen, die keinem Token zugeordnet werden können. Zum Beispiel erlauben die meisten Programmiersprachen keine Bezeichner, die mit Ziffern beginnen (z. B. „3foo“). </p> <div class="mw-heading mw-heading4"><h4 id="Syntaktische_Analyse">Syntaktische Analyse</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Compiler&veaction=edit&section=7" title="Abschnitt bearbeiten: Syntaktische Analyse" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Compiler&action=edit&section=7" title="Quellcode des Abschnitts bearbeiten: Syntaktische Analyse"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="hauptartikel" role="navigation"><span class="hauptartikel-pfeil" title="siehe" aria-hidden="true" role="presentation">→ </span><i><span class="hauptartikel-text">Hauptartikel</span>: <a href="/wiki/Parser" title="Parser">Parser</a></i></div> <p>Die syntaktische Analyse überprüft, ob der eingelesene Quellcode in einer korrekten Struktur der zu übersetzenden Quellsprache vorliegt, das heißt der <a href="/wiki/Kontextfreie_Sprache" title="Kontextfreie Sprache">kontextfreien</a> <a href="/wiki/Syntax" title="Syntax">Syntax</a> (Grammatik) der Quellsprache entspricht. Dabei wird die Eingabe in einen <a href="/wiki/Syntaxbaum" title="Syntaxbaum">Syntaxbaum</a> umgewandelt. Der syntaktische Analysierer wird auch als Parser bezeichnet. Falls der Quellcode nicht zur Grammatik der Quellsprache passt, gibt der Parser einen <a href="/wiki/Syntaxfehler" title="Syntaxfehler">Syntaxfehler</a> aus. Der so erzeugte Syntaxbaum ist für die nächste Phase (semantische Analyse) mit den „Inhalten“ der Knoten <a href="/wiki/Annotation" title="Annotation">annotiert</a>; d. h. z. B., Variablenbezeichner und Zahlen werden, neben der Information, dass es sich um solche handelt, weitergegeben. Die syntaktische Analyse prüft beispielsweise, ob die Klammerung stimmt, also zu jeder öffnenden Klammer eine schließende desselben Typs folgt, sowie ohne Klammer-Verschränkung. Auch geben die Schlüsselworte bestimmte Strukturen vor. </p> <div class="mw-heading mw-heading4"><h4 id="Semantische_Analyse">Semantische Analyse</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Compiler&veaction=edit&section=8" title="Abschnitt bearbeiten: Semantische Analyse" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Compiler&action=edit&section=8" title="Quellcode des Abschnitts bearbeiten: Semantische Analyse"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Die semantische Analyse überprüft die statische <a href="/wiki/Semantik" title="Semantik">Semantik</a>, also über die syntaktische Analyse hinausgehende Bedingungen an das Programm. Zum Beispiel muss eine Variable in der Regel deklariert worden sein, bevor sie verwendet wird, und Zuweisungen müssen mit kompatiblen (verträglichen) <a href="/wiki/Datentyp" title="Datentyp">Datentypen</a> erfolgen. Dies kann mit Hilfe von <a href="/wiki/Attributgrammatik" title="Attributgrammatik">Attributgrammatiken</a> realisiert werden. Dabei werden die Knoten des vom Parser generierten Syntaxbaums mit Attributen versehen, die Informationen enthalten. So kann zum Beispiel eine Liste aller deklarierten Variablen erstellt werden. Die Ausgabe der semantischen Analyse nennt man dann dekorierten oder attributierten Syntaxbaum. </p> <div class="mw-heading mw-heading3"><h3 id="Backend_(auch_„Synthesephase“)"><span id="Backend_.28auch_.E2.80.9ESynthesephase.E2.80.9C.29"></span><span id="Backend"></span>Backend (auch „Synthesephase“)</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Compiler&veaction=edit&section=9" title="Abschnitt bearbeiten: Backend (auch „Synthesephase“)" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Compiler&action=edit&section=9" title="Quellcode des Abschnitts bearbeiten: Backend (auch „Synthesephase“)"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Das Compiler-Backend erzeugt den Programmcode der Zielsprache aus dem <a href="/wiki/Attribut_(Programmierung)" title="Attribut (Programmierung)">attributierten</a> Syntaxbaum, welcher vom Frontend erstellt wurde. </p> <div class="mw-heading mw-heading4"><h4 id="Zwischencodeerzeugung">Zwischencodeerzeugung</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Compiler&veaction=edit&section=10" title="Abschnitt bearbeiten: Zwischencodeerzeugung" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Compiler&action=edit&section=10" title="Quellcode des Abschnitts bearbeiten: Zwischencodeerzeugung"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Viele moderne Compiler erzeugen aus dem Syntaxbaum einen <a href="/wiki/Zwischencode" title="Zwischencode">Zwischencode</a>, der schon relativ maschinennah sein kann und führen auf diesem Zwischencode zum Beispiel Programmoptimierungen durch. Das bietet sich besonders bei Compilern an, die mehrere Quellsprachen oder verschiedene <a href="/wiki/Plattform_(Computer)" title="Plattform (Computer)">Zielplattformen</a> unterstützen. Hier kann der Zwischencode auch ein Austauschformat sein. </p> <div class="mw-heading mw-heading4"><h4 id="Programmoptimierung">Programmoptimierung</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Compiler&veaction=edit&section=11" title="Abschnitt bearbeiten: Programmoptimierung" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Compiler&action=edit&section=11" title="Quellcode des Abschnitts bearbeiten: Programmoptimierung"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Der Zwischencode ist Basis vieler Programmoptimierungen. Siehe <a href="#Programmoptimierung_(ausführlich)">Programmoptimierung</a>. </p> <div class="mw-heading mw-heading4"><h4 id="Codegenerierung">Codegenerierung</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Compiler&veaction=edit&section=12" title="Abschnitt bearbeiten: Codegenerierung" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Compiler&action=edit&section=12" title="Quellcode des Abschnitts bearbeiten: Codegenerierung"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="hauptartikel" role="navigation"><span class="hauptartikel-pfeil" title="siehe" aria-hidden="true" role="presentation">→ </span><i><span class="hauptartikel-text">Hauptartikel</span>: <a href="/wiki/Codegenerator" title="Codegenerator">Codegenerator</a></i></div> <p>Bei der Codegenerierung wird der Programmcode der Zielsprache entweder direkt aus dem <a href="/wiki/Attribut_(Programmierung)" title="Attribut (Programmierung)">attributierten</a> <a href="/wiki/Syntaxbaum" title="Syntaxbaum">Syntaxbaum</a> oder aus dem Zwischencode erzeugt. Falls die Zielsprache eine Maschinensprache ist, kann das Ergebnis direkt ein ausführbares Programm sein oder eine sogenannte <a href="/wiki/Objektcode" title="Objektcode">Objektcode</a>-Datei, die durch das <a href="/wiki/Linker_(Computerprogramm)" title="Linker (Computerprogramm)">Linken</a> mit der <a href="/wiki/Laufzeitbibliothek" title="Laufzeitbibliothek">Laufzeitbibliothek</a> und evtl. weiteren Objektcodedateien zu einer <a href="/wiki/Programmbibliothek" title="Programmbibliothek">Bibliothek</a> oder einem <a href="/wiki/Ausf%C3%BChrbare_Datei" title="Ausführbare Datei">ausführbaren Programm</a> führt. Dies alles wird vom Codegenerator ausgeführt, der Teil des Compilersystems ist, manchmal als Programmteil des Compilers, manchmal als eigenständiges Modul. </p> <div class="mw-heading mw-heading2"><h2 id="Einordnung_verschiedener_Compiler-Arten">Einordnung verschiedener Compiler-Arten</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Compiler&veaction=edit&section=13" title="Abschnitt bearbeiten: Einordnung verschiedener Compiler-Arten" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Compiler&action=edit&section=13" title="Quellcode des Abschnitts bearbeiten: Einordnung verschiedener Compiler-Arten"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <dl><dt>Native Compiler</dt> <dd>Compiler, der den Zielcode für die <a href="/wiki/Plattform_(Computer)" title="Plattform (Computer)">Plattform</a> erzeugt, auf der er selbst läuft. Der Code ist plattformspezifisch.</dd> <dt>Cross-Compiler</dt></dl> <div class="hauptartikel" role="navigation"><span class="hauptartikel-pfeil" title="siehe" aria-hidden="true" role="presentation">→ </span><i><span class="hauptartikel-text">Hauptartikel</span>: <a href="/wiki/Cross-Compiler" title="Cross-Compiler">Cross-Compiler</a></i></div> <dl><dd>Compiler, der auf einer Plattform ausgeführt wird und Zielcode für eine andere Plattform, zum Beispiel ein anderes <a href="/wiki/Betriebssystem" title="Betriebssystem">Betriebssystem</a> oder eine andere <a href="/wiki/Prozessorarchitektur" title="Prozessorarchitektur">Prozessorarchitektur</a>, erzeugt.</dd> <dd>Eine typische Anwendung ist die Erstellung von Programmen für ein <a href="/wiki/Eingebettetes_System" title="Eingebettetes System">eingebettetes System</a>, das selbst keine oder keine guten Werkzeuge zur Softwareerstellung enthält, sowie die Erstellung oder Portierung eines Betriebssystems auf eine neue Plattform.</dd> <dt><span id="Single-Pass-Compiler"></span>Single-pass-Compiler</dt> <dd>Compiler, der in einem einzigen Durchlauf aus dem Quellcode den Zielcode erzeugt (im Gegensatz zum Multi-pass-Compiler); der Compiler liest also den Quelltext von vorne nach hinten nur ein Mal und erzeugt zugleich das Ergebnisprogramm. Üblicherweise ist ein derartiger Compiler sehr schnell, aber kann nur einfache Optimierungen durchführen. Nur für bestimmte Programmiersprachen, zum Beispiel <a href="/wiki/Pascal_(Programmiersprache)" title="Pascal (Programmiersprache)">Pascal</a>, <a href="/wiki/C_(Programmiersprache)" title="C (Programmiersprache)">C</a> und <a href="/wiki/C%2B%2B" title="C++">C++</a>, kann ein Single-Pass-Compiler erstellt werden, denn dazu darf die Programmiersprache keine <a href="/wiki/Vorw%C3%A4rtsbezug" class="mw-redirect" title="Vorwärtsbezug">Vorwärtsbezüge</a> enthalten (es darf nichts verwendet werden, was nicht bereits „weiter oben“ im Quelltext deklariert wurde).</dd> <dt>Multi-pass-Compiler</dt> <dd>Bei diesem Compilertyp wird der Quellcode in mehreren Schritten in den Zielcode übersetzt (ursprünglich: der Quellcode wird mehrmals eingelesen bzw. mehrfach „von vorne nach hinten“ komplett durchgearbeitet). In den Anfangszeiten des Compilerbaus wurde der Übersetzungsprozess hauptsächlich deshalb in mehrere Durchläufe zerlegt, weil die Kapazität der Computer oft nicht ausreichte, um den vollständigen Compiler und das zu übersetzende Programm gleichzeitig im Hauptspeicher zu halten. Heutzutage dient ein Multi-pass-Compiler vor allem dazu, Vorwärtsreferenzen (<a href="/wiki/Deklaration_(Programmierung)" title="Deklaration (Programmierung)">Deklaration</a> eines Bezeichners „weiter unten im Quelltext“ als dessen erste Verwendung) aufzulösen und aufwändige Optimierungen durchzuführen.</dd></dl> <div class="mw-heading mw-heading2"><h2 id="Sonderformen">Sonderformen</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Compiler&veaction=edit&section=14" title="Abschnitt bearbeiten: Sonderformen" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Compiler&action=edit&section=14" title="Quellcode des Abschnitts bearbeiten: Sonderformen"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li>Bei einem <b>Transcompiler</b> (auch als <b>Transpiler</b> oder <i>Quer-Übersetzer</i> bezeichnet) handelt es sich um einen speziellen Compiler, der <a href="/wiki/Quelltext" title="Quelltext">Quellcode</a> einer <a href="/wiki/Programmiersprache" title="Programmiersprache">Programmiersprache</a> in den Quellcode einer anderen Programmiersprache übersetzt, zum Beispiel von <a href="/wiki/Pascal_(Programmiersprache)" title="Pascal (Programmiersprache)">Pascal</a> in <a href="/wiki/C_(Programmiersprache)" title="C (Programmiersprache)">C</a>.<sup id="cite_ref-17" class="reference"><a href="#cite_note-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup> Man nennt diesen Vorgang „Code-Transformation“ oder „übersetzen“. Da jedoch viele Programmiersprachen besondere Eigenschaften und Leistungsmerkmale besitzen, kann es, wenn diese nicht vom Transcompiler berücksichtigt werden, zu Effizienzverlusten kommen.<sup id="cite_ref-18" class="reference"><a href="#cite_note-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup> Da Programmiersprachen meist unterschiedlichen <a href="/wiki/Programmierparadigma" title="Programmierparadigma">Programmierparadigmen</a> folgen, ist der neu generierte Quelltext oft nur schwer für Entwickler lesbar. Manchmal ist auch eine manuelle Nachbearbeitung des Codes nötig, da die automatische Übersetzung nicht in allen Fällen reibungsfrei funktioniert. Außerdem gibt es in vielen modernen Programmiersprachen umfangreiche Unterprogrammbibliotheken. Das Umsetzen von Bibliotheksaufrufen erschwert den Übersetzungsvorgang zusätzlich.</li> <li>Compiler-Compiler und <a href="/wiki/Compilergenerator" title="Compilergenerator">Compilergeneratoren</a> sind Hilfsprogramme zur automatischen Generierung von Compilerteilen oder vollständigen Compilern. <i>Siehe auch: <a href="/wiki/ANTLR" title="ANTLR">ANTLR</a>, <a href="/wiki/Coco/R" title="Coco/R">Coco/R</a>, <a href="/wiki/JavaCC" title="JavaCC">JavaCC</a>, <a href="/wiki/Lex_(Informatik)" title="Lex (Informatik)">Lex</a>, <a href="/wiki/Yacc" title="Yacc">Yacc</a></i></li> <li><b>Just-in-time-Compiler</b> <i>(oder <a href="/wiki/Just-in-time-Kompilierung" title="Just-in-time-Kompilierung">JIT-Compiler</a>)</i> übersetzen Quellcode oder <a href="/wiki/Zwischencode" title="Zwischencode">Zwischencode</a> erst bei der Ausführung des Programms in Maschinencode. Dabei werden Programmteile erst übersetzt, wenn diese erstmals oder mehrmals ausgeführt werden. Meist ist der Grad der Optimierung abhängig von der Benutzungshäufigkeit der entsprechenden Funktion.</li> <li>Beim <b>Compreter</b> wird der Programm-Quellcode zunächst in einen Zwischencode übersetzt, der dann zur Laufzeit interpretiert wird. Compreter sollten die Vorteile des Compilers mit den Vorteilen des <a href="/wiki/Interpreter" title="Interpreter">Interpreters</a> verbinden. Effektiv sind viele heutige Interpreter zur Verringerung der Ausführungszeit intern als Compreter implementiert, die den Quellcode zur Laufzeit übersetzen, bevor das Programm ausgeführt wird. Auch ein Bytecode-Interpreter ist ein Compreter, z. B. die <a href="/wiki/Virtuelle_Maschine" title="Virtuelle Maschine">virtuellen Maschinen</a> von Java bis Version 1.2.</li></ul> <div class="mw-heading mw-heading2"><h2 id="Programmoptimierung_(ausführlich)"><span id="Programmoptimierung_.28ausf.C3.BChrlich.29"></span>Programmoptimierung (ausführlich)</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Compiler&veaction=edit&section=15" title="Abschnitt bearbeiten: Programmoptimierung (ausführlich)" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Compiler&action=edit&section=15" title="Quellcode des Abschnitts bearbeiten: Programmoptimierung (ausführlich)"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Viele Optimierungen, die früher Aufgabe des Compilers waren, werden mittlerweile innerhalb der CPU während der Codeabarbeitung vorgenommen. Maschinencode ist gut, wenn er kurze kritische Pfade und wenig Überraschungen durch falsch vorhergesagte Sprünge aufweist, Daten rechtzeitig aus dem Speicher anfordert und alle Ausführungseinheiten der CPU gleichmäßig auslastet. </p> <figure class="mw-default-size" typeof="mw:File/Thumb"><a href="/wiki/Datei:Haswell_Apfelm%C3%A4nnchen_per_Core.png" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/a/a7/Haswell_Apfelm%C3%A4nnchen_per_Core.png/620px-Haswell_Apfelm%C3%A4nnchen_per_Core.png" decoding="async" width="620" height="445" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/a/a7/Haswell_Apfelm%C3%A4nnchen_per_Core.png/930px-Haswell_Apfelm%C3%A4nnchen_per_Core.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/a/a7/Haswell_Apfelm%C3%A4nnchen_per_Core.png/1240px-Haswell_Apfelm%C3%A4nnchen_per_Core.png 2x" data-file-width="3129" data-file-height="2245" /></a><figcaption>Parallelisierte Berechnung der <a href="/wiki/Mandelbrotmenge" class="mw-redirect" title="Mandelbrotmenge">Mandelbrotmenge</a> auf einer <a href="/wiki/Intel-Haswell-Mikroarchitektur" title="Intel-Haswell-Mikroarchitektur">Haswell</a> i7-CPU (2014). Die Grafik zeigt die <b>gleichzeitig</b> auf <b>einem</b> Kern stattfindenden Berechnungen (Datentyp: Gleitkomma, einfache Genauigkeit), das sind zwischen 64 und 128 Berechnungen in 8 bis 16 Befehlen pro Kern, aufgeteilt auf 2 Threads. Auf einem Haswell Core i7-5960X (8 Kerne) findet damit bis zu 1024 parallele Berechnungen (96 Mrd. Iterationen/sec) statt, auf einem <a href="/wiki/Intel_Xeon_(Haswell)" title="Intel Xeon (Haswell)">Haswell Xeon</a> E7-8890 V3 bis zu 2304 (180 Mrd. Iterationen/sec pro Sockel). Die Aufgabe moderner Compiler ist es, Code so zu optimieren, um diese Verschachtelung von Befehlen zu ermöglichen. Dies ist eine <b>grundsätzlich andere</b> Aufgabe als Compiler in den späten 1980er Jahren hatten.</figcaption></figure> <p>Zur Steuerung des Übersetzens kann der Quelltext neben den Anweisungen der Programmiersprache zusätzliche spezielle <a href="/wiki/Compiler-Anweisung" title="Compiler-Anweisung">Compiler-Anweisungen</a> enthalten. </p><p>Üblicherweise bietet ein Compiler Optionen für verschiedene Optimierungen mit dem Ziel, die <a href="/wiki/Laufzeit_(Informatik)" title="Laufzeit (Informatik)">Laufzeit</a> des Zielprogramms zu verbessern oder dessen <a href="/wiki/Speicherkapazit%C3%A4t" title="Speicherkapazität">Speicherplatzbedarf</a> zu minimieren. Die Optimierungen erfolgen teilweise in Abhängigkeit von den Eigenschaften der <a href="/wiki/Hardware" title="Hardware">Hardware</a>, zum Beispiel wie viele und welche <a href="/wiki/Register_(Prozessor)" title="Register (Prozessor)">Register</a> der <a href="/wiki/Prozessor" title="Prozessor">Prozessor</a> des Computers zur Verfügung stellt. Es ist möglich, dass ein Programm nach einer Optimierung langsamer ausgeführt wird, als das ohne die Optimierung der Fall gewesen wäre. Dies kann zum Beispiel eintreten, wenn eine Optimierung für ein Programmkonstrukt längeren Code erzeugt, der zwar an sich schneller ausgeführt werden würde, aber mehr Zeit benötigt, um erst einmal in den <a href="/wiki/Cache" title="Cache">Cache</a> geladen zu werden. Er ist damit erst bei häufigerer Benutzung vorteilhaft. </p><p>Einige Optimierungen führen dazu, dass der Compiler Zielsprachenkonstrukte erzeugt, für die es gar keine direkten Entsprechungen in der Quellsprache gibt. Ein Nachteil solcher Optimierungen ist, dass es dann kaum noch möglich ist, den Programmablauf mit einem interaktiven <a href="/wiki/Debugger" title="Debugger">Debugger</a> in der Quellsprache zu verfolgen. </p><p>Optimierungen können sehr aufwendig sein. Vielfach muss vor allem in modernen <a href="/wiki/Just-in-time-Kompilierung" title="Just-in-time-Kompilierung">JIT-Compilern</a> daher abgewogen werden, ob es sich lohnt, einen Programmteil zu optimieren. Bei <a href="/wiki/Ahead-of-time-Compiler" title="Ahead-of-time-Compiler">Ahead-of-time-Compilern</a> werden bei der abschließenden Übersetzung alle sinnvollen Optimierungen verwendet, häufig jedoch nicht während der Software-Entwicklung (reduziert den Kompilier-Zeitbedarf). Für nichtautomatische Optimierungen seitens des Programmierers können Tests und Anwendungsszenarien durchgespielt werden (s. <a href="/wiki/Profiler_(Programmierung)" title="Profiler (Programmierung)">Profiler</a>), um herauszufinden, wo sich komplexe Optimierungen lohnen. </p><p>Im Folgenden werden einige <b>Optimierungsmöglichkeiten eines Compilers</b> betrachtet. Das größte Optimierungspotenzial besteht allerdings oft in der Veränderung des Quellprogramms selbst, zum Beispiel darin, einen <a href="/wiki/Algorithmus" title="Algorithmus">Algorithmus</a> durch einen effizienteren zu ersetzen. Dieser Vorgang kann meistens nicht automatisiert werden, sondern muss durch den <a href="/wiki/Programmierer" class="mw-redirect" title="Programmierer">Programmierer</a> erfolgen. Einfachere Optimierungen können dagegen an den Compiler delegiert werden, um den Quelltext lesbar zu halten. </p> <div class="mw-heading mw-heading3"><h3 id="Einsparung_von_Maschinenbefehlen">Einsparung von Maschinenbefehlen</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Compiler&veaction=edit&section=16" title="Abschnitt bearbeiten: Einsparung von Maschinenbefehlen" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Compiler&action=edit&section=16" title="Quellcode des Abschnitts bearbeiten: Einsparung von Maschinenbefehlen"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>In vielen höheren Programmiersprachen benötigt man beispielsweise eine Hilfsvariable, um den Inhalt zweier Variablen zu vertauschen: </p> <table class="wikitable" style="text-align:left; border:0;"> <caption>Einsparung von Maschinenbefehlen (MB) </caption> <tbody><tr> <th class="hintergrundfarbe6" rowspan="2">Quellcode</th> <th colspan="2">Maschinenbefehle </th></tr> <tr> <th class="hintergrundfarbe8">ohne Optimierung </th> <th class="hintergrundfarbe7">mit Optimierung </th></tr> <tr> <td><code>hilf := a</code> </td> <td>a → Register 1<br />Register 1 → hilf </td> <td>a → Register 1 </td></tr> <tr> <td><code>a := b</code> </td> <td>b → Register 1<br />Register 1 → a </td> <td>b → Register 2<br />Register 2 → a </td></tr> <tr> <td><code>b := hilf</code> </td> <td>hilf → Register 1<br />Register 1 → b </td> <td>Register 1 → b </td></tr> <tr> <td colspan="3" style="border:0; background:white"> </td></tr> <tr> <td colspan="3"><b>Benötigte ...</b> </td></tr> <tr> <td>Variablen</td> <td align="center">3</td> <td align="center">2 </td></tr> <tr> <td>Register</td> <td align="center">1</td> <td align="center">2 </td></tr> <tr> <td>Operationen</td> <td align="center">6</td> <td align="center">4 </td></tr></tbody></table> <p>Mit der Optimierung werden statt 6 nur noch 4 Assemblerbefehle benötigt, außerdem wird der Speicherplatz für die Hilfsvariable <code>hilf</code> nicht gebraucht. D. h., diese Vertauschung wird schneller ausgeführt und benötigt weniger <a href="/wiki/Hauptspeicher" class="mw-redirect" title="Hauptspeicher">Hauptspeicher</a>. Dies gilt jedoch nur, wenn ausreichend <a href="/wiki/Register_(Prozessor)" title="Register (Prozessor)">Register</a> im <a href="/wiki/Prozessor" title="Prozessor">Prozessor</a> zur Verfügung stehen. Die Speicherung von Daten in Registern statt im Hauptspeicher ist eine häufig angewendete Möglichkeit der Optimierung. </p><p>Die oben als optimiert gezeigte Befehlsfolge hat noch eine weitere Eigenschaft, die bei modernen CPUs mit mehreren Verarbeitungs-Pipelines einen Vorteil bedeuten kann: Die beiden Lesebefehle und die beiden Schreibbefehle können problemlos parallel verarbeitet werden, sie sind nicht vom Resultat des jeweils anderen abhängig. Lediglich der erste Schreibbefehl muss auf jeden Fall abwarten, bis der letzte Lesebefehl ausgeführt wurde. Tiefer gehende Optimierungsverfahren fügen deshalb unter Umständen zwischen <i>b → Register 2</i> und <i>Register 2 → a</i> noch Maschinenbefehle ein, die zu einer ganz anderen hochsprachlichen Befehlszeile gehören. </p> <div class="mw-heading mw-heading3"><h3 id="Statische_Formelauswertung_zur_Übersetzungszeit"><span id="Statische_Formelauswertung_zur_.C3.9Cbersetzungszeit"></span>Statische Formelauswertung zur Übersetzungszeit</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Compiler&veaction=edit&section=17" title="Abschnitt bearbeiten: Statische Formelauswertung zur Übersetzungszeit" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Compiler&action=edit&section=17" title="Quellcode des Abschnitts bearbeiten: Statische Formelauswertung zur Übersetzungszeit"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Die Berechnung des Kreisumfangs mittels </p> <div style="margin-left:2em" class="mw-highlight mw-highlight-lang-text mw-content-ltr" dir="ltr"><pre><span></span>pi = 3.14159 u = 2 * pi * r </pre></div> <p>kann ein Compiler bereits zur <a href="/wiki/%C3%9Cbersetzungszeit" title="Übersetzungszeit">Übersetzungszeit</a> zu <code style="white-space:nowrap;" class="mw-highlight mw-highlight-lang-text mw-content-ltr" dir="ltr">u = 6.28318 * r</code> auswerten. Diese <a href="/wiki/Formel" title="Formel">Formelauswertung</a> spart die Multiplikation <code style="white-space:nowrap" class="mw-highlight mw-highlight-lang-text mw-content-ltr" dir="ltr">2 * pi</code> zur Laufzeit des erzeugten Programms. Diese Vorgehensweise wird als Konstantenfaltung (englisch „constant folding“) bezeichnet. </p> <div class="mw-heading mw-heading3"><h3 id="Eliminierung_von_totem_Programmcode">Eliminierung von totem Programmcode</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Compiler&veaction=edit&section=18" title="Abschnitt bearbeiten: Eliminierung von totem Programmcode" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Compiler&action=edit&section=18" title="Quellcode des Abschnitts bearbeiten: Eliminierung von totem Programmcode"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="hauptartikel" role="navigation"><span class="hauptartikel-pfeil" title="siehe" aria-hidden="true" role="presentation">→ </span><i><span class="hauptartikel-text">Hauptartikel</span>: <a href="/wiki/Dead_code_elimination" class="mw-redirect" title="Dead code elimination">Dead code elimination</a></i></div> <p>Wenn der Compiler erkennen kann, dass ein Teil des Programmes niemals durchlaufen wird, dann kann er diesen Teil bei der Übersetzung weglassen. </p><p><i>Beispiel:</i> </p> <div style="margin-left:2em" class="mw-highlight mw-highlight-lang-qbasic mw-content-ltr" dir="ltr"><pre><span></span><span class="nl">100</span><span class="w"> </span><span class="vg">goto</span><span class="w"> </span><span class="il">900</span> <span class="nl">200</span><span class="w"> </span><span class="vg">k</span><span class="o">=</span><span class="il">3</span> <span class="nl">900</span><span class="w"> </span><span class="vg">i</span><span class="o">=</span><span class="il">7</span> <span class="o">...</span><span class="w"> </span><span class="o">...</span> </pre></div> <p>Wenn in diesem Programm niemals ein <code>GOTO</code> auf die Sprungmarke <code>200</code> erfolgt, kann auf die Anweisung <code>200 k=3</code> verzichtet werden. Der Sprungbefehl <code>100 goto 900</code> ist dann ebenfalls überflüssig. </p> <div class="mw-heading mw-heading3"><h3 id="Erkennung_unbenutzter_Variablen">Erkennung unbenutzter Variablen</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Compiler&veaction=edit&section=19" title="Abschnitt bearbeiten: Erkennung unbenutzter Variablen" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Compiler&action=edit&section=19" title="Quellcode des Abschnitts bearbeiten: Erkennung unbenutzter Variablen"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Wird eine Variable nicht benötigt, so muss dafür kein Speicherplatz reserviert und kein Zielcode erzeugt werden. </p><p><i>Beispiel:</i> </p> <div style="margin-left:2em" class="mw-highlight mw-highlight-lang-fortran mw-content-ltr" dir="ltr"><pre><span></span><span class="k">subroutine </span><span class="n">test</span><span class="w"> </span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">)</span> <span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">a</span> <span class="w"> </span><span class="n">c</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">3.14</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">b</span> <span class="w"> </span><span class="k">return </span><span class="n">b</span> </pre></div> <p>Hier wird die Variable <code>c</code> nicht benötigt: Sie steht nicht in der <a href="/wiki/Parameter_(Informatik)" title="Parameter (Informatik)">Parameterliste</a>, wird in späteren Berechnungen nicht verwendet und wird auch nicht ausgegeben. Deshalb kann die Anweisung <code style="white-space:nowrap" class="mw-highlight mw-highlight-lang-text mw-content-ltr" dir="ltr">c = 3.14 * b</code> entfallen. </p> <div class="mw-heading mw-heading3"><h3 id="Optimierung_von_Schleifen">Optimierung von Schleifen</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Compiler&veaction=edit&section=20" title="Abschnitt bearbeiten: Optimierung von Schleifen" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Compiler&action=edit&section=20" title="Quellcode des Abschnitts bearbeiten: Optimierung von Schleifen"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Insbesondere <a href="/wiki/Schleife_(Programmierung)" title="Schleife (Programmierung)">Schleifen</a> versucht man zu optimieren, indem man zum Beispiel </p> <ul><li>möglichst viele Variablen in Registern hält (normalerweise mindestens die Schleifenvariable);</li> <li>statt eines Index, mit dem auf Elemente eines <a href="/wiki/Feld_(Datentyp)" class="mw-redirect" title="Feld (Datentyp)">Feldes</a> (<span style="font-style:normal;font-weight:normal"><a href="/wiki/Englische_Sprache" title="Englische Sprache">englisch</a></span> <span lang="en-Latn" style="font-style:italic">array</span>) zugegriffen wird, <a href="/wiki/Zeiger_(Informatik)" title="Zeiger (Informatik)">Zeiger</a> auf die Elemente verwendet, dadurch wird der Aufwand beim Zugriff auf Feldelemente geringer;</li> <li>Berechnungen innerhalb der Schleife, die in jedem Durchlauf dasselbe Ergebnis liefern, nur einmal vor der Schleife ausführt (Loop-invariant code motion);</li> <li>zwei Schleifen, die über denselben Wertebereich gehen, zu einer Schleife zusammenfasst, damit fällt der Verwaltungsaufwand für die Schleife nur einmal an;</li> <li>die Schleife teilweise oder (bei Schleifen mit konstanter, niedriger Durchlaufzahl) komplett auflöst (englisch <i><a href="/wiki/Loop_unrolling" title="Loop unrolling">loop unrolling</a></i>), sodass die Anweisungen innerhalb der Schleife mehrfach direkt hintereinander ausgeführt werden, ohne dass jedes Mal nach den Anweisungen eine Prüfung der Schleifenbedingung und ein Sprung zum Schleifenbeginn erfolgen;</li> <li>die Schleife (vor allem bei Zählschleifen mit <a href="/wiki/For-Schleife" title="For-Schleife">for</a>) umdreht, da beim Herunterzählen auf 0 effiziente <a href="/wiki/Sprungbefehl" class="mw-redirect" title="Sprungbefehl">Sprungbefehle</a> (Jump-Not-Zero) benutzt werden können;</li> <li>die Schleife umformt, damit die Überprüfung der Abbruchbedingung am Ende der Schleife durchgeführt wird (Schleifen mit Anfangsüberprüfung haben stets eine bedingte und eine unbedingte Sprunganweisung, während Schleifen mit Endüberprüfung nur eine bedingte Sprunganweisung haben);</li> <li>die ganze Schleife entfernt, wenn sie (nach einigen Optimierungen) einen leeren Rumpf besitzt. Dies kann allerdings dazu führen, dass Warteschleifen, die ein Programm absichtlich verlangsamen sollen, entfernt werden. Allerdings sollten für diesen Zweck, soweit möglich, sowieso Funktionen des Betriebssystems benutzt werden.</li> <li>verschachtelte Schleifen (Schleifen in Schleifen) – wenn es die verwendete Programmierlogik erlaubt – aufsteigend anordnet, von der äußersten Schleife mit den wenigsten Schleifendurchläufen bis zur innersten Schleife mit den meisten Schleifendurchläufen. Damit verhindert man vielfache Mehrinitialisierungen der inneren Schleifenkörper.</li></ul> <p>Manche dieser Optimierungen sind bei aktuellen Prozessoren ohne Nutzen oder sogar kontraproduktiv. </p> <div class="mw-heading mw-heading3"><h3 id="Einfügen_von_Unterprogrammen"><span id="Einf.C3.BCgen_von_Unterprogrammen"></span>Einfügen von Unterprogrammen</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Compiler&veaction=edit&section=21" title="Abschnitt bearbeiten: Einfügen von Unterprogrammen" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Compiler&action=edit&section=21" title="Quellcode des Abschnitts bearbeiten: Einfügen von Unterprogrammen"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="hauptartikel" role="navigation"><span class="hauptartikel-pfeil" title="siehe" aria-hidden="true" role="presentation">→ </span><i><span class="hauptartikel-text">Hauptartikel</span>: <a href="/wiki/Inline-Ersetzung" title="Inline-Ersetzung">Inline-Ersetzung</a></i></div> <p>Bei kleinen <a href="/wiki/Unterprogramm" title="Unterprogramm">Unterprogrammen</a> fällt der Aufwand zum Aufruf des Unterprogrammes verglichen mit der vom Unterprogramm geleisteten Arbeit stärker ins Gewicht. Daher versuchen Compiler, den <a href="/wiki/Maschinensprache" title="Maschinensprache">Maschinencode</a> kleinerer Unterprogramme direkt einzufügen – ähnlich wie manche Compiler/Assembler/Präcompiler <a href="/wiki/Makro" title="Makro">Makro</a>-Anweisungen in Quellcode auflösen. Diese Technik wird auch als Inlining bezeichnet. In manchen Programmiersprachen ist es möglich, durch <i>inline</i>-Schlüsselwörter den Compiler darauf hinzuweisen, dass das Einfügen von bestimmten Unterprogrammen gewünscht ist. Das Einfügen von Unterprogrammen eröffnet oft, abhängig von den Parametern, weitere Möglichkeiten für Optimierungen. </p> <div class="mw-heading mw-heading3"><h3 id="Halten_von_Werten_in_Registern">Halten von Werten in Registern</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Compiler&veaction=edit&section=22" title="Abschnitt bearbeiten: Halten von Werten in Registern" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Compiler&action=edit&section=22" title="Quellcode des Abschnitts bearbeiten: Halten von Werten in Registern"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Anstatt mehrfach auf dieselbe Variable im Speicher, beispielsweise in einer Datenstruktur, zuzugreifen, kann der Wert nur einmal gelesen und für weitere Verarbeitungen in Registern oder im Stack zwischengespeichert werden. In <a href="/wiki/C_(Programmiersprache)" title="C (Programmiersprache)">C</a>, <a href="/wiki/C%2B%2B" title="C++">C++</a> und <a href="/wiki/Java_(Programmiersprache)" title="Java (Programmiersprache)">Java</a> muss dieses Verhalten ggf. mit dem Schlüsselwort <i>volatile</i> abgeschaltet werden: Eine als <i>volatile</i> bezeichnete Variable wird bei jeder Benutzung wiederholt vom originalen Speicherplatz gelesen, da ihr Wert sich unterdessen geändert haben könnte. Das kann beispielsweise der Fall sein, wenn es sich um einen Hardware-Port handelt oder ein parallel laufender <a href="/wiki/Thread_(Informatik)" title="Thread (Informatik)">Thread</a> den Wert geändert haben könnte. </p><p><i>Beispiel:</i> </p> <div style="margin-left:2em" class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">array</span><span class="p">[</span><span class="mi">25</span><span class="p">]</span><span class="o">-></span><span class="n">element</span><span class="p">.</span><span class="n">x</span><span class="p">;</span> <span class="kt">int</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">array</span><span class="p">[</span><span class="mi">25</span><span class="p">]</span><span class="o">-></span><span class="n">element</span><span class="p">.</span><span class="n">x</span><span class="p">;</span> </pre></div> <p>Im Maschinenprogramm wird nur einmal auf <code>array[25]->element.x</code> zugegriffen, der Wert wird zwischengespeichert und zweimal verwendet. Ist <code>x</code> volatile, dann wird zweimal zugegriffen. </p><p>Es gibt außer <i>volatile</i> noch einen anderen Grund, der eine Zwischenspeicherung in Registern unmöglich macht: Wenn der Wert der Variablen <code>v</code> durch Verwendung des Zeigers <code>z</code> im Speicher verändert werden könnte, kann eine Zwischenspeicherung von <code>v</code> in einem Register zu fehlerhaftem Programmverhalten führen. Da die in der <a href="/wiki/C_(Programmiersprache)" title="C (Programmiersprache)">Programmiersprache C</a> oft verwendeten Zeiger nicht auf ein Array beschränkt sind (sie könnten irgendwohin im Hauptspeicher zeigen), hat der Optimizer oft nicht genügend Informationen, um eine Veränderung einer Variablen durch einen Zeiger auszuschließen. </p> <div class="mw-heading mw-heading3"><h3 id="Verwendung_schnellerer_äquivalenter_Anweisungen"><span id="Verwendung_schnellerer_.C3.A4quivalenter_Anweisungen"></span>Verwendung schnellerer äquivalenter Anweisungen</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Compiler&veaction=edit&section=23" title="Abschnitt bearbeiten: Verwendung schnellerer äquivalenter Anweisungen" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Compiler&action=edit&section=23" title="Quellcode des Abschnitts bearbeiten: Verwendung schnellerer äquivalenter Anweisungen"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Statt einer Multiplikation oder Division von Ganzzahlen mit einer Zweierpotenz kann ein Schiebebefehl verwendet werden. Es gibt Fälle, in denen nicht nur Zweierpotenzen, sondern auch andere Zahlen (einfache Summen von Zweierpotenzen) für diese Optimierung herangezogen werden. So kann zum Beispiel <code style="white-space:nowrap" class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><span class="p">(</span><span class="n">n</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="p">(</span><span class="n">n</span><span class="w"> </span><span class="o"><<</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span></code> schneller sein als <code style="white-space:nowrap" class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><span class="n">n</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">6</span></code>. Statt einer Division durch eine Konstante kann eine Multiplikation mit dem Reziprokwert der Konstante erfolgen. Selbstverständlich sollte man solch spezielle Optimierungen auf jeden Fall dem Compiler überlassen. </p> <div class="mw-heading mw-heading3"><h3 id="Weglassen_von_Laufzeitüberprüfungen"><span id="Weglassen_von_Laufzeit.C3.BCberpr.C3.BCfungen"></span>Weglassen von Laufzeitüberprüfungen</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Compiler&veaction=edit&section=24" title="Abschnitt bearbeiten: Weglassen von Laufzeitüberprüfungen" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Compiler&action=edit&section=24" title="Quellcode des Abschnitts bearbeiten: Weglassen von Laufzeitüberprüfungen"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Programmiersprachen wie <a href="/wiki/Java_(Programmiersprache)" title="Java (Programmiersprache)">Java</a> fordern Laufzeitüberprüfungen beim Zugriff auf Felder oder Variablen. Wenn der Compiler ermittelt, dass ein bestimmter Zugriff immer im erlaubten Bereich sein wird (zum Beispiel ein Zeiger, von dem bekannt ist, dass er an dieser Stelle nicht NULL ist), kann der Code für diese Laufzeitüberprüfungen weggelassen werden. </p> <div class="mw-heading mw-heading3"><h3 id="Reduktion_von_Paging_zur_Laufzeit">Reduktion von Paging zur Laufzeit</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Compiler&veaction=edit&section=25" title="Abschnitt bearbeiten: Reduktion von Paging zur Laufzeit" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Compiler&action=edit&section=25" title="Quellcode des Abschnitts bearbeiten: Reduktion von Paging zur Laufzeit"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Eng zusammenhängende Codebereiche, zum Beispiel ein Schleifenrumpf, sollte zur Laufzeit möglichst auf der gleichen oder in möglichst wenigen Speicherseiten („Page“, zusammenhängend vom Betriebssystem verwalteter Speicherblock) im Hauptspeicher liegen. Diese Optimierung ist Aufgabe des (optimierenden) Linkers. Dies kann zum Beispiel dadurch erreicht werden, dass dem Zielcode an geeigneter Stelle <a href="/wiki/Nulloperation" title="Nulloperation">Leeranweisungen</a> („NOPs“ – <i>N</i>o <i>OP</i>eration) hinzugefügt werden. Dadurch wird der erzeugte Code zwar größer, aber wegen der reduzierten Anzahl notwendiger TLB-Cache-Einträge und notwendiger Pagewalks wird das Programm schneller ausgeführt. </p> <div class="mw-heading mw-heading3"><h3 id="Vorziehen_bzw._Verzögern_von_Speicherzugriffen"><span id="Vorziehen_bzw._Verz.C3.B6gern_von_Speicherzugriffen"></span>Vorziehen bzw. Verzögern von Speicherzugriffen</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Compiler&veaction=edit&section=26" title="Abschnitt bearbeiten: Vorziehen bzw. Verzögern von Speicherzugriffen" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Compiler&action=edit&section=26" title="Quellcode des Abschnitts bearbeiten: Vorziehen bzw. Verzögern von Speicherzugriffen"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Durch das Vorziehen von Speicherlesezugriffen und das Verzögern von Schreibzugriffen lässt sich die Fähigkeit moderner Prozessoren zur Parallelarbeit verschiedener Funktionseinheiten ausnutzen. So kann beispielsweise bei den Befehlen: <code style="white-space:nowrap" class="mw-highlight mw-highlight-lang-text mw-content-ltr" dir="ltr">a = b * c; d = e * f;</code> der Operand <code>e</code> bereits geladen werden, während ein anderer Teil des Prozessors noch mit der ersten Multiplikation beschäftigt ist. </p> <div class="mw-heading mw-heading2"><h2 id="Ein_Beispielcompiler">Ein Beispielcompiler</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Compiler&veaction=edit&section=27" title="Abschnitt bearbeiten: Ein Beispielcompiler" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Compiler&action=edit&section=27" title="Quellcode des Abschnitts bearbeiten: Ein Beispielcompiler"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Folgendes in <a href="/wiki/ANTLR" title="ANTLR">ANTLR</a> erstelltes Beispiel soll die Zusammenarbeit zwischen <a href="/wiki/Parser" title="Parser">Parser</a> und <a href="/wiki/Tokenizer" class="mw-redirect" title="Tokenizer">Lexer</a> erklären. Der Übersetzer soll Ausdrücke der <a href="/wiki/Grundrechenart" title="Grundrechenart">Grundrechenarten</a> beherrschen und vergleichen können. Die Parser<a href="/wiki/Formale_Grammatik" title="Formale Grammatik">grammatik</a> wandelt einen Dateiinhalt in einen <a href="/wiki/Abstrakter_Syntaxbaum" class="mw-redirect" title="Abstrakter Syntaxbaum">abstrakten Syntaxbaum</a> (AST) um. </p> <div class="mw-heading mw-heading3"><h3 id="Grammatiken">Grammatiken</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Compiler&veaction=edit&section=28" title="Abschnitt bearbeiten: Grammatiken" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Compiler&action=edit&section=28" title="Quellcode des Abschnitts bearbeiten: Grammatiken"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Die Baumgrammatik ist in der Lage, die im AST gespeicherten Lexeme zu evaluieren. Der <a href="/wiki/Operator_(Mathematik)" title="Operator (Mathematik)">Operator</a> der Rechenfunktionen steht in der AST-Schreibweise vor den Operanden als <a href="/wiki/Pr%C3%A4fixnotation" class="mw-redirect" title="Präfixnotation">Präfixnotation</a>. Daher kann die Grammatik ohne Sprünge Berechnungen anhand des Operators durchführen und dennoch Klammerausdrücke und <a href="/wiki/Operatorrangfolge" title="Operatorrangfolge">Operationen verschiedener Priorität</a> korrekt berechnen. </p> <div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="n">tree</span><span class="w"> </span><span class="n">grammar</span><span class="w"> </span><span class="n">Eval</span><span class="p">;</span> <span class="n">options</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">tokenVocab</span><span class="o">=</span><span class="n">Expression</span><span class="p">;</span> <span class="w"> </span><span class="n">ASTLabelType</span><span class="o">=</span><span class="n">CommonTree</span><span class="p">;</span> <span class="p">}</span> <span class="nd">@header</span><span class="w"> </span><span class="p">{</span> <span class="kn">import</span><span class="w"> </span><span class="nn">java.lang.Math</span><span class="p">;</span> <span class="p">}</span> <span class="n">start</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">line</span><span class="o">+</span><span class="p">;</span><span class="w"> </span><span class="c1">//Eine Datei besteht aus mehreren Zeilen</span> <span class="n">line</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">compare</span><span class="w"> </span><span class="p">{</span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">$compare</span><span class="p">.</span><span class="na">value</span><span class="p">);}</span> <span class="w"> </span><span class="p">;</span> <span class="n">compare</span><span class="w"> </span><span class="n">returns</span><span class="w"> </span><span class="o">[</span><span class="kt">double</span><span class="w"> </span><span class="n">value</span><span class="o">]</span> <span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="o">^</span><span class="p">(</span><span class="sc">'+'</span><span class="w"> </span><span class="n">a</span><span class="o">=</span><span class="n">compare</span><span class="w"> </span><span class="n">b</span><span class="o">=</span><span class="n">compare</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="n">$value</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">a</span><span class="o">+</span><span class="n">b</span><span class="p">;}</span> <span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">^</span><span class="p">(</span><span class="sc">'-'</span><span class="w"> </span><span class="n">a</span><span class="o">=</span><span class="n">compare</span><span class="w"> </span><span class="n">b</span><span class="o">=</span><span class="n">compare</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="n">$value</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">a</span><span class="o">-</span><span class="n">b</span><span class="p">;}</span> <span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">^</span><span class="p">(</span><span class="sc">'*'</span><span class="w"> </span><span class="n">a</span><span class="o">=</span><span class="n">compare</span><span class="w"> </span><span class="n">b</span><span class="o">=</span><span class="n">compare</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="n">$value</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">a</span><span class="o">*</span><span class="n">b</span><span class="p">;}</span> <span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">^</span><span class="p">(</span><span class="sc">'/'</span><span class="w"> </span><span class="n">a</span><span class="o">=</span><span class="n">compare</span><span class="w"> </span><span class="n">b</span><span class="o">=</span><span class="n">compare</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="n">$value</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">a</span><span class="o">/</span><span class="n">b</span><span class="p">;}</span> <span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">^</span><span class="p">(</span><span class="sc">'%'</span><span class="w"> </span><span class="n">a</span><span class="o">=</span><span class="n">compare</span><span class="w"> </span><span class="n">b</span><span class="o">=</span><span class="n">compare</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="n">$value</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">a</span><span class="err">\</span><span class="o">%</span><span class="n">b</span><span class="p">;}</span> <span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">^</span><span class="p">(</span><span class="n">UMINUS</span><span class="w"> </span><span class="n">a</span><span class="o">=</span><span class="n">compare</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="n">$value</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">-</span><span class="mi">1</span><span class="o">*</span><span class="n">a</span><span class="p">;}</span><span class="w"> </span><span class="c1">//Token UMINUS ist notwendig, um den binären</span> <span class="w"> </span><span class="c1">//Operator nicht mit einem Vorzeichen zu verwechseln</span> <span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">^</span><span class="p">(</span><span class="sc">'^'</span><span class="w"> </span><span class="n">a</span><span class="o">=</span><span class="n">compare</span><span class="w"> </span><span class="n">b</span><span class="o">=</span><span class="n">compare</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="n">$value</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Math</span><span class="p">.</span><span class="na">pow</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">);}</span> <span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">^</span><span class="p">(</span><span class="sc">'='</span><span class="w"> </span><span class="n">a</span><span class="o">=</span><span class="n">compare</span><span class="w"> </span><span class="n">b</span><span class="o">=</span><span class="n">compare</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="n">$value</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">a</span><span class="o">==</span><span class="n">b</span><span class="p">)</span><span class="o">?</span><span class="w"> </span><span class="mi">1</span><span class="p">:</span><span class="mi">0</span><span class="p">;}</span><span class="w"> </span><span class="c1">//wahr=1, falsch=0</span> <span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">INT</span><span class="w"> </span><span class="p">{</span><span class="n">$value</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Integer</span><span class="p">.</span><span class="na">parseInt</span><span class="p">(</span><span class="n">$INT</span><span class="p">.</span><span class="na">text</span><span class="p">);}</span> <span class="w"> </span><span class="p">;</span> </pre></div> <p>Ist eines der oben als <i>compare</i> bezeichnete Ausdrücke noch kein Lexem, so wird es von der folgenden Lexer-Grammatik in einzelne Lexeme aufgeteilt. Dabei bedient sich der Lexer der Technik des <a href="/wiki/Rekursiver_Abstieg" title="Rekursiver Abstieg">rekursiven Abstiegs</a>. Ausdrücke werden so immer weiter zerlegt, bis es sich nur noch um <a href="/wiki/Token_(%C3%9Cbersetzerbau)" title="Token (Übersetzerbau)">Token</a> vom Typ <i>number</i> oder Operatoren handeln kann. </p> <div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="n">grammar</span><span class="w"> </span><span class="n">Expression</span><span class="p">;</span> <span class="n">options</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">output</span><span class="o">=</span><span class="n">AST</span><span class="p">;</span> <span class="w"> </span><span class="n">ASTLabelType</span><span class="o">=</span><span class="n">CommonTree</span><span class="p">;</span> <span class="p">}</span> <span class="n">tokens</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">UMINUS</span><span class="p">;</span> <span class="p">}</span> <span class="n">start</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="p">(</span><span class="n">line</span><span class="w"> </span><span class="p">{</span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">$line</span><span class="p">.</span><span class="na">tree</span><span class="o">==</span><span class="kc">null</span><span class="o">?</span><span class="s">"null"</span><span class="p">:</span><span class="n">$line</span><span class="p">.</span><span class="na">tree</span><span class="p">.</span><span class="na">toStringTree</span><span class="p">());})</span><span class="o">+</span><span class="p">;</span> <span class="n">line</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">compare</span><span class="w"> </span><span class="n">NEWLINE</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="o">^</span><span class="p">(</span><span class="n">compare</span><span class="p">);</span><span class="w"> </span><span class="c1">//Eine Zeile besteht aus einem Ausdruck und einem</span> <span class="w"> </span><span class="c1">//terminalen Zeichen</span> <span class="n">compare</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">sum</span><span class="w"> </span><span class="p">(</span><span class="sc">'='</span><span class="o">^</span><span class="w"> </span><span class="n">sum</span><span class="p">)</span><span class="o">?</span><span class="p">;</span><span class="w"> </span><span class="c1">//Summen sind mit Summen vergleichbar</span> <span class="n">sum</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">product</span><span class="w"> </span><span class="p">(</span><span class="sc">'+'</span><span class="o">^</span><span class="w"> </span><span class="n">product</span><span class="o">|</span><span class="sc">'-'</span><span class="o">^</span><span class="w"> </span><span class="n">product</span><span class="p">)</span><span class="o">*</span><span class="p">;</span><span class="w"> </span><span class="c1">//Summen bestehen aus Produkten (Operatorrangfolge)</span> <span class="n">product</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">pow</span><span class="w"> </span><span class="p">(</span><span class="sc">'*'</span><span class="o">^</span><span class="w"> </span><span class="n">pow</span><span class="o">|</span><span class="sc">'/'</span><span class="o">^</span><span class="w"> </span><span class="n">pow</span><span class="o">|</span><span class="sc">'%'</span><span class="o">^</span><span class="w"> </span><span class="n">pow</span><span class="p">)</span><span class="o">*</span><span class="p">;</span><span class="w"> </span><span class="c1">//Produkte (Modulo-Operation gehört hier dazu) können</span> <span class="w"> </span><span class="c1">//aus Potenzen zusammengesetzt sein</span> <span class="n">pow</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">term</span><span class="w"> </span><span class="p">(</span><span class="sc">'^'</span><span class="o">^</span><span class="w"> </span><span class="n">pow</span><span class="p">)</span><span class="o">?</span><span class="p">;</span><span class="w"> </span><span class="c1">//Potenzen werden auf Terme angewendet</span> <span class="n">term</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">number</span><span class="w"> </span><span class="c1">//Terme bestehen aus Nummern, Subtermen oder Summen</span> <span class="w"> </span><span class="o">|</span><span class="sc">'+'</span><span class="w"> </span><span class="n">term</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">term</span> <span class="w"> </span><span class="o">|</span><span class="sc">'-'</span><span class="w"> </span><span class="n">term</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="o">^</span><span class="p">(</span><span class="n">UMINUS</span><span class="w"> </span><span class="n">term</span><span class="p">)</span><span class="w"> </span><span class="c1">//Subterm mit Vorzeichen</span> <span class="w"> </span><span class="o">|</span><span class="sc">'('</span><span class="o">!</span><span class="w"> </span><span class="n">sum</span><span class="w"> </span><span class="sc">')'</span><span class="o">!</span><span class="w"> </span><span class="c1">//Subterm mit Klammerausdruck</span> <span class="w"> </span><span class="p">;</span> <span class="n">number</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">INT</span><span class="p">;</span><span class="w"> </span><span class="c1">//Nummern bestehen nur aus Zahlen</span> <span class="n">INT</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="sc">'0'</span><span class="p">..</span><span class="sc">'9'</span><span class="o">+</span><span class="p">;</span> <span class="n">NEWLINE</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="sc">'\r'</span><span class="o">?</span><span class="w"> </span><span class="sc">'\n'</span><span class="p">;</span> <span class="n">WS</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="p">(</span><span class="sc">' '</span><span class="o">|</span><span class="sc">'\t'</span><span class="o">|</span><span class="sc">'\n'</span><span class="o">|</span><span class="sc">'\r'</span><span class="p">)</span><span class="o">+</span><span class="w"> </span><span class="p">{</span><span class="n">skip</span><span class="p">();};</span><span class="w"> </span><span class="c1">//Whitespace wird ignoriert</span> </pre></div> <p>Die Ausgabe hinter dem Token <i>start</i> zeigt außerdem den gerade evaluierten Ausdruck. </p> <div class="mw-heading mw-heading3"><h3 id="Ausgabe_des_Beispiels">Ausgabe des Beispiels</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Compiler&veaction=edit&section=29" title="Abschnitt bearbeiten: Ausgabe des Beispiels" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Compiler&action=edit&section=29" title="Quellcode des Abschnitts bearbeiten: Ausgabe des Beispiels"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Eingabe: </p> <pre>5 = 2 + 3 32 * 2 + 8 (2 * 2^3 + 2) / 3 </pre> <p>Ausgabe (in den ersten Zeilen wird nur der Ausdruck der Eingabe in der AST-Darstellung ausgegeben): </p> <pre>(= 5 (+ 2 3)) (+ (* 32 2) 8) (/ (+ (* 2 (^ 2 3)) 2) 3) 1.0 72.0 6.0 </pre> <p>Der erste Ausdruck wird also als wahr (1) evaluiert, bei den anderen Ausdrücken wird das Ergebnis der Rechnung ausgegeben. </p> <div class="mw-heading mw-heading2"><h2 id="Literatur">Literatur</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Compiler&veaction=edit&section=30" title="Abschnitt bearbeiten: Literatur" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Compiler&action=edit&section=30" title="Quellcode des Abschnitts bearbeiten: Literatur"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li>Uwe Meyer: <cite style="font-style:italic">Grundkurs Compilerbau</cite>. 1. Auflage. Rheinwerk Computing, Bonn 2021, <a href="/wiki/Spezial:ISBN-Suche/9783836277334" class="internal mw-magiclink-isbn">ISBN 978-3-8362-7733-4</a>.<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rfr_id=info:sid/de.wikipedia.org:Compiler&rft.au=Uwe+Meyer&rft.btitle=Grundkurs+Compilerbau&rft.date=2021&rft.edition=1.&rft.genre=book&rft.isbn=9783836277334&rft.place=Bonn&rft.pub=Rheinwerk+Computing" style="display:none"> </span></li> <li><a href="/wiki/Niklaus_Wirth" title="Niklaus Wirth">Niklaus Wirth</a>: <cite style="font-style:italic">Grundlagen und Techniken des Compilerbaus</cite>. 3., bearbeitete Auflage. Oldenbourg Wissenschaftsverlag, München 2011, <a href="/wiki/Spezial:ISBN-Suche/9783486709513" class="internal mw-magiclink-isbn">ISBN 978-3-486-70951-3</a>.<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rfr_id=info:sid/de.wikipedia.org:Compiler&rft.au=Niklaus+Wirth&rft.btitle=Grundlagen+und+Techniken+des+Compilerbaus&rft.date=2011&rft.edition=3.%2C+bearbeitete&rft.genre=book&rft.isbn=9783486709513&rft.place=M%C3%BCnchen&rft.pub=Oldenbourg+Wissenschaftsverlag" style="display:none"> </span></li> <li>Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman: <cite style="font-style:italic">Compiler</cite>. Pearson, 2008, <a href="/wiki/Spezial:ISBN-Suche/9783827370976" class="internal mw-magiclink-isbn">ISBN 978-3-8273-7097-6</a> (Deutsche Übersetzung).<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rfr_id=info:sid/de.wikipedia.org:Compiler&rft.au=Alfred+V.+Aho%2C+Monica+S.+Lam%2C+Ravi+Sethi%2C+...&rft.btitle=Compiler&rft.date=2008&rft.genre=book&rft.isbn=9783827370976&rft.pub=Pearson" style="display:none"> </span></li> <li><a href="/wiki/Alfred_V._Aho" title="Alfred V. Aho">Alfred V. Aho</a>, Monica S. Lam, Ravi Sethi, <a href="/wiki/Jeffrey_Ullman" title="Jeffrey Ullman">Jeffrey D. Ullman</a>: <cite style="font-style:italic">Compilers: principles, techniques, & tools</cite>. Pearson Addison-Wesley, Boston 2007, <a href="/wiki/Spezial:ISBN-Suche/9780321486813" class="internal mw-magiclink-isbn">ISBN 978-0-321-48681-3</a>.<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rfr_id=info:sid/de.wikipedia.org:Compiler&rft.au=Alfred+V.+Aho%2C+Monica+S.+Lam%2C+Ravi+Sethi%2C+...&rft.btitle=Compilers%3A+principles%2C+techniques%2C+%26+tools&rft.date=2007&rft.genre=book&rft.isbn=9780321486813&rft.place=Boston&rft.pub=Pearson+Addison-Wesley" style="display:none"> </span></li> <li><a href="/wiki/Reinhard_Wilhelm" title="Reinhard Wilhelm">Reinhard Wilhelm</a>, Dieter Maurer: <cite style="font-style:italic">Übersetzerbau – Theorie, Konstruktion, Generierung</cite>. Springer, 1997, <a href="/wiki/Spezial:ISBN-Suche/3540616926" class="internal mw-magiclink-isbn">ISBN 3-540-61692-6</a>.<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rfr_id=info:sid/de.wikipedia.org:Compiler&rft.au=Reinhard+Wilhelm%2C+Dieter+Maurer&rft.btitle=%C3%9Cbersetzerbau+-+Theorie%2C+Konstruktion%2C+Generierung&rft.date=1997&rft.genre=book&rft.isbn=3540616926&rft.pub=Springer" style="display:none"> </span></li> <li><a href="/wiki/Compiler:_Prinzipien,_Techniken_und_Werkzeuge" title="Compiler: Prinzipien, Techniken und Werkzeuge">Compiler: Prinzipien, Techniken und Werkzeuge</a></li></ul> <div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Compiler&veaction=edit&section=31" title="Abschnitt bearbeiten: Weblinks" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Compiler&action=edit&section=31" title="Quellcode des Abschnitts bearbeiten: Weblinks"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="sisterproject" style="margin:0.1em 0 0 0;"><span class="noviewer" style="display:inline-block; line-height:10px; min-width:1.6em; text-align:center;" aria-hidden="true" role="presentation"><span class="mw-default-size" typeof="mw:File"><span title="Wiktionary"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Wiktfavicon_en.svg/16px-Wiktfavicon_en.svg.png" decoding="async" width="16" height="16" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Wiktfavicon_en.svg/24px-Wiktfavicon_en.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Wiktfavicon_en.svg/32px-Wiktfavicon_en.svg.png 2x" data-file-width="16" data-file-height="16" /></span></span></span><b><a href="https://de.wiktionary.org/wiki/Compiler" class="extiw" title="wikt:Compiler">Wiktionary: Compiler</a></b> – Bedeutungserklärungen, Wortherkunft, Synonyme, Übersetzungen</div> <div class="sisterproject" style="margin:0.1em 0 0 0;"><span class="noviewer" style="display:inline-block; line-height:10px; min-width:1.6em; text-align:center;" aria-hidden="true" role="presentation"><span class="mw-default-size" typeof="mw:File"><span title="Wiktionary"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Wiktfavicon_en.svg/16px-Wiktfavicon_en.svg.png" decoding="async" width="16" height="16" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Wiktfavicon_en.svg/24px-Wiktfavicon_en.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Wiktfavicon_en.svg/32px-Wiktfavicon_en.svg.png 2x" data-file-width="16" data-file-height="16" /></span></span></span><b><a href="https://de.wiktionary.org/wiki/kompilieren" class="extiw" title="wikt:kompilieren">Wiktionary: kompilieren</a></b> – Bedeutungserklärungen, Wortherkunft, Synonyme, Übersetzungen</div> <div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Compiler&veaction=edit&section=32" title="Abschnitt bearbeiten: Einzelnachweise" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Compiler&action=edit&section=32" title="Quellcode des Abschnitts bearbeiten: Einzelnachweise"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-references-wrap mw-references-columns"><ol class="references"> <li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text">Michael Eulenstein: <i>Generierung portabler Compiler. Das portable System POCO.</i> (= <i>Informatik-Fachberichte</i> 164) Springer Verlag: Berlin, u. a., 1988, S. 1; Hans-Jochen Schneider (Hrsg.): <i>Lexikon Informatik und Datenverarbeitung.</i> 4. Auflage. Oldenbourg Verlag: München, Berlin, 1998, 900; Manfred Broy: <i>Informatik. Eine grundlegende Einführung.</i> Band 2: <i>Systemstrukturen und Theoretische Informatik.</i> 2. Auflage. Springer Verlag: Berlin, Heidelberg, 1998, S. 173.</span> </li> <li id="cite_note-Busch171-2"><span class="mw-cite-backlink">↑ <sup><a href="#cite_ref-Busch171_2-0">a</a></sup> <sup><a href="#cite_ref-Busch171_2-1">b</a></sup></span> <span class="reference-text">Carsten Busch: <i>Mataphern in der Informatik. Modellbildung – Formalisierung – Anwendung.</i> Springer Fachmedien: Wiesbaden, 1998, S. 171.</span> </li> <li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a></span> <span class="reference-text">Axel Rogat: <style data-mw-deduplicate="TemplateStyles:r246413598">.mw-parser-output .webarchiv-memento{color:var(--color-base,#202122)!important}</style><a rel="nofollow" class="external text" href="https://web.archive.org/web/20160702164421/http://www2.math.uni-wuppertal.de/~axel/skripte/compiler/c1.html">Aufbau und Arbeitsweise von Compilern</a> (<a href="/wiki/Web-Archivierung#Begrifflichkeiten" title="Web-Archivierung"><span class="webarchiv-memento">Memento</span></a> vom 2. Juli 2016 im <i><a href="/wiki/Internet_Archive" title="Internet Archive">Internet Archive</a></i>), Kapitel 1.11: <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r246413598"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20161127024341/http://www2.math.uni-wuppertal.de/~axel/skripte/compiler/c1_11.html">Geschichte</a> (<a href="/wiki/Web-Archivierung#Begrifflichkeiten" title="Web-Archivierung"><span class="webarchiv-memento">Memento</span></a> vom 27. November 2016 im <i><a href="/wiki/Internet_Archive" title="Internet Archive">Internet Archive</a></i>); Thomas W. Parsons: <i>Introduction to Compiler Construction.</i> Computer Science Press: New York, 1992, S. 1.</span> </li> <li id="cite_note-4"><span class="mw-cite-backlink"><a href="#cite_ref-4">↑</a></span> <span class="reference-text">Zur Übersetzung des englischen „compiler“ mit dem deutschen „Übersetzer“ siehe u. a.: Hans-Jürgen Siegert, Uwe Baumgarten: <i>Betriebssysteme. Eine Einführung.</i> 6. Auflage. Oldenbourg Verlag: München, Wien, 2007, S. 352; Christoph Prevezanos: <i>Computer-Lexikon 2011.</i> Markt+Technik Verlag: München, 2010, S. 940; Christoph Prevenzanos: <i>Technisches Schreiben. Für Informatiker, Akademiker, Techniker und den Berufsalltag.</i> Hanser Verlag: München, 2013, S. 130.</span> </li> <li id="cite_note-5"><span class="mw-cite-backlink"><a href="#cite_ref-5">↑</a></span> <span class="reference-text">So beispielsweise Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman: <i>Compiler. Prinzipien, Techniken und Werkzeuge.</i> 2. Auflage. Pearson Studium: München, 2008.</span> </li> <li id="cite_note-6"><span class="mw-cite-backlink"><a href="#cite_ref-6">↑</a></span> <span class="reference-text">Siehe dazu Hans-Jochen Schneider (Hrsg.): <i>Lexikon Informatik und Datenverarbeitung.</i> 4. Auflage. Oldenbourg Verlag: München, Berlin, 1998: Artikel „Compiler“, S. 158, und Artikel „Übersetzer“, S. 900.</span> </li> <li id="cite_note-7"><span class="mw-cite-backlink"><a href="#cite_ref-7">↑</a></span> <span class="reference-text">Hartmut Ernst, Jochen Schmidt; Gert Beneken: <i>Grundkurs Informatik. Grundlagen und Konzepte für die erfolgreiche IT-Praxis. Eine umfassende, praxisorientierte Einführung.</i> 5. Auflage. Springer: Wiesbaden, 2015, S. 409.</span> </li> <li id="cite_note-8"><span class="mw-cite-backlink"><a href="#cite_ref-8">↑</a></span> <span class="reference-text">Hans Dieter Hellige: <i>Geschichten der Informatik. Visionen, Paradigmen, Leitmotive.</i> Springer, Berlin 2004, <a href="/wiki/Spezial:ISBN-Suche/3540002170" class="internal mw-magiclink-isbn">ISBN 3-540-00217-0</a>, S. 45, 104, 105.</span> </li> <li id="cite_note-9"><span class="mw-cite-backlink"><a href="#cite_ref-9">↑</a></span> <span class="reference-text">Evelyn Boesch Trüeb: <a rel="nofollow" class="external text" href="https://hls-dhs-dss.ch/de/articles/031649"><i>Heinz Rutishauser.</i></a> In: <i><a href="/wiki/Historisches_Lexikon_der_Schweiz" title="Historisches Lexikon der Schweiz">Historisches Lexikon der Schweiz</a></i>. <span style="white-space:nowrap;"> 12. Juli 2010</span>, abgerufen am <span style="white-space:nowrap;">21. Oktober 2014</span>.</span> </li> <li id="cite_note-10"><span class="mw-cite-backlink"><a href="#cite_ref-10">↑</a></span> <span class="reference-text">Stefan Betschon: <i>Der Zauber des Anfangs. Schweizer Computerpioniere.</i> In: <a href="/wiki/Franz_Betschon" class="mw-redirect" title="Franz Betschon">Franz Betschon</a>, Stefan Betschon, Jürg Lindecker, Willy Schlachter (Hrsg.): <i>Ingenieure bauen die Schweiz. Technikgeschichte aus erster Hand.</i> Verlag Neue Zürcher Zeitung, Zürich 2013, <a href="/wiki/Spezial:ISBN-Suche/9783038237914" class="internal mw-magiclink-isbn">ISBN 978-3-03823-791-4</a>, S. 381–383.</span> </li> <li id="cite_note-11"><span class="mw-cite-backlink"><a href="#cite_ref-11">↑</a></span> <span class="reference-text">Friedrich L. Bauer: <a rel="nofollow" class="external text" href="https://www.cs.umd.edu/users/oleary/cggg/bauer.pdf"><i>My years with Rutishauser.</i></a></span> </li> <li id="cite_note-12"><span class="mw-cite-backlink"><a href="#cite_ref-12">↑</a></span> <span class="reference-text">Stefan Betschon: <i>Die Geschichte der Zukunft.</i> In: <i>Neue Zürcher Zeitung.</i> 6. Dezember 2016, S. 11.</span> </li> <li id="cite_note-13"><span class="mw-cite-backlink"><a href="#cite_ref-13">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="http://web.mit.edu/invent/iow/hopper.html"><i>Inventor of the Week Archive.</i></a> <a href="/wiki/Massachusetts_Institute_of_Technology" title="Massachusetts Institute of Technology">Massachusetts Institute of Technology</a>, Juni 2006,<span class="Abrufdatum"> abgerufen am 25. September 2011</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3ACompiler&rft.title=Inventor+of+the+Week+Archive&rft.description=Inventor+of+the+Week+Archive&rft.identifier=http%3A%2F%2Fweb.mit.edu%2Finvent%2Fiow%2Fhopper.html&rft.publisher=%5B%5BMassachusetts+Institute+of+Technology%5D%5D&rft.date=2006-06"> </span></span> </li> <li id="cite_note-14"><span class="mw-cite-backlink"><a href="#cite_ref-14">↑</a></span> <span class="reference-text">Kurt W. Beyer: <cite style="font-style:italic">Grace Hopper and the invention of the information age</cite>. Massachusetts Institute of Technology, 2009, <a href="/wiki/Spezial:ISBN-Suche/9780262013109" class="internal mw-magiclink-isbn">ISBN 978-0-262-01310-9</a> (<a rel="nofollow" class="external text" href="http://books.google.com/books?id=u5KKwGjulEwC&lpg=PP1&pg=PP1#v=onepage&q&f=true">Google Books</a> [abgerufen am 25. September 2011]).<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rfr_id=info:sid/de.wikipedia.org:Compiler&rft.au=Kurt+W.+Beyer&rft.btitle=Grace+Hopper+and+the+invention+of+the+information+age&rft.date=2009&rft.genre=book&rft.isbn=9780262013109&rft.pub=Massachusetts+Institute+of+Technology" style="display:none"> </span></span> </li> <li id="cite_note-15"><span class="mw-cite-backlink"><a href="#cite_ref-15">↑</a></span> <span class="reference-text">Kathleen Broome Williams: <cite style="font-style:italic">Grace Hopper</cite>. Naval Institute Press, 2004, <a href="/wiki/Spezial:ISBN-Suche/1557509522" class="internal mw-magiclink-isbn">ISBN 1-55750-952-2</a> (<a rel="nofollow" class="external text" href="http://books.google.com/books?id=A4CRM16a54IC&lpg=PP1&pg=PP1#v=onepage&q&f=true">Google Books</a> [abgerufen am 25. September 2011]).<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rfr_id=info:sid/de.wikipedia.org:Compiler&rft.au=Kathleen+Broome+Williams&rft.btitle=Grace+Hopper&rft.date=2004&rft.genre=book&rft.isbn=1557509522&rft.pub=Naval+Institute+Press" style="display:none"> </span></span> </li> <li id="cite_note-BECC-16"><span class="mw-cite-backlink"><a href="#cite_ref-BECC_16-0">↑</a></span> <span class="reference-text">F. L. Bauer, J. Eickel: <i>Compiler Construction: An Advanced Course</i>. Springer, 1975.</span> </li> <li id="cite_note-17"><span class="mw-cite-backlink"><a href="#cite_ref-17">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="http://www.neogrid.de/was-ist/Transcompiler"><i>Transcompiler.</i></a> In: <i>Neogrid IT Lexikon.</i><span class="Abrufdatum"> Abgerufen am 18. November 2011</span>: „Wenn ein Compiler aus dem Quellcode einer Programmiersprache den Quellcode einer anderen erzeugt (z. B. C in C++) so spricht man von einem Transcompiler.“</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3ACompiler&rft.title=Transcompiler&rft.description=Transcompiler&rft.identifier=http%3A%2F%2Fwww.neogrid.de%2Fwas-ist%2FTranscompiler"> </span></span> </li> <li id="cite_note-18"><span class="mw-cite-backlink"><a href="#cite_ref-18">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20140716011252/http://www.bullhost.de/t/transpiler.html"><i>Transpiler.</i></a> bullhost.de, archiviert vom <style data-mw-deduplicate="TemplateStyles:r235239667">.mw-parser-output .dewiki-iconexternal>a{background-position:center right;background-repeat:no-repeat}body.skin-minerva .mw-parser-output .dewiki-iconexternal>a{background-image:url("https://upload.wikimedia.org/wikipedia/commons/a/a4/OOjs_UI_icon_external-link-ltr-progressive.svg")!important;background-size:10px;padding-right:13px!important}body.skin-timeless .mw-parser-output .dewiki-iconexternal>a,body.skin-monobook .mw-parser-output .dewiki-iconexternal>a{background-image:url("https://upload.wikimedia.org/wikipedia/commons/3/30/MediaWiki_external_link_icon.svg")!important;padding-right:13px!important}body.skin-vector .mw-parser-output .dewiki-iconexternal>a{background-image:url("https://upload.wikimedia.org/wikipedia/commons/9/96/Link-external-small-ltr-progressive.svg")!important;background-size:0.857em;padding-right:1em!important}</style><span class="dewiki-iconexternal"><a class="external text" href="https://redirecter.toolforge.org/?url=http%3A%2F%2Fwww.bullhost.de%2Ft%2Ftranspiler.html">Original</a></span> (nicht mehr online verfügbar) am <span style="white-space:nowrap;">16. Juli 2014</span><span>;</span><span class="Abrufdatum"> abgerufen am 18. November 2012</span>.</span> <small class="archiv-bot"><span class="wp_boppel noviewer" aria-hidden="true" role="presentation"><span typeof="mw:File"><span title="i"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Pictogram_voting_info.svg/15px-Pictogram_voting_info.svg.png" decoding="async" width="15" height="15" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Pictogram_voting_info.svg/23px-Pictogram_voting_info.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Pictogram_voting_info.svg/30px-Pictogram_voting_info.svg.png 2x" data-file-width="250" data-file-height="250" /></span></span></span> <b>Info:</b> Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß <a href="/wiki/Benutzer:InternetArchiveBot/Anleitung/Archivlink" title="Benutzer:InternetArchiveBot/Anleitung/Archivlink">Anleitung</a> und entferne dann diesen Hinweis.</small><span style="display:none"><a rel="nofollow" class="external text" href="http://IABotmemento.invalid/http://www.bullhost.de/t/transpiler.html">@1</a></span><span style="display:none"><a rel="nofollow" class="external text" href="http://www.bullhost.de/t/transpiler.html">@2</a></span><span style="display:none"><a href="/w/index.php?title=Vorlage:Webachiv/IABot/www.bullhost.de&action=edit&redlink=1" class="new" title="Vorlage:Webachiv/IABot/www.bullhost.de (Seite nicht vorhanden)">Vorlage:Webachiv/IABot/www.bullhost.de</a></span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3ACompiler&rft.title=Transpiler&rft.description=Transpiler&rft.identifier=https%3A%2F%2Fweb.archive.org%2Fweb%2F20140716011252%2Fhttp%3A%2F%2Fwww.bullhost.de%2Ft%2Ftranspiler.html&rft.publisher=bullhost.de&rft.source=http://www.bullhost.de/t/transpiler.html"> </span></span> </li> </ol></div> <div class="hintergrundfarbe1 rahmenfarbe1 navigation-not-searchable normdaten-typ-s" style="border-style: solid; border-width: 1px; clear: left; margin-bottom:1em; margin-top:1em; padding: 0.25em; overflow: hidden; word-break: break-word; word-wrap: break-word;" id="normdaten"> <div style="display: table-cell; vertical-align: middle; width: 100%;"> <div> Normdaten (Sachbegriff): <a href="/wiki/Gemeinsame_Normdatei" title="Gemeinsame Normdatei">GND</a>: <span class="plainlinks-print"><a rel="nofollow" class="external text" href="https://d-nb.info/gnd/4148248-7">4148248-7</a></span> <span class="noprint">(<a rel="nofollow" class="external text" href="https://lobid.org/gnd/4148248-7">lobid</a>, <a rel="nofollow" class="external text" href="https://swb.bsz-bw.de/DB=2.104/SET=1/TTL=1/CMD?retrace=0&trm_old=&ACT=SRCHA&IKT=2999&SRT=RLV&TRM=4148248-7">OGND</a><span class="metadata">, <a rel="nofollow" class="external text" href="https://prometheus.lmu.de/gnd/4148248-7">AKS</a></span>)</span> <span class="metadata"></span></div> </div></div></div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Abgerufen von „<a dir="ltr" href="https://de.wikipedia.org/w/index.php?title=Compiler&oldid=250482251">https://de.wikipedia.org/w/index.php?title=Compiler&oldid=250482251</a>“</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/Wikipedia:Kategorien" title="Wikipedia:Kategorien">Kategorien</a>: <ul><li><a href="/wiki/Kategorie:Compilerbau" title="Kategorie:Compilerbau">Compilerbau</a></li><li><a href="/wiki/Kategorie:Programmierwerkzeug" title="Kategorie:Programmierwerkzeug">Programmierwerkzeug</a></li></ul></div><div id="mw-hidden-catlinks" class="mw-hidden-catlinks mw-hidden-cats-hidden">Versteckte Kategorie: <ul><li><a href="/wiki/Kategorie:Wikipedia:Defekte_Weblinks/Ungepr%C3%BCfte_Archivlinks_2024-11" title="Kategorie:Wikipedia:Defekte Weblinks/Ungeprüfte Archivlinks 2024-11">Wikipedia:Defekte Weblinks/Ungeprüfte Archivlinks 2024-11</a></li></ul></div></div> </div> </div> <div id="mw-navigation"> <h2>Navigationsmenü</h2> <div id="mw-head"> <nav id="p-personal" class="mw-portlet mw-portlet-personal vector-user-menu-legacy vector-menu" aria-labelledby="p-personal-label" > <h3 id="p-personal-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Meine Werkzeuge</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anonuserpage" class="mw-list-item"><span title="Benutzerseite der IP-Adresse, von der aus du Änderungen durchführst">Nicht angemeldet</span></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Spezial:Meine_Diskussionsseite" title="Diskussion über Änderungen von dieser IP-Adresse [n]" accesskey="n"><span>Diskussionsseite</span></a></li><li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/Spezial:Meine_Beitr%C3%A4ge" title="Eine Liste der Bearbeitungen, die von dieser IP-Adresse gemacht wurden [y]" accesskey="y"><span>Beiträge</span></a></li><li id="pt-createaccount" class="mw-list-item"><a href="/w/index.php?title=Spezial:Benutzerkonto_anlegen&returnto=Compiler" title="Wir ermutigen dich dazu, ein Benutzerkonto zu erstellen und dich anzumelden. Es ist jedoch nicht zwingend erforderlich."><span>Benutzerkonto erstellen</span></a></li><li id="pt-login" class="mw-list-item"><a href="/w/index.php?title=Spezial:Anmelden&returnto=Compiler" title="Anmelden ist zwar keine Pflicht, wird aber gerne gesehen. [o]" accesskey="o"><span>Anmelden</span></a></li> </ul> </div> </nav> <div id="left-navigation"> <nav id="p-namespaces" class="mw-portlet mw-portlet-namespaces vector-menu-tabs vector-menu-tabs-legacy vector-menu" aria-labelledby="p-namespaces-label" > <h3 id="p-namespaces-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Namensräume</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-main" class="selected mw-list-item"><a href="/wiki/Compiler" title="Seiteninhalt anzeigen [c]" accesskey="c"><span>Artikel</span></a></li><li id="ca-talk" class="mw-list-item"><a href="/wiki/Diskussion:Compiler" rel="discussion" title="Diskussion zum Seiteninhalt [t]" accesskey="t"><span>Diskussion</span></a></li> </ul> </div> </nav> <nav id="p-variants" class="mw-portlet mw-portlet-variants emptyPortlet vector-menu-dropdown vector-menu" aria-labelledby="p-variants-label" > <input type="checkbox" id="p-variants-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-variants" class="vector-menu-checkbox" aria-labelledby="p-variants-label" > <label id="p-variants-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Deutsch</span> </label> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </nav> </div> <div id="right-navigation"> <nav id="p-views" class="mw-portlet mw-portlet-views vector-menu-tabs vector-menu-tabs-legacy vector-menu" aria-labelledby="p-views-label" > <h3 id="p-views-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Ansichten</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="selected mw-list-item"><a href="/wiki/Compiler"><span>Lesen</span></a></li><li id="ca-ve-edit" class="mw-list-item"><a href="/w/index.php?title=Compiler&veaction=edit" title="Diese Seite mit dem VisualEditor bearbeiten [v]" accesskey="v"><span>Bearbeiten</span></a></li><li id="ca-edit" class="collapsible mw-list-item"><a href="/w/index.php?title=Compiler&action=edit" title="Den Quelltext dieser Seite bearbeiten [e]" accesskey="e"><span>Quelltext bearbeiten</span></a></li><li id="ca-history" class="mw-list-item"><a href="/w/index.php?title=Compiler&action=history" title="Frühere Versionen dieser Seite [h]" accesskey="h"><span>Versionsgeschichte</span></a></li> </ul> </div> </nav> <nav id="p-cactions" class="mw-portlet mw-portlet-cactions emptyPortlet vector-menu-dropdown vector-menu" aria-labelledby="p-cactions-label" title="Weitere Optionen" > <input type="checkbox" id="p-cactions-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-cactions" class="vector-menu-checkbox" aria-labelledby="p-cactions-label" > <label id="p-cactions-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Weitere</span> </label> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </nav> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <h3 >Suche</h3> <form action="/w/index.php" id="searchform" class="vector-search-box-form"> <div id="simpleSearch" class="vector-search-box-inner" data-search-loc="header-navigation"> <input class="vector-search-box-input" type="search" name="search" placeholder="Wikipedia durchsuchen" aria-label="Wikipedia durchsuchen" autocapitalize="sentences" title="Durchsuche die Wikipedia [f]" accesskey="f" id="searchInput" > <input type="hidden" name="title" value="Spezial:Suche"> <input id="mw-searchButton" class="searchButton mw-fallbackSearchButton" type="submit" name="fulltext" title="Suche nach Seiten, die diesen Text enthalten" value="Suchen"> <input id="searchButton" class="searchButton" type="submit" name="go" title="Gehe direkt zu der Seite mit genau diesem Namen, falls sie vorhanden ist." value="Artikel"> </div> </form> </div> </div> </div> <div id="mw-panel" class="vector-legacy-sidebar"> <div id="p-logo" role="banner"> <a class="mw-wiki-logo" href="/wiki/Wikipedia:Hauptseite" title="Hauptseite"></a> </div> <nav id="p-navigation" class="mw-portlet mw-portlet-navigation vector-menu-portal portal vector-menu" aria-labelledby="p-navigation-label" > <h3 id="p-navigation-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Navigation</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/Wikipedia:Hauptseite" title="Hauptseite besuchen [z]" accesskey="z"><span>Hauptseite</span></a></li><li id="n-topics" class="mw-list-item"><a href="/wiki/Portal:Wikipedia_nach_Themen"><span>Themenportale</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Spezial:Zuf%C3%A4llige_Seite" title="Zufällige Seite aufrufen [x]" accesskey="x"><span>Zufälliger Artikel</span></a></li> </ul> </div> </nav> <nav id="p-Mitmachen" class="mw-portlet mw-portlet-Mitmachen vector-menu-portal portal vector-menu" aria-labelledby="p-Mitmachen-label" > <h3 id="p-Mitmachen-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Mitmachen</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-Artikel-verbessern" class="mw-list-item"><a href="/wiki/Wikipedia:Beteiligen"><span>Artikel verbessern</span></a></li><li id="n-Neuerartikel" class="mw-list-item"><a href="/wiki/Hilfe:Neuen_Artikel_anlegen"><span>Neuen Artikel anlegen</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/Wikipedia:Autorenportal" title="Info-Zentrum über Beteiligungsmöglichkeiten"><span>Autorenportal</span></a></li><li id="n-help" class="mw-list-item"><a href="/wiki/Hilfe:%C3%9Cbersicht" title="Übersicht über Hilfeseiten"><span>Hilfe</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Spezial:Letzte_%C3%84nderungen" title="Liste der letzten Änderungen in Wikipedia [r]" accesskey="r"><span>Letzte Änderungen</span></a></li><li id="n-contact" class="mw-list-item"><a href="/wiki/Wikipedia:Kontakt" title="Kontaktmöglichkeiten"><span>Kontakt</span></a></li><li id="n-sitesupport" class="mw-list-item"><a href="//donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_de.wikipedia.org&uselang=de" title="Unterstütze uns"><span>Spenden</span></a></li> </ul> </div> </nav> <nav id="p-tb" class="mw-portlet mw-portlet-tb vector-menu-portal portal vector-menu" aria-labelledby="p-tb-label" > <h3 id="p-tb-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Werkzeuge</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Spezial:Linkliste/Compiler" title="Liste aller Seiten, die hierher verlinken [j]" accesskey="j"><span>Links auf diese Seite</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Spezial:%C3%84nderungen_an_verlinkten_Seiten/Compiler" rel="nofollow" title="Letzte Änderungen an Seiten, die von hier verlinkt sind [k]" accesskey="k"><span>Änderungen an verlinkten Seiten</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Spezial:Spezialseiten" title="Liste aller Spezialseiten [q]" accesskey="q"><span>Spezialseiten</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=Compiler&oldid=250482251" title="Dauerhafter Link zu dieser Seitenversion"><span>Permanenter Link</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Compiler&action=info" title="Weitere Informationen über diese Seite"><span>Seiteninformationen</span></a></li><li id="t-cite" class="mw-list-item"><a href="/w/index.php?title=Spezial:Zitierhilfe&page=Compiler&id=250482251&wpFormIdentifier=titleform" title="Hinweise, wie diese Seite zitiert werden kann"><span>Artikel zitieren</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Spezial:URL-K%C3%BCrzung&url=https%3A%2F%2Fde.wikipedia.org%2Fwiki%2FCompiler"><span>Kurzlink</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Spezial:QrCode&url=https%3A%2F%2Fde.wikipedia.org%2Fwiki%2FCompiler"><span>QR-Code herunterladen</span></a></li> </ul> </div> </nav> <nav id="p-coll-print_export" class="mw-portlet mw-portlet-coll-print_export vector-menu-portal portal vector-menu" aria-labelledby="p-coll-print_export-label" > <h3 id="p-coll-print_export-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Drucken/exportieren</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="coll-download-as-rl" class="mw-list-item"><a href="/w/index.php?title=Spezial:DownloadAsPdf&page=Compiler&action=show-download-screen"><span>Als PDF herunterladen</span></a></li><li id="t-print" class="mw-list-item"><a href="/w/index.php?title=Compiler&printable=yes" title="Druckansicht dieser Seite [p]" accesskey="p"><span>Druckversion</span></a></li> </ul> </div> </nav> <nav id="p-wikibase-otherprojects" class="mw-portlet mw-portlet-wikibase-otherprojects vector-menu-portal portal vector-menu" aria-labelledby="p-wikibase-otherprojects-label" > <h3 id="p-wikibase-otherprojects-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">In anderen Projekten</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="wb-otherproject-link wb-otherproject-commons mw-list-item"><a href="https://commons.wikimedia.org/wiki/Category:Compilers" hreflang="en"><span>Commons</span></a></li><li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q47506" title="Link zum verbundenen Objekt im Datenrepositorium [g]" accesskey="g"><span>Wikidata-Datenobjekt</span></a></li> </ul> </div> </nav> <nav id="p-lang" class="mw-portlet mw-portlet-lang vector-menu-portal portal vector-menu" aria-labelledby="p-lang-label" > <h3 id="p-lang-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">In anderen Sprachen</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="interlanguage-link interwiki-af mw-list-item"><a href="https://af.wikipedia.org/wiki/Vertalerkonstruksie" title="Vertalerkonstruksie – Afrikaans" lang="af" hreflang="af" data-title="Vertalerkonstruksie" data-language-autonym="Afrikaans" data-language-local-name="Afrikaans" class="interlanguage-link-target"><span>Afrikaans</span></a></li><li class="interlanguage-link interwiki-an mw-list-item"><a href="https://an.wikipedia.org/wiki/Compilador" title="Compilador – Aragonesisch" lang="an" hreflang="an" data-title="Compilador" data-language-autonym="Aragonés" data-language-local-name="Aragonesisch" class="interlanguage-link-target"><span>Aragonés</span></a></li><li class="interlanguage-link interwiki-ar mw-list-item"><a href="https://ar.wikipedia.org/wiki/%D9%85%D8%B5%D8%B1%D9%81_(%D8%AD%D9%88%D8%B3%D8%A8%D8%A9)" title="مصرف (حوسبة) – Arabisch" lang="ar" hreflang="ar" data-title="مصرف (حوسبة)" data-language-autonym="العربية" data-language-local-name="Arabisch" class="interlanguage-link-target"><span>العربية</span></a></li><li class="interlanguage-link interwiki-ast mw-list-item"><a href="https://ast.wikipedia.org/wiki/Compilador" title="Compilador – Asturisch" lang="ast" hreflang="ast" data-title="Compilador" data-language-autonym="Asturianu" data-language-local-name="Asturisch" class="interlanguage-link-target"><span>Asturianu</span></a></li><li class="interlanguage-link interwiki-az mw-list-item"><a href="https://az.wikipedia.org/wiki/Kompilyator" title="Kompilyator – Aserbaidschanisch" lang="az" hreflang="az" data-title="Kompilyator" data-language-autonym="Azərbaycanca" data-language-local-name="Aserbaidschanisch" class="interlanguage-link-target"><span>Azərbaycanca</span></a></li><li class="interlanguage-link interwiki-azb mw-list-item"><a href="https://azb.wikipedia.org/wiki/%D8%AF%D8%B1%D9%84%DB%8C%DB%8C%D8%AC%DB%8C_(%DA%A9%D8%A7%D9%85%D9%BE%D8%A7%DB%8C%D9%84%D8%B1)" title="درلییجی (کامپایلر) – Südaserbaidschanisch" lang="azb" hreflang="azb" data-title="درلییجی (کامپایلر)" data-language-autonym="تۆرکجه" data-language-local-name="Südaserbaidschanisch" class="interlanguage-link-target"><span>تۆرکجه</span></a></li><li class="interlanguage-link interwiki-be mw-list-item"><a href="https://be.wikipedia.org/wiki/%D0%9A%D0%B0%D0%BC%D0%BF%D1%96%D0%BB%D1%8F%D1%82%D0%B0%D1%80" title="Кампілятар – Belarussisch" lang="be" hreflang="be" data-title="Кампілятар" data-language-autonym="Беларуская" data-language-local-name="Belarussisch" class="interlanguage-link-target"><span>Беларуская</span></a></li><li class="interlanguage-link interwiki-be-x-old mw-list-item"><a href="https://be-tarask.wikipedia.org/wiki/%D0%9A%D0%B0%D0%BC%D0%BF%D1%96%D0%BB%D1%8F%D1%82%D0%B0%D1%80" title="Кампілятар – Weißrussisch (Taraschkewiza)" lang="be-tarask" hreflang="be-tarask" data-title="Кампілятар" data-language-autonym="Беларуская (тарашкевіца)" data-language-local-name="Weißrussisch (Taraschkewiza)" class="interlanguage-link-target"><span>Беларуская (тарашкевіца)</span></a></li><li class="interlanguage-link interwiki-bg mw-list-item"><a href="https://bg.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D0%B0%D1%82%D0%BE%D1%80" title="Компилатор – Bulgarisch" lang="bg" hreflang="bg" data-title="Компилатор" data-language-autonym="Български" data-language-local-name="Bulgarisch" class="interlanguage-link-target"><span>Български</span></a></li><li class="interlanguage-link interwiki-bn mw-list-item"><a href="https://bn.wikipedia.org/wiki/%E0%A6%95%E0%A6%AE%E0%A7%8D%E0%A6%AA%E0%A6%BE%E0%A6%87%E0%A6%B2%E0%A6%BE%E0%A6%B0" title="কম্পাইলার – Bengalisch" lang="bn" hreflang="bn" data-title="কম্পাইলার" data-language-autonym="বাংলা" data-language-local-name="Bengalisch" class="interlanguage-link-target"><span>বাংলা</span></a></li><li class="interlanguage-link interwiki-br mw-list-item"><a href="https://br.wikipedia.org/wiki/Kompiler" title="Kompiler – Bretonisch" lang="br" hreflang="br" data-title="Kompiler" data-language-autonym="Brezhoneg" data-language-local-name="Bretonisch" class="interlanguage-link-target"><span>Brezhoneg</span></a></li><li class="interlanguage-link interwiki-bs mw-list-item"><a href="https://bs.wikipedia.org/wiki/Kompajler" title="Kompajler – Bosnisch" lang="bs" hreflang="bs" data-title="Kompajler" data-language-autonym="Bosanski" data-language-local-name="Bosnisch" class="interlanguage-link-target"><span>Bosanski</span></a></li><li class="interlanguage-link interwiki-ca mw-list-item"><a href="https://ca.wikipedia.org/wiki/Compilador" title="Compilador – Katalanisch" lang="ca" hreflang="ca" data-title="Compilador" data-language-autonym="Català" data-language-local-name="Katalanisch" class="interlanguage-link-target"><span>Català</span></a></li><li class="interlanguage-link interwiki-ckb mw-list-item"><a href="https://ckb.wikipedia.org/wiki/%DA%A9%DB%86%D9%85%D9%BE%D8%A7%DB%8C%D9%84%DB%95%D8%B1" title="کۆمپایلەر – Zentralkurdisch" lang="ckb" hreflang="ckb" data-title="کۆمپایلەر" data-language-autonym="کوردی" data-language-local-name="Zentralkurdisch" class="interlanguage-link-target"><span>کوردی</span></a></li><li class="interlanguage-link interwiki-cs mw-list-item"><a href="https://cs.wikipedia.org/wiki/P%C5%99eklada%C4%8D" title="Překladač – Tschechisch" lang="cs" hreflang="cs" data-title="Překladač" data-language-autonym="Čeština" data-language-local-name="Tschechisch" class="interlanguage-link-target"><span>Čeština</span></a></li><li class="interlanguage-link interwiki-da mw-list-item"><a href="https://da.wikipedia.org/wiki/Compiler" title="Compiler – Dänisch" lang="da" hreflang="da" data-title="Compiler" data-language-autonym="Dansk" data-language-local-name="Dänisch" class="interlanguage-link-target"><span>Dansk</span></a></li><li class="interlanguage-link interwiki-diq mw-list-item"><a href="https://diq.wikipedia.org/wiki/Ar%C3%AAkerdo%C4%9F" title="Arêkerdoğ – Zazaki" lang="diq" hreflang="diq" data-title="Arêkerdoğ" data-language-autonym="Zazaki" data-language-local-name="Zazaki" class="interlanguage-link-target"><span>Zazaki</span></a></li><li class="interlanguage-link interwiki-el mw-list-item"><a href="https://el.wikipedia.org/wiki/%CE%9C%CE%B5%CF%84%CE%B1%CE%B3%CE%BB%CF%89%CF%84%CF%84%CE%B9%CF%83%CF%84%CE%AE%CF%82_(%CF%85%CF%80%CE%BF%CE%BB%CE%BF%CE%B3%CE%B9%CF%83%CF%84%CE%AD%CF%82)" title="Μεταγλωττιστής (υπολογιστές) – Griechisch" lang="el" hreflang="el" data-title="Μεταγλωττιστής (υπολογιστές)" data-language-autonym="Ελληνικά" data-language-local-name="Griechisch" class="interlanguage-link-target"><span>Ελληνικά</span></a></li><li class="interlanguage-link interwiki-en mw-list-item"><a href="https://en.wikipedia.org/wiki/Compiler" title="Compiler – Englisch" lang="en" hreflang="en" data-title="Compiler" data-language-autonym="English" data-language-local-name="Englisch" class="interlanguage-link-target"><span>English</span></a></li><li class="interlanguage-link interwiki-eo mw-list-item"><a href="https://eo.wikipedia.org/wiki/Tradukilo" title="Tradukilo – Esperanto" lang="eo" hreflang="eo" data-title="Tradukilo" data-language-autonym="Esperanto" data-language-local-name="Esperanto" class="interlanguage-link-target"><span>Esperanto</span></a></li><li class="interlanguage-link interwiki-es mw-list-item"><a href="https://es.wikipedia.org/wiki/Compilador" title="Compilador – Spanisch" lang="es" hreflang="es" data-title="Compilador" data-language-autonym="Español" data-language-local-name="Spanisch" class="interlanguage-link-target"><span>Español</span></a></li><li class="interlanguage-link interwiki-et mw-list-item"><a href="https://et.wikipedia.org/wiki/Kompilaator" title="Kompilaator – Estnisch" lang="et" hreflang="et" data-title="Kompilaator" data-language-autonym="Eesti" data-language-local-name="Estnisch" class="interlanguage-link-target"><span>Eesti</span></a></li><li class="interlanguage-link interwiki-eu mw-list-item"><a href="https://eu.wikipedia.org/wiki/Konpiladore" title="Konpiladore – Baskisch" lang="eu" hreflang="eu" data-title="Konpiladore" data-language-autonym="Euskara" data-language-local-name="Baskisch" class="interlanguage-link-target"><span>Euskara</span></a></li><li class="interlanguage-link interwiki-fa mw-list-item"><a href="https://fa.wikipedia.org/wiki/%DA%A9%D8%A7%D9%85%D9%BE%D8%A7%DB%8C%D9%84%D8%B1" title="کامپایلر – Persisch" lang="fa" hreflang="fa" data-title="کامپایلر" data-language-autonym="فارسی" data-language-local-name="Persisch" class="interlanguage-link-target"><span>فارسی</span></a></li><li class="interlanguage-link interwiki-fi mw-list-item"><a href="https://fi.wikipedia.org/wiki/Ohjelmointikielen_k%C3%A4%C3%A4nt%C3%A4j%C3%A4" title="Ohjelmointikielen kääntäjä – Finnisch" lang="fi" hreflang="fi" data-title="Ohjelmointikielen kääntäjä" data-language-autonym="Suomi" data-language-local-name="Finnisch" class="interlanguage-link-target"><span>Suomi</span></a></li><li class="interlanguage-link interwiki-fr mw-list-item"><a href="https://fr.wikipedia.org/wiki/Compilateur" title="Compilateur – Französisch" lang="fr" hreflang="fr" data-title="Compilateur" data-language-autonym="Français" data-language-local-name="Französisch" class="interlanguage-link-target"><span>Français</span></a></li><li class="interlanguage-link interwiki-ga mw-list-item"><a href="https://ga.wikipedia.org/wiki/Tiomsaitheoir" title="Tiomsaitheoir – Irisch" lang="ga" hreflang="ga" data-title="Tiomsaitheoir" data-language-autonym="Gaeilge" data-language-local-name="Irisch" class="interlanguage-link-target"><span>Gaeilge</span></a></li><li class="interlanguage-link interwiki-gl mw-list-item"><a href="https://gl.wikipedia.org/wiki/Compilador" title="Compilador – Galicisch" lang="gl" hreflang="gl" data-title="Compilador" data-language-autonym="Galego" data-language-local-name="Galicisch" class="interlanguage-link-target"><span>Galego</span></a></li><li class="interlanguage-link interwiki-ha mw-list-item"><a href="https://ha.wikipedia.org/wiki/Compiler" title="Compiler – Haussa" lang="ha" hreflang="ha" data-title="Compiler" data-language-autonym="Hausa" data-language-local-name="Haussa" class="interlanguage-link-target"><span>Hausa</span></a></li><li class="interlanguage-link interwiki-he mw-list-item"><a href="https://he.wikipedia.org/wiki/%D7%9E%D7%94%D7%93%D7%A8" title="מהדר – Hebräisch" lang="he" hreflang="he" data-title="מהדר" data-language-autonym="עברית" data-language-local-name="Hebräisch" class="interlanguage-link-target"><span>עברית</span></a></li><li class="interlanguage-link interwiki-hi mw-list-item"><a href="https://hi.wikipedia.org/wiki/%E0%A4%85%E0%A4%A8%E0%A5%81%E0%A4%AD%E0%A4%BE%E0%A4%B7%E0%A4%95" title="अनुभाषक – Hindi" lang="hi" hreflang="hi" data-title="अनुभाषक" data-language-autonym="हिन्दी" data-language-local-name="Hindi" class="interlanguage-link-target"><span>हिन्दी</span></a></li><li class="interlanguage-link interwiki-hr mw-list-item"><a href="https://hr.wikipedia.org/wiki/Jezi%C4%8Dni_prevoditelj" title="Jezični prevoditelj – Kroatisch" lang="hr" hreflang="hr" data-title="Jezični prevoditelj" data-language-autonym="Hrvatski" data-language-local-name="Kroatisch" class="interlanguage-link-target"><span>Hrvatski</span></a></li><li class="interlanguage-link interwiki-hsb mw-list-item"><a href="https://hsb.wikipedia.org/wiki/Kompilator" title="Kompilator – Obersorbisch" lang="hsb" hreflang="hsb" data-title="Kompilator" data-language-autonym="Hornjoserbsce" data-language-local-name="Obersorbisch" class="interlanguage-link-target"><span>Hornjoserbsce</span></a></li><li class="interlanguage-link interwiki-hu mw-list-item"><a href="https://hu.wikipedia.org/wiki/Ford%C3%ADt%C3%B3program" title="Fordítóprogram – Ungarisch" lang="hu" hreflang="hu" data-title="Fordítóprogram" data-language-autonym="Magyar" data-language-local-name="Ungarisch" class="interlanguage-link-target"><span>Magyar</span></a></li><li class="interlanguage-link interwiki-hy mw-list-item"><a href="https://hy.wikipedia.org/wiki/%D4%BF%D5%B8%D5%B4%D5%BA%D5%AB%D5%AC%D5%B5%D5%A1%D5%BF%D5%B8%D6%80" title="Կոմպիլյատոր – Armenisch" lang="hy" hreflang="hy" data-title="Կոմպիլյատոր" data-language-autonym="Հայերեն" data-language-local-name="Armenisch" class="interlanguage-link-target"><span>Հայերեն</span></a></li><li class="interlanguage-link interwiki-ia mw-list-item"><a href="https://ia.wikipedia.org/wiki/Compilator" title="Compilator – Interlingua" lang="ia" hreflang="ia" data-title="Compilator" data-language-autonym="Interlingua" data-language-local-name="Interlingua" class="interlanguage-link-target"><span>Interlingua</span></a></li><li class="interlanguage-link interwiki-id mw-list-item"><a href="https://id.wikipedia.org/wiki/Kompilator" title="Kompilator – Indonesisch" lang="id" hreflang="id" data-title="Kompilator" data-language-autonym="Bahasa Indonesia" data-language-local-name="Indonesisch" class="interlanguage-link-target"><span>Bahasa Indonesia</span></a></li><li class="interlanguage-link interwiki-ilo mw-list-item"><a href="https://ilo.wikipedia.org/wiki/Manggupgop" title="Manggupgop – Ilokano" lang="ilo" hreflang="ilo" data-title="Manggupgop" data-language-autonym="Ilokano" data-language-local-name="Ilokano" class="interlanguage-link-target"><span>Ilokano</span></a></li><li class="interlanguage-link interwiki-io mw-list-item"><a href="https://io.wikipedia.org/wiki/Kompililo" title="Kompililo – Ido" lang="io" hreflang="io" data-title="Kompililo" data-language-autonym="Ido" data-language-local-name="Ido" class="interlanguage-link-target"><span>Ido</span></a></li><li class="interlanguage-link interwiki-is mw-list-item"><a href="https://is.wikipedia.org/wiki/%C3%9E%C3%BD%C3%B0andi_(t%C3%B6lvunarfr%C3%A6%C3%B0i)" title="Þýðandi (tölvunarfræði) – Isländisch" lang="is" hreflang="is" data-title="Þýðandi (tölvunarfræði)" data-language-autonym="Íslenska" data-language-local-name="Isländisch" class="interlanguage-link-target"><span>Íslenska</span></a></li><li class="interlanguage-link interwiki-it mw-list-item"><a href="https://it.wikipedia.org/wiki/Compilatore" title="Compilatore – Italienisch" lang="it" hreflang="it" data-title="Compilatore" data-language-autonym="Italiano" data-language-local-name="Italienisch" class="interlanguage-link-target"><span>Italiano</span></a></li><li class="interlanguage-link interwiki-ja mw-list-item"><a href="https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9" title="コンパイラ – Japanisch" lang="ja" hreflang="ja" data-title="コンパイラ" data-language-autonym="日本語" data-language-local-name="Japanisch" class="interlanguage-link-target"><span>日本語</span></a></li><li class="interlanguage-link interwiki-ka mw-list-item"><a href="https://ka.wikipedia.org/wiki/%E1%83%99%E1%83%9D%E1%83%9B%E1%83%9E%E1%83%98%E1%83%9A%E1%83%90%E1%83%A2%E1%83%9D%E1%83%A0%E1%83%98" title="კომპილატორი – Georgisch" lang="ka" hreflang="ka" data-title="კომპილატორი" data-language-autonym="ქართული" data-language-local-name="Georgisch" class="interlanguage-link-target"><span>ქართული</span></a></li><li class="interlanguage-link interwiki-kaa mw-list-item"><a href="https://kaa.wikipedia.org/wiki/Kompilyator" title="Kompilyator – Karakalpakisch" lang="kaa" hreflang="kaa" data-title="Kompilyator" data-language-autonym="Qaraqalpaqsha" data-language-local-name="Karakalpakisch" class="interlanguage-link-target"><span>Qaraqalpaqsha</span></a></li><li class="interlanguage-link interwiki-kk mw-list-item"><a href="https://kk.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%82%D0%BE%D1%80" title="Компилятор – Kasachisch" lang="kk" hreflang="kk" data-title="Компилятор" data-language-autonym="Қазақша" data-language-local-name="Kasachisch" class="interlanguage-link-target"><span>Қазақша</span></a></li><li class="interlanguage-link interwiki-ko mw-list-item"><a href="https://ko.wikipedia.org/wiki/%EC%BB%B4%ED%8C%8C%EC%9D%BC%EB%9F%AC" title="컴파일러 – Koreanisch" lang="ko" hreflang="ko" data-title="컴파일러" data-language-autonym="한국어" data-language-local-name="Koreanisch" class="interlanguage-link-target"><span>한국어</span></a></li><li class="interlanguage-link interwiki-ky mw-list-item"><a href="https://ky.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D0%B5%D1%80" title="Компилер – Kirgisisch" lang="ky" hreflang="ky" data-title="Компилер" data-language-autonym="Кыргызча" data-language-local-name="Kirgisisch" class="interlanguage-link-target"><span>Кыргызча</span></a></li><li class="interlanguage-link interwiki-la mw-list-item"><a href="https://la.wikipedia.org/wiki/Compilatrum" title="Compilatrum – Latein" lang="la" hreflang="la" data-title="Compilatrum" data-language-autonym="Latina" data-language-local-name="Latein" class="interlanguage-link-target"><span>Latina</span></a></li><li class="interlanguage-link interwiki-lb mw-list-item"><a href="https://lb.wikipedia.org/wiki/Compiler" title="Compiler – Luxemburgisch" lang="lb" hreflang="lb" data-title="Compiler" data-language-autonym="Lëtzebuergesch" data-language-local-name="Luxemburgisch" class="interlanguage-link-target"><span>Lëtzebuergesch</span></a></li><li class="interlanguage-link interwiki-lfn mw-list-item"><a href="https://lfn.wikipedia.org/wiki/Compilador" title="Compilador – Lingua Franca Nova" lang="lfn" hreflang="lfn" data-title="Compilador" data-language-autonym="Lingua Franca Nova" data-language-local-name="Lingua Franca Nova" class="interlanguage-link-target"><span>Lingua Franca Nova</span></a></li><li class="interlanguage-link interwiki-lmo mw-list-item"><a href="https://lmo.wikipedia.org/wiki/Compilator" title="Compilator – Lombardisch" lang="lmo" hreflang="lmo" data-title="Compilator" data-language-autonym="Lombard" data-language-local-name="Lombardisch" class="interlanguage-link-target"><span>Lombard</span></a></li><li class="interlanguage-link interwiki-lt mw-list-item"><a href="https://lt.wikipedia.org/wiki/Kompiliatorius" title="Kompiliatorius – Litauisch" lang="lt" hreflang="lt" data-title="Kompiliatorius" data-language-autonym="Lietuvių" data-language-local-name="Litauisch" class="interlanguage-link-target"><span>Lietuvių</span></a></li><li class="interlanguage-link interwiki-lv mw-list-item"><a href="https://lv.wikipedia.org/wiki/Kompilators" title="Kompilators – Lettisch" lang="lv" hreflang="lv" data-title="Kompilators" data-language-autonym="Latviešu" data-language-local-name="Lettisch" class="interlanguage-link-target"><span>Latviešu</span></a></li><li class="interlanguage-link interwiki-mhr mw-list-item"><a href="https://mhr.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D0%B9" title="Компиляций – Ostmari" lang="mhr" hreflang="mhr" data-title="Компиляций" data-language-autonym="Олык марий" data-language-local-name="Ostmari" class="interlanguage-link-target"><span>Олык марий</span></a></li><li class="interlanguage-link interwiki-mk mw-list-item"><a href="https://mk.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%81%D0%BA%D0%B8_%D0%BF%D1%80%D0%B5%D0%B2%D0%B5%D0%B4%D1%83%D0%B2%D0%B0%D1%87" title="Програмски преведувач – Mazedonisch" lang="mk" hreflang="mk" data-title="Програмски преведувач" data-language-autonym="Македонски" data-language-local-name="Mazedonisch" class="interlanguage-link-target"><span>Македонски</span></a></li><li class="interlanguage-link interwiki-ml mw-list-item"><a href="https://ml.wikipedia.org/wiki/%E0%B4%95%E0%B4%82%E0%B4%AA%E0%B5%88%E0%B4%B2%E0%B5%BC" title="കംപൈലർ – Malayalam" lang="ml" hreflang="ml" data-title="കംപൈലർ" data-language-autonym="മലയാളം" data-language-local-name="Malayalam" class="interlanguage-link-target"><span>മലയാളം</span></a></li><li class="interlanguage-link interwiki-mn mw-list-item"><a href="https://mn.wikipedia.org/wiki/Compiler" title="Compiler – Mongolisch" lang="mn" hreflang="mn" data-title="Compiler" data-language-autonym="Монгол" data-language-local-name="Mongolisch" class="interlanguage-link-target"><span>Монгол</span></a></li><li class="interlanguage-link interwiki-ms mw-list-item"><a href="https://ms.wikipedia.org/wiki/Penyusun" title="Penyusun – Malaiisch" lang="ms" hreflang="ms" data-title="Penyusun" data-language-autonym="Bahasa Melayu" data-language-local-name="Malaiisch" class="interlanguage-link-target"><span>Bahasa Melayu</span></a></li><li class="interlanguage-link interwiki-mwl mw-list-item"><a href="https://mwl.wikipedia.org/wiki/Cumpilador" title="Cumpilador – Mirandesisch" lang="mwl" hreflang="mwl" data-title="Cumpilador" data-language-autonym="Mirandés" data-language-local-name="Mirandesisch" class="interlanguage-link-target"><span>Mirandés</span></a></li><li class="interlanguage-link interwiki-my mw-list-item"><a href="https://my.wikipedia.org/wiki/Compiler" title="Compiler – Birmanisch" lang="my" hreflang="my" data-title="Compiler" data-language-autonym="မြန်မာဘာသာ" data-language-local-name="Birmanisch" class="interlanguage-link-target"><span>မြန်မာဘာသာ</span></a></li><li class="interlanguage-link interwiki-ne mw-list-item"><a href="https://ne.wikipedia.org/wiki/%E0%A4%95%E0%A4%AE%E0%A5%8D%E0%A4%AA%E0%A4%BE%E0%A4%87%E0%A4%B2%E0%A4%B0" title="कम्पाइलर – Nepalesisch" lang="ne" hreflang="ne" data-title="कम्पाइलर" data-language-autonym="नेपाली" data-language-local-name="Nepalesisch" class="interlanguage-link-target"><span>नेपाली</span></a></li><li class="interlanguage-link interwiki-nl mw-list-item"><a href="https://nl.wikipedia.org/wiki/Compiler" title="Compiler – Niederländisch" lang="nl" hreflang="nl" data-title="Compiler" data-language-autonym="Nederlands" data-language-local-name="Niederländisch" class="interlanguage-link-target"><span>Nederlands</span></a></li><li class="interlanguage-link interwiki-no mw-list-item"><a href="https://no.wikipedia.org/wiki/Kompilator" title="Kompilator – Norwegisch (Bokmål)" lang="nb" hreflang="nb" data-title="Kompilator" data-language-autonym="Norsk bokmål" data-language-local-name="Norwegisch (Bokmål)" class="interlanguage-link-target"><span>Norsk bokmål</span></a></li><li class="interlanguage-link interwiki-pa mw-list-item"><a href="https://pa.wikipedia.org/wiki/%E0%A8%95%E0%A9%B0%E0%A8%AA%E0%A8%BE%E0%A8%87%E0%A8%B2%E0%A8%B0" title="ਕੰਪਾਇਲਰ – Punjabi" lang="pa" hreflang="pa" data-title="ਕੰਪਾਇਲਰ" data-language-autonym="ਪੰਜਾਬੀ" data-language-local-name="Punjabi" class="interlanguage-link-target"><span>ਪੰਜਾਬੀ</span></a></li><li class="interlanguage-link interwiki-pl mw-list-item"><a href="https://pl.wikipedia.org/wiki/Kompilator" title="Kompilator – Polnisch" lang="pl" hreflang="pl" data-title="Kompilator" data-language-autonym="Polski" data-language-local-name="Polnisch" class="interlanguage-link-target"><span>Polski</span></a></li><li class="interlanguage-link interwiki-pnb mw-list-item"><a href="https://pnb.wikipedia.org/wiki/%DA%A9%D9%85%D9%BE%D8%A7%D8%A6%D9%84%D8%B1" title="کمپائلر – Westliches Panjabi" lang="pnb" hreflang="pnb" data-title="کمپائلر" data-language-autonym="پنجابی" data-language-local-name="Westliches Panjabi" class="interlanguage-link-target"><span>پنجابی</span></a></li><li class="interlanguage-link interwiki-pt mw-list-item"><a href="https://pt.wikipedia.org/wiki/Compilador" title="Compilador – Portugiesisch" lang="pt" hreflang="pt" data-title="Compilador" data-language-autonym="Português" data-language-local-name="Portugiesisch" class="interlanguage-link-target"><span>Português</span></a></li><li class="interlanguage-link interwiki-qu mw-list-item"><a href="https://qu.wikipedia.org/wiki/Suntuq_(anta%C3%B1iqiy)" title="Suntuq (antañiqiy) – Quechua" lang="qu" hreflang="qu" data-title="Suntuq (antañiqiy)" data-language-autonym="Runa Simi" data-language-local-name="Quechua" class="interlanguage-link-target"><span>Runa Simi</span></a></li><li class="interlanguage-link interwiki-ro mw-list-item"><a href="https://ro.wikipedia.org/wiki/Compilator" title="Compilator – Rumänisch" lang="ro" hreflang="ro" data-title="Compilator" data-language-autonym="Română" data-language-local-name="Rumänisch" class="interlanguage-link-target"><span>Română</span></a></li><li class="interlanguage-link interwiki-ru mw-list-item"><a href="https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%82%D0%BE%D1%80" title="Компилятор – Russisch" lang="ru" hreflang="ru" data-title="Компилятор" data-language-autonym="Русский" data-language-local-name="Russisch" class="interlanguage-link-target"><span>Русский</span></a></li><li class="interlanguage-link interwiki-sco mw-list-item"><a href="https://sco.wikipedia.org/wiki/Compiler" title="Compiler – Schottisch" lang="sco" hreflang="sco" data-title="Compiler" data-language-autonym="Scots" data-language-local-name="Schottisch" class="interlanguage-link-target"><span>Scots</span></a></li><li class="interlanguage-link interwiki-sh mw-list-item"><a href="https://sh.wikipedia.org/wiki/Kompajler" title="Kompajler – Serbokroatisch" lang="sh" hreflang="sh" data-title="Kompajler" data-language-autonym="Srpskohrvatski / српскохрватски" data-language-local-name="Serbokroatisch" class="interlanguage-link-target"><span>Srpskohrvatski / српскохрватски</span></a></li><li class="interlanguage-link interwiki-simple mw-list-item"><a href="https://simple.wikipedia.org/wiki/Compiler" title="Compiler – einfaches Englisch" lang="en-simple" hreflang="en-simple" data-title="Compiler" data-language-autonym="Simple English" data-language-local-name="einfaches Englisch" class="interlanguage-link-target"><span>Simple English</span></a></li><li class="interlanguage-link interwiki-sk mw-list-item"><a href="https://sk.wikipedia.org/wiki/Kompil%C3%A1tor_(programovanie)" title="Kompilátor (programovanie) – Slowakisch" lang="sk" hreflang="sk" data-title="Kompilátor (programovanie)" data-language-autonym="Slovenčina" data-language-local-name="Slowakisch" class="interlanguage-link-target"><span>Slovenčina</span></a></li><li class="interlanguage-link interwiki-sl mw-list-item"><a href="https://sl.wikipedia.org/wiki/Prevajalnik" title="Prevajalnik – Slowenisch" lang="sl" hreflang="sl" data-title="Prevajalnik" data-language-autonym="Slovenščina" data-language-local-name="Slowenisch" class="interlanguage-link-target"><span>Slovenščina</span></a></li><li class="interlanguage-link interwiki-sq mw-list-item"><a href="https://sq.wikipedia.org/wiki/P%C3%ABrpiluesi" title="Përpiluesi – Albanisch" lang="sq" hreflang="sq" data-title="Përpiluesi" data-language-autonym="Shqip" data-language-local-name="Albanisch" class="interlanguage-link-target"><span>Shqip</span></a></li><li class="interlanguage-link interwiki-sr mw-list-item"><a href="https://sr.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D0%B0%D1%82%D0%BE%D1%80" title="Компилатор – Serbisch" lang="sr" hreflang="sr" data-title="Компилатор" data-language-autonym="Српски / srpski" data-language-local-name="Serbisch" class="interlanguage-link-target"><span>Српски / srpski</span></a></li><li class="interlanguage-link interwiki-sv mw-list-item"><a href="https://sv.wikipedia.org/wiki/Kompilator" title="Kompilator – Schwedisch" lang="sv" hreflang="sv" data-title="Kompilator" data-language-autonym="Svenska" data-language-local-name="Schwedisch" class="interlanguage-link-target"><span>Svenska</span></a></li><li class="interlanguage-link interwiki-sw mw-list-item"><a href="https://sw.wikipedia.org/wiki/Kikonganyi" title="Kikonganyi – Suaheli" lang="sw" hreflang="sw" data-title="Kikonganyi" data-language-autonym="Kiswahili" data-language-local-name="Suaheli" class="interlanguage-link-target"><span>Kiswahili</span></a></li><li class="interlanguage-link interwiki-ta mw-list-item"><a href="https://ta.wikipedia.org/wiki/%E0%AE%A8%E0%AE%BF%E0%AE%B0%E0%AE%B2%E0%AF%8D%E0%AE%AE%E0%AF%8A%E0%AE%B4%E0%AE%BF%E0%AE%AE%E0%AE%BE%E0%AE%B1%E0%AF%8D%E0%AE%B1%E0%AE%BF" title="நிரல்மொழிமாற்றி – Tamil" lang="ta" hreflang="ta" data-title="நிரல்மொழிமாற்றி" data-language-autonym="தமிழ்" data-language-local-name="Tamil" class="interlanguage-link-target"><span>தமிழ்</span></a></li><li class="interlanguage-link interwiki-te mw-list-item"><a href="https://te.wikipedia.org/wiki/%E0%B0%95%E0%B0%82%E0%B0%AA%E0%B1%88%E0%B0%B2%E0%B0%B0%E0%B1%8D" title="కంపైలర్ – Telugu" lang="te" hreflang="te" data-title="కంపైలర్" data-language-autonym="తెలుగు" data-language-local-name="Telugu" class="interlanguage-link-target"><span>తెలుగు</span></a></li><li class="interlanguage-link interwiki-tg mw-list-item"><a href="https://tg.wikipedia.org/wiki/%D0%9C%D1%83%D1%82%D0%B0%D1%80%D2%B7%D0%B8%D0%BC_(%D1%80%D0%BE%D1%91%D0%BD%D0%B0)" title="Мутарҷим (роёна) – Tadschikisch" lang="tg" hreflang="tg" data-title="Мутарҷим (роёна)" data-language-autonym="Тоҷикӣ" data-language-local-name="Tadschikisch" class="interlanguage-link-target"><span>Тоҷикӣ</span></a></li><li class="interlanguage-link interwiki-th mw-list-item"><a href="https://th.wikipedia.org/wiki/%E0%B8%84%E0%B8%AD%E0%B8%A1%E0%B9%84%E0%B8%9E%E0%B9%80%E0%B8%A5%E0%B8%AD%E0%B8%A3%E0%B9%8C" title="คอมไพเลอร์ – Thailändisch" lang="th" hreflang="th" data-title="คอมไพเลอร์" data-language-autonym="ไทย" data-language-local-name="Thailändisch" class="interlanguage-link-target"><span>ไทย</span></a></li><li class="interlanguage-link interwiki-tl mw-list-item"><a href="https://tl.wikipedia.org/wiki/Compiler" title="Compiler – Tagalog" lang="tl" hreflang="tl" data-title="Compiler" data-language-autonym="Tagalog" data-language-local-name="Tagalog" class="interlanguage-link-target"><span>Tagalog</span></a></li><li class="interlanguage-link interwiki-tr mw-list-item"><a href="https://tr.wikipedia.org/wiki/Derleyici" title="Derleyici – Türkisch" lang="tr" hreflang="tr" data-title="Derleyici" data-language-autonym="Türkçe" data-language-local-name="Türkisch" class="interlanguage-link-target"><span>Türkçe</span></a></li><li class="interlanguage-link interwiki-uk mw-list-item"><a href="https://uk.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D1%96%D0%BB%D1%8F%D1%82%D0%BE%D1%80" title="Компілятор – Ukrainisch" lang="uk" hreflang="uk" data-title="Компілятор" data-language-autonym="Українська" data-language-local-name="Ukrainisch" class="interlanguage-link-target"><span>Українська</span></a></li><li class="interlanguage-link interwiki-ur mw-list-item"><a href="https://ur.wikipedia.org/wiki/%DA%A9%D9%85%D9%BE%D8%A7%D8%A6%D9%84%D8%B1" title="کمپائلر – Urdu" lang="ur" hreflang="ur" data-title="کمپائلر" data-language-autonym="اردو" data-language-local-name="Urdu" class="interlanguage-link-target"><span>اردو</span></a></li><li class="interlanguage-link interwiki-vi mw-list-item"><a href="https://vi.wikipedia.org/wiki/Tr%C3%ACnh_bi%C3%AAn_d%E1%BB%8Bch" title="Trình biên dịch – Vietnamesisch" lang="vi" hreflang="vi" data-title="Trình biên dịch" data-language-autonym="Tiếng Việt" data-language-local-name="Vietnamesisch" class="interlanguage-link-target"><span>Tiếng Việt</span></a></li><li class="interlanguage-link interwiki-war mw-list-item"><a href="https://war.wikipedia.org/wiki/Kompilador" title="Kompilador – Waray" lang="war" hreflang="war" data-title="Kompilador" data-language-autonym="Winaray" data-language-local-name="Waray" class="interlanguage-link-target"><span>Winaray</span></a></li><li class="interlanguage-link interwiki-wuu mw-list-item"><a href="https://wuu.wikipedia.org/wiki/%E7%BC%96%E8%AF%91%E5%99%A8" title="编译器 – Wu" lang="wuu" hreflang="wuu" data-title="编译器" data-language-autonym="吴语" data-language-local-name="Wu" class="interlanguage-link-target"><span>吴语</span></a></li><li class="interlanguage-link interwiki-yi mw-list-item"><a href="https://yi.wikipedia.org/wiki/%D7%A7%D7%90%D7%9E%D7%A4%D7%99%D7%99%D7%9C%D7%A2%D7%A8" title="קאמפיילער – Jiddisch" lang="yi" hreflang="yi" data-title="קאמפיילער" data-language-autonym="ייִדיש" data-language-local-name="Jiddisch" class="interlanguage-link-target"><span>ייִדיש</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wikipedia.org/wiki/%E7%B7%A8%E8%AD%AF%E5%99%A8" title="編譯器 – Chinesisch" lang="zh" hreflang="zh" data-title="編譯器" data-language-autonym="中文" data-language-local-name="Chinesisch" class="interlanguage-link-target"><span>中文</span></a></li><li class="interlanguage-link interwiki-zh-min-nan mw-list-item"><a href="https://zh-min-nan.wikipedia.org/wiki/Chhau-chi%CC%8Dp-kh%C3%AC" title="Chhau-chi̍p-khì – Min Nan" lang="nan" hreflang="nan" data-title="Chhau-chi̍p-khì" data-language-autonym="閩南語 / Bân-lâm-gú" data-language-local-name="Min Nan" class="interlanguage-link-target"><span>閩南語 / Bân-lâm-gú</span></a></li><li class="interlanguage-link interwiki-zh-yue mw-list-item"><a href="https://zh-yue.wikipedia.org/wiki/%E7%B7%A8%E8%AD%AF%E5%99%A8" title="編譯器 – Kantonesisch" lang="yue" hreflang="yue" data-title="編譯器" data-language-autonym="粵語" data-language-local-name="Kantonesisch" class="interlanguage-link-target"><span>粵語</span></a></li> </ul> <div class="after-portlet after-portlet-lang"><span class="wb-langlinks-edit wb-langlinks-link"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q47506#sitelinks-wikipedia" title="Links auf Artikel in anderen Sprachen bearbeiten" class="wbc-editpage">Links bearbeiten</a></span></div> </div> </nav> </div> </div> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> Diese Seite wurde zuletzt am 19. November 2024 um 10:09 Uhr bearbeitet.</li> <li id="footer-info-copyright"><div id="footer-info-copyright-stats" class="noprint"><a rel="nofollow" class="external text" href="https://pageviews.wmcloud.org/?pages=Compiler&project=de.wikipedia.org">Abrufstatistik</a> · <a rel="nofollow" class="external text" href="https://xtools.wmcloud.org/authorship/de.wikipedia.org/Compiler?uselang=de">Autoren</a> </div><div id="footer-info-copyright-separator"><br /></div><div id="footer-info-copyright-info"> <p>Der Text ist unter der Lizenz <a rel="nofollow" class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">„Creative-Commons Namensnennung – Weitergabe unter gleichen Bedingungen“</a> verfügbar; Informationen zu den Urhebern und zum Lizenzstatus eingebundener Mediendateien (etwa Bilder oder Videos) können im Regelfall durch Anklicken dieser abgerufen werden. Möglicherweise unterliegen die Inhalte jeweils zusätzlichen Bedingungen. Durch die Nutzung dieser Website erklären Sie sich mit den <span class="plainlinks"><a class="external text" href="https://foundation.wikimedia.org/wiki/Policy:Terms_of_Use/de">Nutzungsbedingungen</a> und der <a class="external text" href="https://foundation.wikimedia.org/wiki/Policy:Privacy_policy/de">Datenschutzrichtlinie</a></span> einverstanden.<br /> </p> Wikipedia® ist eine eingetragene Marke der Wikimedia Foundation Inc.</div></li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy/de">Datenschutz</a></li> <li id="footer-places-about"><a href="/wiki/Wikipedia:%C3%9Cber_Wikipedia">Über Wikipedia</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wikipedia:Impressum">Impressum</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Verhaltenskodex</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Entwickler</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/de.wikipedia.org">Statistiken</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Stellungnahme zu Cookies</a></li> <li id="footer-places-mobileview"><a href="//de.m.wikipedia.org/w/index.php?title=Compiler&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobile Ansicht</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" loading="lazy"></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/w/resources/assets/poweredby_mediawiki.svg" alt="Powered by MediaWiki" width="88" height="31" loading="lazy"></a></li> </ul> </footer> <script>(RLQ=window.RLQ||[]).push(function(){mw.log.warn("This page is using the deprecated ResourceLoader module \"codex-search-styles\".\n[1.43] Use a CodexModule with codexComponents to set your specific components used: https://www.mediawiki.org/wiki/Codex#Using_a_limited_subset_of_components");mw.config.set({"wgHostname":"mw-web.codfw.main-847495b4dd-pc7vp","wgBackendResponseTime":205,"wgPageParseReport":{"limitreport":{"cputime":"0.280","walltime":"0.388","ppvisitednodes":{"value":2574,"limit":1000000},"postexpandincludesize":{"value":37195,"limit":2097152},"templateargumentsize":{"value":6934,"limit":2097152},"expansiondepth":{"value":16,"limit":100},"expensivefunctioncount":{"value":19,"limit":500},"unstrip-depth":{"value":1,"limit":20},"unstrip-size":{"value":35312,"limit":5000000},"entityaccesscount":{"value":1,"limit":400},"timingprofile":["100.00% 298.202 1 -total"," 24.79% 73.924 3 Vorlage:Internetquelle"," 18.77% 55.961 7 Vorlage:Literatur"," 10.48% 31.244 1 Vorlage:Normdaten"," 8.78% 26.196 2 Vorlage:Webarchiv"," 8.63% 25.743 1 Vorlage:Wikidata-Registrierung"," 7.40% 22.071 1 Vorlage:Weiterleitungshinweis"," 6.91% 20.613 2 Vorlage:Hinweisbaustein"," 5.95% 17.758 2 Vorlage:EnS"," 4.86% 14.494 1 Vorlage:HLS"]},"scribunto":{"limitreport-timeusage":{"value":"0.094","limit":"10.000"},"limitreport-memusage":{"value":4611343,"limit":52428800}},"cachereport":{"origin":"mw-web.codfw.main-8f575c78d-vcjzj","timestamp":"20241126213525","ttl":2592000,"transientcontent":false}}});});</script> <script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Article","name":"Compiler","url":"https:\/\/de.wikipedia.org\/wiki\/Compiler","sameAs":"http:\/\/www.wikidata.org\/entity\/Q47506","mainEntity":"http:\/\/www.wikidata.org\/entity\/Q47506","author":{"@type":"Organization","name":"Autoren der Wikimedia-Projekte"},"publisher":{"@type":"Organization","name":"Wikimedia Foundation, Inc.","logo":{"@type":"ImageObject","url":"https:\/\/www.wikimedia.org\/static\/images\/wmf-hor-googpub.png"}},"datePublished":"2002-08-03T02:58:19Z","headline":"Computerprogramm, das Quellcode in ausf\u00fchrbare Maschinensprache \u00fcbersetzt"}</script> </body> </html>