<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
		<id>https://wiki.delphigl.com/index.php?action=history&amp;feed=atom&amp;title=Tutorial_Scriptsprachen_Teil_2</id>
		<title>Tutorial Scriptsprachen Teil 2 - Versionsgeschichte</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.delphigl.com/index.php?action=history&amp;feed=atom&amp;title=Tutorial_Scriptsprachen_Teil_2"/>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Tutorial_Scriptsprachen_Teil_2&amp;action=history"/>
		<updated>2026-04-29T15:25:28Z</updated>
		<subtitle>Versionsgeschichte dieser Seite in DGL Wiki</subtitle>
		<generator>MediaWiki 1.27.4</generator>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Tutorial_Scriptsprachen_Teil_2&amp;diff=25601&amp;oldid=prev</id>
		<title>Openglerf: Maschiene -&gt; Maschine</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Tutorial_Scriptsprachen_Teil_2&amp;diff=25601&amp;oldid=prev"/>
				<updated>2012-03-21T14:13:41Z</updated>
		
		<summary type="html">&lt;p&gt;Maschiene -&amp;gt; Maschine&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;' lang='de'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Version vom 21. März 2012, 14:13 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Zeile 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Definition eines eigenen Prozessors==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Definition eines eigenen Prozessors==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Bevor wir weitermachen können, müssen wir einen Zielcomputer für die Übersetzung festlegen. Da wir eine Skriptsprache schreiben, ist es sinnvoll, nicht in den Befehlscode einer echten &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Maschiene &lt;/del&gt;zu übersetzen, sondern in eine von uns selbst entworfene. Nebenbei können wir dann den Computer auf unsere Sprache zuschneiden, was die Codeerzeugung stark vereinfacht. Ich halte mich hier an ein Beispiel von Niklaus Wirth, da der von ihm beschriebene Computer auch gut für unsere eigene Sprache geeigent ist(damit niemand behaupten kann, ich würde geistiges Eigentum stehlen: Ein Teil dieses Textes ist abgeschrieben, mit Änderungen, versteht sich):&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Bevor wir weitermachen können, müssen wir einen Zielcomputer für die Übersetzung festlegen. Da wir eine Skriptsprache schreiben, ist es sinnvoll, nicht in den Befehlscode einer echten &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Maschine &lt;/ins&gt;zu übersetzen, sondern in eine von uns selbst entworfene. Nebenbei können wir dann den Computer auf unsere Sprache zuschneiden, was die Codeerzeugung stark vereinfacht. Ich halte mich hier an ein Beispiel von Niklaus Wirth, da der von ihm beschriebene Computer auch gut für unsere eigene Sprache geeigent ist(damit niemand behaupten kann, ich würde geistiges Eigentum stehlen: Ein Teil dieses Textes ist abgeschrieben, mit Änderungen, versteht sich):&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Der Computer besteht aus 2 Speichern, einem Befehlsregister und 3 Adressregistern. Der Programmspeicher wird vor der Ausführung des Programs geladen und bleibt üblicherweise während der Ausführung unverändert. Daneben gibt es noch den Datenspeicher S, der als Stack verwendet wird. Arithmetische Operatoren verwenden die zuoberst auf dem Stack liegenden Werte und ersetzen sie durch das Ergebnis. Das oberste Element des Stacks wird durch das Indexregister T gekennzeichnet. Das Befehlsregister I enthält enthält den derzeit interpretierten Befehl und der Programmzähler P enthält die Adresse des nächsten Befehls.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Der Computer besteht aus 2 Speichern, einem Befehlsregister und 3 Adressregistern. Der Programmspeicher wird vor der Ausführung des Programs geladen und bleibt üblicherweise während der Ausführung unverändert. Daneben gibt es noch den Datenspeicher S, der als Stack verwendet wird. Arithmetische Operatoren verwenden die zuoberst auf dem Stack liegenden Werte und ersetzen sie durch das Ergebnis. Das oberste Element des Stacks wird durch das Indexregister T gekennzeichnet. Das Befehlsregister I enthält enthält den derzeit interpretierten Befehl und der Programmzähler P enthält die Adresse des nächsten Befehls.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l26&quot; &gt;Zeile 26:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 26:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Ein ''Emulator'' für unseren Prozessor==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Ein ''Emulator'' für unseren Prozessor==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Aus der obigen Beschreibung kann man nun einen Emulator ableiten. Dieser wird auch häufig Virtuelle &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Maschiene &lt;/del&gt;genannt. In ihr wird der vom Compiler übersetzte Code ausgeführt. Da wir bereits genau wissen, wie unser Computer funktioniert, können wir unsere VM relativ leicht erstellen. Die Funktionen, die OPR ausführen kann, sind dem Quellcode zu entnehmen, eine einzelne Aufführung ist denke ich nicht nötig.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Aus der obigen Beschreibung kann man nun einen Emulator ableiten. Dieser wird auch häufig Virtuelle &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Maschine &lt;/ins&gt;genannt. In ihr wird der vom Compiler übersetzte Code ausgeführt. Da wir bereits genau wissen, wie unser Computer funktioniert, können wir unsere VM relativ leicht erstellen. Die Funktionen, die OPR ausführen kann, sind dem Quellcode zu entnehmen, eine einzelne Aufführung ist denke ich nicht nötig.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;'''interpreter.dpr'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;'''interpreter.dpr'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l867&quot; &gt;Zeile 867:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 867:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#Erweitern der Sprache um Funktionen und Prozeduren mit Parametern&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#Erweitern der Sprache um Funktionen und Prozeduren mit Parametern&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Wenn das geschehen ist, hat man ein sehr mächtiges Werkzeug entstehen lassen. Es fehlt dann nur noch, dass man dem Compiler ein paar Funktionen bereits mit auf den Weg gibt, die das interpretierende Programm in echtem &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Maschienencode &lt;/del&gt;bereitstellt(z.B. zur Steuerung). Im übrigen ist davon auszugehen, dass bei den genannten Erweiterungen auch verschiedene Änderungen an der VM sinnvoll sind.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Wenn das geschehen ist, hat man ein sehr mächtiges Werkzeug entstehen lassen. Es fehlt dann nur noch, dass man dem Compiler ein paar Funktionen bereits mit auf den Weg gibt, die das interpretierende Programm in echtem &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Maschinencode &lt;/ins&gt;bereitstellt(z.B. zur Steuerung). Im übrigen ist davon auszugehen, dass bei den genannten Erweiterungen auch verschiedene Änderungen an der VM sinnvoll sind.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;...have a lot of fun!&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;...have a lot of fun!&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Openglerf</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Tutorial_Scriptsprachen_Teil_2&amp;diff=23598&amp;oldid=prev</id>
		<title>Flo am 17. Mai 2009 um 10:31 Uhr</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Tutorial_Scriptsprachen_Teil_2&amp;diff=23598&amp;oldid=prev"/>
				<updated>2009-05-17T10:31:44Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;' lang='de'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Version vom 17. Mai 2009, 10:31 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l872&quot; &gt;Zeile 872:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 872:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Delphic&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Delphic&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;== Dateien ==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;* {{ArchivLink|file=tut_scriptlang|text=Beispiel-Quelltext (Delphi) und Beispiel-Programm}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{TUTORIAL_NAVIGATION| [[Tutorial Scriptsprachen Teil 1]] | - }}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{TUTORIAL_NAVIGATION| [[Tutorial Scriptsprachen Teil 1]] | - }}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Tutorial|Scriptsprachen Teil 2]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Tutorial|Scriptsprachen Teil 2]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Flo</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Tutorial_Scriptsprachen_Teil_2&amp;diff=22970&amp;oldid=prev</id>
		<title>DGLBot: Der Ausdruck ''&lt;pascal&gt;(.*?)&lt;/pascal&gt;'' wurde ersetzt mit ''&lt;source lang=&quot;pascal&quot;&gt;$1&lt;/source&gt;''.</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Tutorial_Scriptsprachen_Teil_2&amp;diff=22970&amp;oldid=prev"/>
				<updated>2009-03-10T18:14:39Z</updated>
		
		<summary type="html">&lt;p&gt;Der Ausdruck &amp;#039;&amp;#039;&amp;lt;pascal&amp;gt;(.*?)&amp;lt;/pascal&amp;gt;&amp;#039;&amp;#039; wurde ersetzt mit &amp;#039;&amp;#039;&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;$1&amp;lt;/source&amp;gt;&amp;#039;&amp;#039;.&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;' lang='de'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Version vom 10. März 2009, 18:14 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l29&quot; &gt;Zeile 29:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 29:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;'''interpreter.dpr'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;'''interpreter.dpr'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pascal&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;source lang=&amp;quot;&lt;/ins&gt;pascal&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;quot;&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;program interpreter;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;program interpreter;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{$APPTYPE CONSOLE}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{$APPTYPE CONSOLE}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l227&quot; &gt;Zeile 227:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 227:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; CloseFile(F)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; CloseFile(F)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;pascal&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;source&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Codeerzeugung==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Codeerzeugung==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l234&quot; &gt;Zeile 234:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 234:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Um mit Variablen und Konstanten arbeiten zu können, müssen wir unsere Tabelle, die wir für den Zweck der Überprüfung der Bezeichner eingeführt haben, erweitern. Bei Konstanten müssen wir den Wert den sie darstellen uns merken. Variablen benötigen eine Datenadresse. Bei Prozeduren benötigen wir die Schachtelungstiefe und eine Programmadresse:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Um mit Variablen und Konstanten arbeiten zu können, müssen wir unsere Tabelle, die wir für den Zweck der Überprüfung der Bezeichner eingeführt haben, erweitern. Bei Konstanten müssen wir den Wert den sie darstellen uns merken. Variablen benötigen eine Datenadresse. Bei Prozeduren benötigen wir die Schachtelungstiefe und eine Programmadresse:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pascal&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;source lang=&amp;quot;&lt;/ins&gt;pascal&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;quot;&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; TIdent = record&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; TIdent = record&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;  Name : ShortString;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;  Name : ShortString;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l241&quot; &gt;Zeile 241:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 241:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;  itVariable,itProcedure:(level,adr,size:Integer)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;  itVariable,itProcedure:(level,adr,size:Integer)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;  end;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160;  end;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;pascal&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;source&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Ausdrücke und Bindungsregeln===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Ausdrücke und Bindungsregeln===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l270&quot; &gt;Zeile 270:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 270:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;'''compiler.dpr'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;'''compiler.dpr'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pascal&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;source lang=&amp;quot;&lt;/ins&gt;pascal&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;quot;&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;program compiler;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;program compiler;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{$APPTYPE CONSOLE}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{$APPTYPE CONSOLE}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l772&quot; &gt;Zeile 772:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 772:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; CloseFile(InFile)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; CloseFile(InFile)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;pascal&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;source&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Zum testen noch ein kleines Script:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Zum testen noch ein kleines Script:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pascal&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;source lang=&amp;quot;&lt;/ins&gt;pascal&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;quot;&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;module test;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;module test;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;(* Testscript&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;(* Testscript&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l841&quot; &gt;Zeile 841:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 841:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; Write -10000&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; Write -10000&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end Test;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end Test;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;pascal&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;source&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Wenn jemand das Bedürfnis hat, sich den erzeugten Code einmal näher anzuschauen, empfehle ich, das Script zu Compilieren und dann den Interpreter mit dem zusätzlichen Parameter &amp;quot;+i&amp;quot; zu starten.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Wenn jemand das Bedürfnis hat, sich den erzeugten Code einmal näher anzuschauen, empfehle ich, das Script zu Compilieren und dann den Interpreter mit dem zusätzlichen Parameter &amp;quot;+i&amp;quot; zu starten.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>DGLBot</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Tutorial_Scriptsprachen_Teil_2&amp;diff=20269&amp;oldid=prev</id>
		<title>Frase: /* Ein ''Emulator'' für unseren Prozessor */ Typo: &quot;us&quot; zu &quot;Aus&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Tutorial_Scriptsprachen_Teil_2&amp;diff=20269&amp;oldid=prev"/>
				<updated>2007-03-22T08:57:27Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Ein &amp;#039;&amp;#039;Emulator&amp;#039;&amp;#039; für unseren Prozessor: &lt;/span&gt; Typo: &amp;quot;us&amp;quot; zu &amp;quot;Aus&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;' lang='de'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Version vom 22. März 2007, 08:57 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l26&quot; &gt;Zeile 26:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 26:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Ein ''Emulator'' für unseren Prozessor==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Ein ''Emulator'' für unseren Prozessor==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;us &lt;/del&gt;der obigen Beschreibung kann man nun einen Emulator ableiten. Dieser wird auch häufig Virtuelle Maschiene genannt. In ihr wird der vom Compiler übersetzte Code ausgeführt. Da wir bereits genau wissen, wie unser Computer funktioniert, können wir unsere VM relativ leicht erstellen. Die Funktionen, die OPR ausführen kann, sind dem Quellcode zu entnehmen, eine einzelne Aufführung ist denke ich nicht nötig.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Aus &lt;/ins&gt;der obigen Beschreibung kann man nun einen Emulator ableiten. Dieser wird auch häufig Virtuelle Maschiene genannt. In ihr wird der vom Compiler übersetzte Code ausgeführt. Da wir bereits genau wissen, wie unser Computer funktioniert, können wir unsere VM relativ leicht erstellen. Die Funktionen, die OPR ausführen kann, sind dem Quellcode zu entnehmen, eine einzelne Aufführung ist denke ich nicht nötig.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;'''interpreter.dpr'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;'''interpreter.dpr'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Frase</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=Tutorial_Scriptsprachen_Teil_2&amp;diff=15732&amp;oldid=prev</id>
		<title>MyChaOS am 24. Dezember 2005 um 10:52 Uhr</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=Tutorial_Scriptsprachen_Teil_2&amp;diff=15732&amp;oldid=prev"/>
				<updated>2005-12-24T10:52:33Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Definition eines eigenen Prozessors==&lt;br /&gt;
&lt;br /&gt;
Bevor wir weitermachen können, müssen wir einen Zielcomputer für die Übersetzung festlegen. Da wir eine Skriptsprache schreiben, ist es sinnvoll, nicht in den Befehlscode einer echten Maschiene zu übersetzen, sondern in eine von uns selbst entworfene. Nebenbei können wir dann den Computer auf unsere Sprache zuschneiden, was die Codeerzeugung stark vereinfacht. Ich halte mich hier an ein Beispiel von Niklaus Wirth, da der von ihm beschriebene Computer auch gut für unsere eigene Sprache geeigent ist(damit niemand behaupten kann, ich würde geistiges Eigentum stehlen: Ein Teil dieses Textes ist abgeschrieben, mit Änderungen, versteht sich):&lt;br /&gt;
&lt;br /&gt;
Der Computer besteht aus 2 Speichern, einem Befehlsregister und 3 Adressregistern. Der Programmspeicher wird vor der Ausführung des Programs geladen und bleibt üblicherweise während der Ausführung unverändert. Daneben gibt es noch den Datenspeicher S, der als Stack verwendet wird. Arithmetische Operatoren verwenden die zuoberst auf dem Stack liegenden Werte und ersetzen sie durch das Ergebnis. Das oberste Element des Stacks wird durch das Indexregister T gekennzeichnet. Das Befehlsregister I enthält enthält den derzeit interpretierten Befehl und der Programmzähler P enthält die Adresse des nächsten Befehls.&lt;br /&gt;
&lt;br /&gt;
Jede Prozedur in unserer Sprache kann lokale Variablen besitzen. Da rekursiver Aufruf der Prozeduren möglich ist, ist es unmöglich, lokalen Variablen bereits bei der Compilierung feste Speicherplätze zuzuweisen. Stattdessen wird während der Ausführung beim Aufruf der Prozedur Speicher reserviert und nach Ausführung der Prozedur wieder freigegeben. Weil jede Prozedur Q, die nach einer Prozedur P aufgerufen wurde, beendet wird, bevor P beendet ist, ist eine Speicherverwaltung nach dem Stapelprinzip die naheliegenste Lösung. Beim Aufruf wird der Prozedur zuoberst im Stapel ein Platz zugewiesen; er wird Prozedur Segment genannt. Jede Prozedur speichert darin die Programmadresse des Aufrufs(&amp;quot;return address&amp;quot;) und die Segment Adresse (&amp;quot;dynamic link&amp;quot;) der aufrufenden Prozedur ab. Diese Daten werden benötigt, um nach Beendigung der Prozedur den vor der Ausführung geltenden Zustand wiederherzustellen. Der Anfang dieser Kette befindet sich im Basis Adress Register B.&lt;br /&gt;
&lt;br /&gt;
Da die eigentliche Speicherplatzzuweisung erst während der Interpretation des compilierten Programmes stattfindet, kann der Compiler keine endgültigen Adressen in die Befehle einbauen. Er kann lediglich den Platz einer Variable innerhalb eines Segments bestimmen. Diese realtive Adresse wird Offset genannt. Der Interpreter muss sodann, um die absolute Adresse zu erhalten, der Basis Adresse des des betreffenden Segemnts zum Offset hinzuzählen. Wenn eine Variable lokal zur gegenwärtig ausgeführten Prozedur ist, so kann diese Basis Adresse dem Register B entnommen werden. Ansonsten muss sie ermittelt werden, indem die Adresskette DL bis zum entsprechenden Segment durchlaufen wird. Der Compiler kennt jedoch nur die Tiefe der statischen Verschachtelung, während DL die dynamische Folge von Aufrufen festhält. Leider sind Beide folgen nicht notwendigerweise identisch. Folglich ist eine zweite Verkettung notwendig, welche den Zugriffspfad zu Variablen korrekt wiederspiegelt. Wir nennen diese zweite Kette SL(static link).&lt;br /&gt;
&lt;br /&gt;
Adressen werden deshalb vom Compiler als Zahlenpaare dargestellt. Die erste Zahl bezeichnet die Niveau Differenz zwischen dem Aufrufer und der zugegriffenen Variablen und bestimmt die Anzahl der in der SL Kette zu durchlaufenden Glieder. Die zwite Zahl ist das Offset der Variable.&lt;br /&gt;
&lt;br /&gt;
Der Befehlssatz des Computers ist direkt auf die Erfordernisse der Sprache zugeschnitten. Er enthält folgende Befehle:&lt;br /&gt;
&lt;br /&gt;
#Ein Befehl LIT, um Zahlen (literals) in den Stapel zu bringen.&lt;br /&gt;
#Ein Befehl LOD, um Variablenwerte in den Stapel zu laden.&lt;br /&gt;
#Ein Befehl STO, um Werte aus dem Stapel abzuspeichern(store).&lt;br /&gt;
#Ein Befehl CAL, um eine Prozedur aufzurufen(call).&lt;br /&gt;
#Ein Befehl INT, um Speicher zu reservieren (inrement T).&lt;br /&gt;
#Ein Befehl JMP und JPC, um im Program zu springen(jump).&lt;br /&gt;
#Ein Satz von arithmetischen und relationalen Operatoren OPR.&lt;br /&gt;
#Ein Befehl WRI, um einen Wert auf dem Bildschirm auszugeben.&lt;br /&gt;
&lt;br /&gt;
Das Befehlsformat wird durch die Notwendigkeit 3er Komponenten bestimmt. Jeder Befehl enthält einen Befehlscode, der die Art des Befehls kennzeichent, sowie einen oder zwei Parameter. Im Fall der Operatoren gibt der Parameter die Identität des Operators an, da der Befehlscode lediglich eine Befehlsklasse bezeichnet. Bei LIT und INT ist der Parameter eine Zahl, bei JMP, JPC und CAL eine Programmadresse, bei LOD und STO eine Datenadresse.&lt;br /&gt;
&lt;br /&gt;
==Ein ''Emulator'' für unseren Prozessor==&lt;br /&gt;
&lt;br /&gt;
us der obigen Beschreibung kann man nun einen Emulator ableiten. Dieser wird auch häufig Virtuelle Maschiene genannt. In ihr wird der vom Compiler übersetzte Code ausgeführt. Da wir bereits genau wissen, wie unser Computer funktioniert, können wir unsere VM relativ leicht erstellen. Die Funktionen, die OPR ausführen kann, sind dem Quellcode zu entnehmen, eine einzelne Aufführung ist denke ich nicht nötig.&lt;br /&gt;
&lt;br /&gt;
'''interpreter.dpr'''&lt;br /&gt;
&amp;lt;pascal&amp;gt;&lt;br /&gt;
program interpreter;&lt;br /&gt;
{$APPTYPE CONSOLE}&lt;br /&gt;
uses&lt;br /&gt;
  sysutils;&lt;br /&gt;
&lt;br /&gt;
type&lt;br /&gt;
  TOpCode = (lit, opr, lod, sto, cal, int, jmp, jpc, wri);&lt;br /&gt;
  Instruction = packed record&lt;br /&gt;
                  f : TOpCode; //Befehl&lt;br /&gt;
                  l : Byte;    //Parameter 1&lt;br /&gt;
                  a : Integer; //Parameter 2&lt;br /&gt;
                end;&lt;br /&gt;
&lt;br /&gt;
  TInstructions = Array[0..0] of Instruction;&lt;br /&gt;
  PInstructions = ^TInstructions;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
  Instructions : PInstructions;&lt;br /&gt;
&lt;br /&gt;
  procedure Emulate;&lt;br /&gt;
  const&lt;br /&gt;
    StackSize = 1024;&lt;br /&gt;
&lt;br /&gt;
  var&lt;br /&gt;
    p,b,t : Integer;&lt;br /&gt;
    i : Instruction;&lt;br /&gt;
    s : Array[1..StackSize] of Integer;&lt;br /&gt;
&lt;br /&gt;
    function Base(I : Integer): Integer;&lt;br /&gt;
    var&lt;br /&gt;
      b1 : Integer;&lt;br /&gt;
    begin&lt;br /&gt;
      b1 := b;&lt;br /&gt;
      while I &amp;gt; 0 do&lt;br /&gt;
      begin&lt;br /&gt;
        b1 := s[b1];&lt;br /&gt;
        Dec(I)&lt;br /&gt;
      end;&lt;br /&gt;
      base := b1&lt;br /&gt;
    end;&lt;br /&gt;
&lt;br /&gt;
  begin&lt;br /&gt;
    WriteLn('Interpreting Code');&lt;br /&gt;
    t := 0;&lt;br /&gt;
    b := 1;&lt;br /&gt;
    p := 0;&lt;br /&gt;
    s[1] := 0;&lt;br /&gt;
    s[2] := 0;&lt;br /&gt;
    s[3] := 0;&lt;br /&gt;
    repeat&lt;br /&gt;
      //bereichsprüfung ist wegen dem Array[0..] nicht angebracht&lt;br /&gt;
      {$R-}&lt;br /&gt;
      i := Instructions^[p];&lt;br /&gt;
      {$R+}&lt;br /&gt;
      Inc(p);&lt;br /&gt;
      with i do&lt;br /&gt;
        case f of&lt;br /&gt;
          lit : begin&lt;br /&gt;
                  Inc(t);&lt;br /&gt;
                  s[t] := a&lt;br /&gt;
                end;&lt;br /&gt;
          lod : begin&lt;br /&gt;
                  Inc(t);&lt;br /&gt;
                  s[t] := s[base(l)+a]&lt;br /&gt;
                end;&lt;br /&gt;
          sto : begin&lt;br /&gt;
                  s[base(l)+a] := s[t];&lt;br /&gt;
                  Dec(t);&lt;br /&gt;
                end;&lt;br /&gt;
          cal : begin&lt;br /&gt;
                  (*generate new block mark*)&lt;br /&gt;
                  s[t + 1] := base(l);&lt;br /&gt;
                  s[t +2] := b;&lt;br /&gt;
                  s[t+3] := p;&lt;br /&gt;
                  b := t + 1;&lt;br /&gt;
                  p := a&lt;br /&gt;
                end;&lt;br /&gt;
          int : t := t + a;&lt;br /&gt;
          jmp : p := a;&lt;br /&gt;
          jpc : begin&lt;br /&gt;
                  if s[t] = 0 then p := a;&lt;br /&gt;
                  Dec(t);&lt;br /&gt;
                end;&lt;br /&gt;
          wri: begin&lt;br /&gt;
                 WriteLn('wri: ' + IntToStr(s[t]));&lt;br /&gt;
                 Dec(t)&lt;br /&gt;
               end;&lt;br /&gt;
          opr : case a of (*operator*)&lt;br /&gt;
                  0: begin //return&lt;br /&gt;
                       t := b - 1;&lt;br /&gt;
                       p := s[t+3];&lt;br /&gt;
                       b := s[t+2]&lt;br /&gt;
                     end;&lt;br /&gt;
                  1: s[t] := -s[t]; //negation&lt;br /&gt;
                  2: begin&lt;br /&gt;
                       //Addition&lt;br /&gt;
                       Dec(t);&lt;br /&gt;
                       s[t] := s[t] + s[t+1]&lt;br /&gt;
                     end;&lt;br /&gt;
                  3: begin&lt;br /&gt;
                       //Subtraktion&lt;br /&gt;
                       Dec(t);&lt;br /&gt;
                       s[t] := s[t] - s[t+1]&lt;br /&gt;
                     end;&lt;br /&gt;
                  4: begin&lt;br /&gt;
                       //mul&lt;br /&gt;
                       Dec(t);&lt;br /&gt;
                       s[t] := s[t] * s[t+1]&lt;br /&gt;
                     end;&lt;br /&gt;
                  5: begin&lt;br /&gt;
                       //div&lt;br /&gt;
                       Dec(t);&lt;br /&gt;
                       s[t] := s[t] div s[t+1]&lt;br /&gt;
                     end;&lt;br /&gt;
                     //6 und 7 aus dem PL/0 interpreter von N.Wirth werden NICHT benötigt&lt;br /&gt;
                  8: begin&lt;br /&gt;
                       //Equal&lt;br /&gt;
                       Dec(t);&lt;br /&gt;
                       s[t] := ord(s[t] = s[t+1])&lt;br /&gt;
                     end;&lt;br /&gt;
                  9: begin&lt;br /&gt;
                       //unequal&lt;br /&gt;
                       Dec(t);&lt;br /&gt;
                       s[t] := ord(s[t] &amp;lt;&amp;gt; s[t+1])&lt;br /&gt;
                     end;&lt;br /&gt;
                  10:begin&lt;br /&gt;
                       //smaller&lt;br /&gt;
                       Dec(t);&lt;br /&gt;
                       s[t] := ord(s[t] &amp;lt; s[t+1])&lt;br /&gt;
                     end;&lt;br /&gt;
                  11:begin&lt;br /&gt;
                       //Bigger&lt;br /&gt;
                       Dec(t);&lt;br /&gt;
                       s[t] := ord(s[t] &amp;gt; s[t+1]);&lt;br /&gt;
                     end;&lt;br /&gt;
                  12:begin&lt;br /&gt;
                       //Bigerequal&lt;br /&gt;
                       Dec(t);&lt;br /&gt;
                       s[t] := ord(s[t] &amp;gt;= s[t+1]);&lt;br /&gt;
                     end;&lt;br /&gt;
                  13:begin&lt;br /&gt;
                       //Smallerequal&lt;br /&gt;
                       Dec(t);&lt;br /&gt;
                       s[t] := ord(s[t] &amp;lt;= s[t+1]);&lt;br /&gt;
                     end;&lt;br /&gt;
                else&lt;br /&gt;
                  WriteLn('Unknown Operand!');&lt;br /&gt;
                  p := 0;&lt;br /&gt;
                end;&lt;br /&gt;
        else&lt;br /&gt;
          WriteLn('Unknown opcode');&lt;br /&gt;
          p := 0;&lt;br /&gt;
        end&lt;br /&gt;
    until p = 0;&lt;br /&gt;
    WriteLn('Done...');&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
  F : File;&lt;br /&gt;
  FSize : Integer;&lt;br /&gt;
&lt;br /&gt;
  procedure ShowInstructions;&lt;br /&gt;
  const&lt;br /&gt;
    OpCodeText : Array[TOpCode] of ShortString = ('lit', 'opr', 'lod', 'sto', 'cal', 'int', 'jmp', 'jpc', 'wri');&lt;br /&gt;
  var&lt;br /&gt;
    I : Integer;&lt;br /&gt;
  begin&lt;br /&gt;
    WriteLn('Instructions:');&lt;br /&gt;
    I := 0;&lt;br /&gt;
    while (I+1) * SizeOf(Instruction)&amp;lt;= FSize do&lt;br /&gt;
    begin&lt;br /&gt;
      {$R-}&lt;br /&gt;
      with Instructions^[I] do&lt;br /&gt;
        WriteLn(Format('%d: %s %d,%d', [i, OpCodeText[f], l, a]));&lt;br /&gt;
      {$R+}&lt;br /&gt;
      Inc(i)&lt;br /&gt;
    end&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
  if not FileExists(ParamStr(1)) then Halt(0);&lt;br /&gt;
&lt;br /&gt;
  AssignFile(F, ParamStr(1));&lt;br /&gt;
  FileMode := 0;&lt;br /&gt;
  Reset(F, 1);&lt;br /&gt;
  FSize := FileSize(F);&lt;br /&gt;
  GetMem(Instructions, FSize);&lt;br /&gt;
  BlockRead(F, Instructions^[0], FSize);&lt;br /&gt;
  if ParamStr(2) = '+i' then&lt;br /&gt;
    ShowInstructions;&lt;br /&gt;
  Emulate;&lt;br /&gt;
  FreeMem(Instructions, FSize);&lt;br /&gt;
  ReadLn;&lt;br /&gt;
&lt;br /&gt;
  CloseFile(F)&lt;br /&gt;
end.&lt;br /&gt;
&amp;lt;/pascal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Codeerzeugung==&lt;br /&gt;
&lt;br /&gt;
===Variablen, Konstanten und Prozeduren===&lt;br /&gt;
&lt;br /&gt;
Um mit Variablen und Konstanten arbeiten zu können, müssen wir unsere Tabelle, die wir für den Zweck der Überprüfung der Bezeichner eingeführt haben, erweitern. Bei Konstanten müssen wir den Wert den sie darstellen uns merken. Variablen benötigen eine Datenadresse. Bei Prozeduren benötigen wir die Schachtelungstiefe und eine Programmadresse:&lt;br /&gt;
&amp;lt;pascal&amp;gt;&lt;br /&gt;
  TIdent = record&lt;br /&gt;
             Name : ShortString;&lt;br /&gt;
             case Kind : TIdentType of&lt;br /&gt;
               itConstant: (val:integer);&lt;br /&gt;
               itVariable,itProcedure:(level,adr,size:Integer)&lt;br /&gt;
           end;&lt;br /&gt;
&amp;lt;/pascal&amp;gt;&lt;br /&gt;
===Ausdrücke und Bindungsregeln===&lt;br /&gt;
&lt;br /&gt;
In der Schule haben wir gelernt, dass Rechenzeichen in die Mitte von zwei Zahlen gehören. Seit einiger Zeit halte ich das für unsinnig, denn das zwingt einen dazu, Klammern einzuführen. Nachdem unsere VM von Klammern keine Ahnung hat und wir sie dahingegen nicht verändern wollen, müssen wir uns etwas besseres einfallen lassen: die postfix Notation. Statt das Rechenzeichen zwischen die Operanden einzubetten, werden sie dahinter geschreiben, z.B.:&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
!Infix&lt;br /&gt;
!Postfix&lt;br /&gt;
|-&lt;br /&gt;
|x+y&lt;br /&gt;
|x y +&lt;br /&gt;
|-&lt;br /&gt;
|(x-y)+z&lt;br /&gt;
|x y - z +&lt;br /&gt;
|-&lt;br /&gt;
|x-(y+z)&lt;br /&gt;
|x y z + -&lt;br /&gt;
|-&lt;br /&gt;
|(x+y)/(z-w)&lt;br /&gt;
|x y + z w - /&lt;br /&gt;
|}&lt;br /&gt;
Ich empfehle darüber jetzt ein wenig nachzudenken und sich klar zu machen, dass diese Notation Klammern unnötig macht.&lt;br /&gt;
&lt;br /&gt;
Was bedeutet das für unseren Compiler? Die Aufgabe der Prozeduren zur Übersetzung von Ausdrücken beschränkt sich darauf, die Übermittlung der Operatoren zu verzögern.&lt;br /&gt;
&lt;br /&gt;
===If und While Anweisungen===&lt;br /&gt;
&lt;br /&gt;
Uns fehlt jetzt nur noch eine Möglichkeit, Bedingte und wiederholte Anweisungen auszuführen. Das Problem besteht darin, dass an vielen Stellen nach vorne gesprungen wird. Nur ist dann leider noch nicht bekannt, wohin gesprungen werden muss. Hier haben sich zwei Methoden besonders etabliert. 2 Phasencompiler markieren beim ersten Übersetzen einfach die Sprungstellen und merken sich die Zieladresse, wenn diese Übersetzt wird. Bei einem zweiten Durchgang, werden dann die Sprungadressen korrekt eingefügt. Die andere Variante besteht darin, die Befehle in einem Array zu halten. Sobald dann die Sprungadressen bekannt sind, werden sie einfach eingesetzt. Dieses Verfahren wird Fixup genannt.&lt;br /&gt;
&lt;br /&gt;
'''compiler.dpr'''&lt;br /&gt;
&amp;lt;pascal&amp;gt;&lt;br /&gt;
program compiler;&lt;br /&gt;
{$APPTYPE CONSOLE}&lt;br /&gt;
uses&lt;br /&gt;
  sysutils,&lt;br /&gt;
  symbols in '..\parser\symbols.pas',&lt;br /&gt;
  scanner in '..\parser\scanner.pas',&lt;br /&gt;
  errors in '..\parser\errors.pas';&lt;br /&gt;
&lt;br /&gt;
type&lt;br /&gt;
  TIdentType = (itConstant, itVariable, itProcedure);&lt;br /&gt;
  TIdent = record&lt;br /&gt;
             Name : ShortString;&lt;br /&gt;
             case Kind : TIdentType of&lt;br /&gt;
               itConstant: (val:integer);&lt;br /&gt;
               itVariable,itProcedure:(level,adr,size:Integer)&lt;br /&gt;
           end;&lt;br /&gt;
&lt;br /&gt;
  TIdentList = Array of TIdent;&lt;br /&gt;
&lt;br /&gt;
  TOpCode = (lit, opr, lod, sto, cal, int, jmp, jpc, wri);&lt;br /&gt;
  Instruction = packed record&lt;br /&gt;
                  f : TOpCode; //Befehl&lt;br /&gt;
                  l : Byte;    //Level&lt;br /&gt;
                  a:  Integer; //Adresse&lt;br /&gt;
                end;&lt;br /&gt;
&lt;br /&gt;
  TInstructions = Array of Instruction;&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
  Table : TIdentList;&lt;br /&gt;
  Code : TInstructions;&lt;br /&gt;
&lt;br /&gt;
  //Code Position&lt;br /&gt;
  cx : Integer;&lt;br /&gt;
&lt;br /&gt;
  procedure Expect(Expected : TSymbol);&lt;br /&gt;
  begin&lt;br /&gt;
    if Symbol &amp;lt;&amp;gt; Expected then&lt;br /&gt;
      ErrorExpected([Expected], Symbol)&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  procedure GenCode(f : TOpCode; l, a : Integer);&lt;br /&gt;
  begin (*GenCode*)&lt;br /&gt;
    if cx &amp;gt; Length(Code) - 1 then&lt;br /&gt;
      SetLength(Code, Length(Code) + 64);&lt;br /&gt;
    Code[cx].f := f;&lt;br /&gt;
    Code[cx].a := a;&lt;br /&gt;
    Code[cx].l := l;&lt;br /&gt;
    Inc(cx)&lt;br /&gt;
  end; (*GenCode*)&lt;br /&gt;
&lt;br /&gt;
  procedure Module;&lt;br /&gt;
&lt;br /&gt;
    function Position(ID : ShortString; TablePosition : Integer) : Integer;&lt;br /&gt;
    var&lt;br /&gt;
      I : Integer;&lt;br /&gt;
    begin&lt;br /&gt;
      Table[0].Name := ID;&lt;br /&gt;
      I := TablePosition;&lt;br /&gt;
      while Table[I].Name &amp;lt;&amp;gt; ID do&lt;br /&gt;
        Dec(I);&lt;br /&gt;
      Result := I&lt;br /&gt;
    end;&lt;br /&gt;
&lt;br /&gt;
    procedure StatementSequence(TablePosition, lev : Integer);&lt;br /&gt;
    (*  StatementSeq  = [Statement {&amp;quot;;&amp;quot; Statement}]*)&lt;br /&gt;
      procedure Statement;&lt;br /&gt;
      (*Statement     = ( Ident &amp;quot;:=&amp;quot; (Ident | Expression) |&lt;br /&gt;
                  Ident | (WRITE Expression) |&lt;br /&gt;
                  ( BEGIN StatementSeq END ) |&lt;br /&gt;
                  ( IF Condition THEN StatementSeq END&lt;br /&gt;
                    {ELSEIF Condition THEN StatementSeq END }&lt;br /&gt;
                    [ELSE StatementSeq END] ) |&lt;br /&gt;
                  ( WHILE Condition DO StatementSeq END ) | &amp;quot;;&amp;quot;. *)&lt;br /&gt;
        procedure Expression;&lt;br /&gt;
        (*Expression      = [Vorzeichen] Term {Vorzeichen Term}.*)&lt;br /&gt;
          procedure Term;&lt;br /&gt;
          (*Term            = Factor {&amp;quot;*&amp;quot;|&amp;quot;/&amp;quot; Factor}.*)&lt;br /&gt;
            procedure Factor;&lt;br /&gt;
            (*Factor          = Ident | Zahl | (&amp;quot;(&amp;quot; Expression &amp;quot;)&amp;quot;).*)&lt;br /&gt;
            var&lt;br /&gt;
              IdentPos : Integer;&lt;br /&gt;
            begin (*Factor*)&lt;br /&gt;
              if (Symbol = sIdent) then&lt;br /&gt;
              begin&lt;br /&gt;
                IdentPos := Position(ID, TablePosition);&lt;br /&gt;
                if (IdentPos = 0) then&lt;br /&gt;
                  Error(ERR_PARSE_UNKNOWN_IDENT);&lt;br /&gt;
                if Table[IdentPos].Kind = itProcedure then&lt;br /&gt;
                  Error(ERR_PARSE_VAR_CONSTANT_EXPECTED);&lt;br /&gt;
&lt;br /&gt;
                case Table[IdentPos].Kind of&lt;br /&gt;
                  itConstant: GenCode(lit, 0, Table[IdentPos].val);&lt;br /&gt;
                  itVariable: GenCode(lod, lev-Table[IdentPos].Level, Table[IdentPos].adr);&lt;br /&gt;
                end;&lt;br /&gt;
&lt;br /&gt;
                GetSym&lt;br /&gt;
              end&lt;br /&gt;
              else if (Symbol = sInteger) then&lt;br /&gt;
              begin&lt;br /&gt;
                GenCode(lit, 0, num);&lt;br /&gt;
                GetSym&lt;br /&gt;
              end&lt;br /&gt;
              else if (Symbol = sOpenBracket) then&lt;br /&gt;
              begin&lt;br /&gt;
                GetSym;&lt;br /&gt;
                Expression;&lt;br /&gt;
                Expect(sCloseBracket);&lt;br /&gt;
                GetSym&lt;br /&gt;
              end&lt;br /&gt;
              else&lt;br /&gt;
                ErrorExpected([sIdent, sInteger, sOpenBracket], Symbol)&lt;br /&gt;
            end;  (*Factor*)&lt;br /&gt;
&lt;br /&gt;
          var&lt;br /&gt;
            Operation : TSymbol;&lt;br /&gt;
          begin(*Term*)&lt;br /&gt;
            Factor;&lt;br /&gt;
            while Symbol in [sStar, sSlash] do&lt;br /&gt;
            begin&lt;br /&gt;
              Operation := Symbol;&lt;br /&gt;
              GetSym;&lt;br /&gt;
              Factor;&lt;br /&gt;
              case Operation of&lt;br /&gt;
                sStar: GenCode(opr, 0, 4);&lt;br /&gt;
                sSlash: GenCode(opr, 0, 5);&lt;br /&gt;
              end&lt;br /&gt;
            end&lt;br /&gt;
          end;(*Term*)&lt;br /&gt;
&lt;br /&gt;
        var&lt;br /&gt;
          Operation : TSymbol;&lt;br /&gt;
        begin (*Expresion*)&lt;br /&gt;
          if (Symbol in[sPlus, sMinus]) then&lt;br /&gt;
          begin&lt;br /&gt;
            Operation := Symbol;&lt;br /&gt;
            GetSym;&lt;br /&gt;
            Term;&lt;br /&gt;
            if Operation = sMinus then&lt;br /&gt;
              GenCode(opr, 0, 1)&lt;br /&gt;
          end&lt;br /&gt;
          else Term;&lt;br /&gt;
          while (Symbol in[sPlus, sMinus]) do&lt;br /&gt;
          begin&lt;br /&gt;
            Operation := Symbol;&lt;br /&gt;
            GetSym;&lt;br /&gt;
            Term;&lt;br /&gt;
            case Operation of&lt;br /&gt;
              sPlus: GenCode(opr, 0, 2);&lt;br /&gt;
              sMinus: GenCode(opr, 0, 3);&lt;br /&gt;
            end&lt;br /&gt;
          end&lt;br /&gt;
        end; (*Expression*)&lt;br /&gt;
&lt;br /&gt;
        procedure Condition;&lt;br /&gt;
        (*Condition       = Expression (&amp;quot;=&amp;quot;|&amp;quot;&amp;lt;&amp;quot;|&amp;quot;&amp;gt;&amp;quot;|&amp;quot;&amp;gt;=&amp;quot;|&amp;quot;&amp;lt;=&amp;quot;|&amp;quot;#&amp;quot;) Expression.*)&lt;br /&gt;
        var&lt;br /&gt;
          Operation : TSymbol;&lt;br /&gt;
        begin (*Condition*)&lt;br /&gt;
          Expression;&lt;br /&gt;
          Operation := Symbol;&lt;br /&gt;
          GetSym;&lt;br /&gt;
          Expression;&lt;br /&gt;
          case Operation of&lt;br /&gt;
            sEqual : GenCode(opr, 0, 8);&lt;br /&gt;
            sSmaller : GenCode(opr, 0, 10);&lt;br /&gt;
            sBigger : GenCode(opr, 0, 11);&lt;br /&gt;
            sBiggerEqual : GenCode(opr, 0, 12);&lt;br /&gt;
            sSmallerEqual : GenCode(opr, 0, 13);&lt;br /&gt;
            sUnEqual : GEnCode(opr, 0, 9);&lt;br /&gt;
          else&lt;br /&gt;
            ErrorExpected([sEqual, sSmaller, sBigger, sBiggerEqual, sSmallerEqual, sUnequal], Symbol)&lt;br /&gt;
          end&lt;br /&gt;
        end; (*Condition*)&lt;br /&gt;
&lt;br /&gt;
      var&lt;br /&gt;
        IdentPos : Integer;&lt;br /&gt;
        Ident : ShortString;&lt;br /&gt;
&lt;br /&gt;
        CodePosition1, CodePosition2 : Integer;&lt;br /&gt;
&lt;br /&gt;
      begin (*Statement*)&lt;br /&gt;
        case Symbol of&lt;br /&gt;
          sIdent: begin&lt;br /&gt;
                    Ident := Id;&lt;br /&gt;
                    IdentPos := Position(ID, TablePosition);&lt;br /&gt;
                    if (IdentPos = 0) then&lt;br /&gt;
                      Error(ERR_PARSE_UNKNOWN_IDENT);&lt;br /&gt;
                    if Table[IdentPos].Kind = itProcedure then&lt;br /&gt;
                    begin&lt;br /&gt;
                      //Prozeduraufruf&lt;br /&gt;
                      GenCode(cal, lev - Table[IdentPos].level, Table[IdentPos].adr);&lt;br /&gt;
                      GetSym&lt;br /&gt;
                    end else if Table[IdentPos].Kind = itVariable then&lt;br /&gt;
                    begin&lt;br /&gt;
                      GetSym;&lt;br /&gt;
                      Expect(sBecomes);&lt;br /&gt;
                      GetSym;&lt;br /&gt;
                      Expression;&lt;br /&gt;
                      GenCode(sto, lev- Table[IdentPos].level, Table[IdentPos].Adr)&lt;br /&gt;
                    end&lt;br /&gt;
                    else&lt;br /&gt;
                      Error(ERR_PARSE_NO_CONST_ALLOWED)&lt;br /&gt;
                  end;&lt;br /&gt;
          sWrite: begin&lt;br /&gt;
                    GetSym;&lt;br /&gt;
                    Expression;&lt;br /&gt;
                    GenCode(wri, 0, 0)&lt;br /&gt;
                  end;&lt;br /&gt;
          sIf :   begin&lt;br /&gt;
                    GetSym;&lt;br /&gt;
                    Condition;&lt;br /&gt;
                    Expect(sThen);&lt;br /&gt;
                    GetSym;&lt;br /&gt;
&lt;br /&gt;
                    CodePosition1 := cx;&lt;br /&gt;
                    GenCode(jpc, 0, 0);&lt;br /&gt;
&lt;br /&gt;
                    StatementSequence(TablePosition, lev);&lt;br /&gt;
                    Expect(sEnd);&lt;br /&gt;
                    GetSym;&lt;br /&gt;
                    CodePosition2 := cx;&lt;br /&gt;
                    GenCode(jmp, 0,0);&lt;br /&gt;
&lt;br /&gt;
                    Code[CodePosition1].a := cx;&lt;br /&gt;
&lt;br /&gt;
                    while Symbol = sElseIf do&lt;br /&gt;
                    begin&lt;br /&gt;
                      GetSym;&lt;br /&gt;
                      Condition;&lt;br /&gt;
                      Expect(sThen);&lt;br /&gt;
                      GetSym;&lt;br /&gt;
&lt;br /&gt;
                      CodePosition1 := cx;&lt;br /&gt;
                      GenCode(jpc, 0, 0);&lt;br /&gt;
&lt;br /&gt;
                      StatementSequence(TablePosition, lev);&lt;br /&gt;
                      Expect(sEnd);&lt;br /&gt;
                      GetSym;&lt;br /&gt;
&lt;br /&gt;
                      Code[CodePosition2].a := cx;&lt;br /&gt;
                      CodePosition2 := cx;&lt;br /&gt;
                      GenCode(jmp, 0,0);&lt;br /&gt;
&lt;br /&gt;
                      Code[CodePosition1].a := cx&lt;br /&gt;
                    end;&lt;br /&gt;
                    if Symbol = sElse then&lt;br /&gt;
                    begin&lt;br /&gt;
                      GetSym;&lt;br /&gt;
                      StatementSequence(TablePosition, lev);&lt;br /&gt;
                      Expect(sEnd);&lt;br /&gt;
                      GetSym&lt;br /&gt;
                    end;&lt;br /&gt;
                    Code[CodePosition2].a := cx&lt;br /&gt;
                  end;&lt;br /&gt;
          sWhile :&lt;br /&gt;
                  begin&lt;br /&gt;
                    GetSym;&lt;br /&gt;
                    CodePosition2 := cx;&lt;br /&gt;
                    Condition;&lt;br /&gt;
                    Expect(sDo);&lt;br /&gt;
                    GetSym;&lt;br /&gt;
&lt;br /&gt;
                    CodePosition1 := cx;&lt;br /&gt;
                    GenCode(jpc, 0, 0);&lt;br /&gt;
&lt;br /&gt;
                    StatementSequence(TablePosition, lev);&lt;br /&gt;
                    Expect(sEnd);&lt;br /&gt;
                    GenCode(jmp, 0, CodePosition2);&lt;br /&gt;
&lt;br /&gt;
                    GetSym;&lt;br /&gt;
&lt;br /&gt;
                    Code[CodePosition1].a := cx&lt;br /&gt;
                  end;&lt;br /&gt;
          sBegin :&lt;br /&gt;
                  begin&lt;br /&gt;
                    GetSym;&lt;br /&gt;
                    StatementSequence(TablePosition, lev);&lt;br /&gt;
                    Expect(sEnd);&lt;br /&gt;
                    GetSym&lt;br /&gt;
                  end;&lt;br /&gt;
&lt;br /&gt;
        else&lt;br /&gt;
          (*Der Fehler darf getrost ignoriert werden*)&lt;br /&gt;
          //Error(ERR_PARSE_UNALLOWED_STATEMENT)&lt;br /&gt;
        end&lt;br /&gt;
      end; (*Statement*)&lt;br /&gt;
&lt;br /&gt;
    begin (*Statement Sequence*)&lt;br /&gt;
      Statement;&lt;br /&gt;
      while Symbol = sSemiColon do&lt;br /&gt;
      begin&lt;br /&gt;
        GetSym;&lt;br /&gt;
        Statement&lt;br /&gt;
      end&lt;br /&gt;
    end; (*Statement Sequence*)&lt;br /&gt;
&lt;br /&gt;
    function Declarations(TablePosition : Integer; lev : Integer): Integer;&lt;br /&gt;
    var&lt;br /&gt;
      DataPos : Integer;&lt;br /&gt;
      InitTablePos : Integer;&lt;br /&gt;
      InitCodePos : Integer;&lt;br /&gt;
&lt;br /&gt;
    (*&lt;br /&gt;
      VarSeq          = VAR VarDecl {&amp;quot;;&amp;quot; VarDecl}&amp;quot;;&amp;quot;.&lt;br /&gt;
      ConstSeq        = CONST ConstDecl {&amp;quot;;&amp;quot; ConstDecl}&amp;quot;;&amp;quot;.&lt;br /&gt;
      DeclSeq         = {VarSeq | ConstSeq | ProcedureDecl}.&lt;br /&gt;
&lt;br /&gt;
    *)&lt;br /&gt;
      procedure Enter(Typ : TIdentType);&lt;br /&gt;
      begin&lt;br /&gt;
        Inc(TablePosition);&lt;br /&gt;
        if TablePosition &amp;gt; Length(Table) - 1 then&lt;br /&gt;
          SetLength(Table, Length(Table)+16);&lt;br /&gt;
        with Table[TablePosition] do&lt;br /&gt;
        begin&lt;br /&gt;
          Name := ID;&lt;br /&gt;
          Kind := Typ;&lt;br /&gt;
          case Kind of&lt;br /&gt;
            itConstant: val := num;&lt;br /&gt;
            itVariable: begin&lt;br /&gt;
                          level := lev;&lt;br /&gt;
                          adr := DataPos;&lt;br /&gt;
                          Inc(DataPos)&lt;br /&gt;
                        end;&lt;br /&gt;
            itProcedure: level := lev&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
      end; (*Enter*)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
      procedure ProcedureDecl;&lt;br /&gt;
      (*ProcedureDecl   = PROCEDURE Ident&amp;quot;;&amp;quot;&lt;br /&gt;
                          DeclSeq BEGIN StatementSeq END Ident &amp;quot;;&amp;quot;.*)&lt;br /&gt;
      var&lt;br /&gt;
        ProcedureName : String;&lt;br /&gt;
        ProcTablePos : Integer;&lt;br /&gt;
      begin&lt;br /&gt;
        Expect(sProcedure);&lt;br /&gt;
        GetSym;&lt;br /&gt;
        Expect(sIdent);&lt;br /&gt;
        Enter(itProcedure);&lt;br /&gt;
        ProcedureName := ID;&lt;br /&gt;
&lt;br /&gt;
        GetSym;&lt;br /&gt;
        Expect(sSemiColon);&lt;br /&gt;
        GetSym;&lt;br /&gt;
        ProcTablePos := Declarations(TablePosition, lev+1);&lt;br /&gt;
        Expect(sBegin);&lt;br /&gt;
        GetSym;&lt;br /&gt;
        StatementSequence(ProcTablePos, lev +1);&lt;br /&gt;
        Expect(sEnd);&lt;br /&gt;
        GetSym;&lt;br /&gt;
        Expect(sIdent);&lt;br /&gt;
        if ProcedureName &amp;lt;&amp;gt; ID then&lt;br /&gt;
          Error(Format(ERR_PARSE_WRONG_PROCEDURE_ENDED, [ProcedureName, ID]));&lt;br /&gt;
        GetSym;&lt;br /&gt;
        Expect(sSemiColon);&lt;br /&gt;
        //rücksprung&lt;br /&gt;
        GenCode(Opr, 0,0);&lt;br /&gt;
        GetSym&lt;br /&gt;
      end;&lt;br /&gt;
&lt;br /&gt;
      procedure ConstDecl;&lt;br /&gt;
      (*ConstDecl       = Ident &amp;quot;=&amp;quot; Zahl.*)&lt;br /&gt;
      begin (*ConstDecl*)&lt;br /&gt;
        Expect(sIdent);&lt;br /&gt;
        GetSym;&lt;br /&gt;
        Expect(sEqual);&lt;br /&gt;
        GetSym;&lt;br /&gt;
        Expect(sInteger);&lt;br /&gt;
        Enter(itConstant);&lt;br /&gt;
        GetSym&lt;br /&gt;
      end; (*ConstDecl*)&lt;br /&gt;
&lt;br /&gt;
      procedure VarDecl;&lt;br /&gt;
      (*VarDecl         = Ident {&amp;quot;,&amp;quot; Ident}.*)&lt;br /&gt;
      begin (*VarDecl*)&lt;br /&gt;
        Expect(sIdent);&lt;br /&gt;
        Enter(itVariable);&lt;br /&gt;
        GetSym;&lt;br /&gt;
        while Symbol = sComma do&lt;br /&gt;
        begin&lt;br /&gt;
          GetSym;&lt;br /&gt;
          Expect(sIdent);&lt;br /&gt;
          Enter(itVariable);&lt;br /&gt;
          GetSym&lt;br /&gt;
        end&lt;br /&gt;
      end; (*VarDecl*)&lt;br /&gt;
&lt;br /&gt;
    begin (*Declarations*)&lt;br /&gt;
      DataPos := 3;&lt;br /&gt;
      InitTablePos := TablePosition;&lt;br /&gt;
      InitCodePos := cx;&lt;br /&gt;
      Table[TablePosition].adr := cx;&lt;br /&gt;
&lt;br /&gt;
      GenCode(jmp, 0,0);&lt;br /&gt;
      while Symbol in [sVar, sConst, sProcedure] do&lt;br /&gt;
        case Symbol of&lt;br /&gt;
          sVar   : begin&lt;br /&gt;
                     GetSym;&lt;br /&gt;
                     VarDecl;&lt;br /&gt;
                     Expect(sSemiColon);&lt;br /&gt;
                     GetSym;&lt;br /&gt;
                     while Symbol = sIdent do&lt;br /&gt;
                     begin&lt;br /&gt;
                       VarDecl;&lt;br /&gt;
                       Expect(sSemiColon);&lt;br /&gt;
                       GetSym&lt;br /&gt;
                     end&lt;br /&gt;
                   end;&lt;br /&gt;
         sConst  : begin&lt;br /&gt;
                     GetSym;&lt;br /&gt;
                     ConstDecl;&lt;br /&gt;
                     Expect(sSemiColon);&lt;br /&gt;
                     GetSym;&lt;br /&gt;
                     while Symbol = sIdent do&lt;br /&gt;
                     begin&lt;br /&gt;
                       ConstDecl;&lt;br /&gt;
                       Expect(sSemiColon);&lt;br /&gt;
                       GetSym&lt;br /&gt;
                     end&lt;br /&gt;
                   end;&lt;br /&gt;
          sProcedure : ProcedureDecl;&lt;br /&gt;
        end;&lt;br /&gt;
      Code[table[InitTablePos].adr].a := cx;&lt;br /&gt;
      with Table[InitTablePos] do&lt;br /&gt;
      begin&lt;br /&gt;
        adr := cx;&lt;br /&gt;
        size := DataPos&lt;br /&gt;
      end;&lt;br /&gt;
      //Speicher reservieren&lt;br /&gt;
      GenCode(int, 0, DataPos);&lt;br /&gt;
      Result := TablePosition&lt;br /&gt;
    end; (*Declarations*)&lt;br /&gt;
&lt;br /&gt;
  (*Module        = MODULE Ident &amp;quot;;&amp;quot;&lt;br /&gt;
                    DeclSeq&lt;br /&gt;
                    BEGIN&lt;br /&gt;
                      StatementSeq&lt;br /&gt;
                    END Ident &amp;quot;.&amp;quot;.*)&lt;br /&gt;
  var&lt;br /&gt;
    TablePosition : Integer;&lt;br /&gt;
    ModuleName : ShortString;&lt;br /&gt;
&lt;br /&gt;
  begin (*Module*)&lt;br /&gt;
    Expect(sModule);&lt;br /&gt;
    GetSym;&lt;br /&gt;
    Expect(sIdent);&lt;br /&gt;
    ModuleName := Id;&lt;br /&gt;
    GetSym;&lt;br /&gt;
    Expect(sSemiColon);&lt;br /&gt;
    GetSym;&lt;br /&gt;
    TablePosition := Declarations(0,0);&lt;br /&gt;
    //Code[0].a := cx;&lt;br /&gt;
    Expect(sBegin);&lt;br /&gt;
    GetSym;&lt;br /&gt;
    StatementSequence(TablePosition, 0);&lt;br /&gt;
    Expect(sEnd);&lt;br /&gt;
&lt;br /&gt;
    //Und Ende...&lt;br /&gt;
    GenCode(jmp, 0,0);&lt;br /&gt;
&lt;br /&gt;
    GetSym;&lt;br /&gt;
    Expect(sIdent);&lt;br /&gt;
    if ModuleName &amp;lt;&amp;gt; Id then&lt;br /&gt;
      Writeln(Format('%d: Warning: Module ID &amp;lt;&amp;gt; End ID. Code already generated', [Line]));&lt;br /&gt;
    GetSym;&lt;br /&gt;
    Expect(sSemiColon);&lt;br /&gt;
    GetSym;&lt;br /&gt;
    if Symbol &amp;lt;&amp;gt; sNone then&lt;br /&gt;
      WriteLn(Format('%d: Code after Module END is ignored!', [Line]))&lt;br /&gt;
  end (*Module*);&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
  F : File of Instruction;&lt;br /&gt;
  I : Integer;&lt;br /&gt;
begin&lt;br /&gt;
  AssignFile(InFile, ParamStr(1));&lt;br /&gt;
  Reset(InFile, 1);&lt;br /&gt;
  //Ch mit leerzeichen initialisieren&lt;br /&gt;
  Ch := ' ';&lt;br /&gt;
  Line := 1;&lt;br /&gt;
  cx := 0;&lt;br /&gt;
  SetLength(Table, 1);&lt;br /&gt;
  GetSym;&lt;br /&gt;
  Module;&lt;br /&gt;
  AssignFile(F, ParamStr(1)+'.bin');&lt;br /&gt;
  ReWrite(F);&lt;br /&gt;
  i := 0;&lt;br /&gt;
  while i &amp;lt; cx do&lt;br /&gt;
  begin&lt;br /&gt;
    Write(F, Code[i]);&lt;br /&gt;
    Inc(i)&lt;br /&gt;
  end;&lt;br /&gt;
  CloseFile(F);&lt;br /&gt;
  WriteLn('Done, no syntax errors detected... Code successfully generated');&lt;br /&gt;
  WriteLn(Format('# Instructions: %d Codesize: %d', [cx, (cx) * SizeOf(Instruction)]));&lt;br /&gt;
  ReadLn;&lt;br /&gt;
  CloseFile(InFile)&lt;br /&gt;
end.&lt;br /&gt;
&amp;lt;/pascal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum testen noch ein kleines Script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pascal&amp;gt;&lt;br /&gt;
module test;&lt;br /&gt;
(* Testscript&lt;br /&gt;
Ausgabe ist die folgende, wenn Compiler und Interpreter korrekt funktionieren:&lt;br /&gt;
Zahlen von 1 bis 10&lt;br /&gt;
0&lt;br /&gt;
10&lt;br /&gt;
100&lt;br /&gt;
-1&lt;br /&gt;
-10000&lt;br /&gt;
*)&lt;br /&gt;
&lt;br /&gt;
  procedure TestWhile;&lt;br /&gt;
  var&lt;br /&gt;
    i;&lt;br /&gt;
  begin&lt;br /&gt;
    i := 0;&lt;br /&gt;
    while i &amp;lt; 10 do&lt;br /&gt;
      i := i + 1;&lt;br /&gt;
      write i&lt;br /&gt;
    end&lt;br /&gt;
  end TestWhile;&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
  a;&lt;br /&gt;
&lt;br /&gt;
  procedure TestIf;&lt;br /&gt;
  begin&lt;br /&gt;
    if a &amp;lt; 10 then&lt;br /&gt;
      write 0&lt;br /&gt;
    end&lt;br /&gt;
    elseif a &amp;lt; 100 then&lt;br /&gt;
      write 10&lt;br /&gt;
    end&lt;br /&gt;
    elseif a &amp;lt; 1000 then&lt;br /&gt;
      write 100&lt;br /&gt;
    end&lt;br /&gt;
    else&lt;br /&gt;
      write -1&lt;br /&gt;
    end&lt;br /&gt;
  end TestIf;&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
  (*Zahlen von 1 bis 10*)&lt;br /&gt;
  TestWhile;&lt;br /&gt;
&lt;br /&gt;
  (* Ausgabe 0 *)&lt;br /&gt;
  a := 0;&lt;br /&gt;
  TestIf;&lt;br /&gt;
&lt;br /&gt;
  (* Ausgabe 10 *)&lt;br /&gt;
  a := 11;&lt;br /&gt;
  TestIf;&lt;br /&gt;
&lt;br /&gt;
  (* Ausgabe 100 *)&lt;br /&gt;
  a := 111;&lt;br /&gt;
  TestIf;&lt;br /&gt;
&lt;br /&gt;
  (* Ausgabe -1 *)&lt;br /&gt;
  a := 10000;&lt;br /&gt;
  TestIf;&lt;br /&gt;
&lt;br /&gt;
  (* Ausgabe -10000 *)&lt;br /&gt;
  Write -10000&lt;br /&gt;
end Test;&lt;br /&gt;
&amp;lt;/pascal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn jemand das Bedürfnis hat, sich den erzeugten Code einmal näher anzuschauen, empfehle ich, das Script zu Compilieren und dann den Interpreter mit dem zusätzlichen Parameter &amp;quot;+i&amp;quot; zu starten.&lt;br /&gt;
&lt;br /&gt;
==Abschluss==&lt;br /&gt;
&lt;br /&gt;
Erledigt. Wir haben eine einfache Skriptsprache Implementiert. Sie benötigt allerdings noch einige Erweiterungen, um sie wirklich sinnvoll einsetzen zu können. Ich denke aber, dass jeder, der das Tutorial bis hier verstanden hat, keine größeren Probleme haben sollte diese einzubauen:&lt;br /&gt;
&lt;br /&gt;
#Erweiterung der Sprache um den Typ Boolean. Damit verbunden sind z.B. Operatoren wie '''and''', '''or''' und '''not'''. Ensprechende '''EBNF''' könnte so aussehehn:&lt;br /&gt;
&lt;br /&gt;
      ...&lt;br /&gt;
      BoolExpression  = BoolImplication {&amp;quot;=&amp;quot; BoolImplication}.&lt;br /&gt;
      BoolImplication = BoolProduct[&amp;quot;=&amp;gt;&amp;quot;|&amp;quot;&amp;lt;=&amp;quot; BoolProduct].&lt;br /&gt;
      BoolProduct     = BoolFactor {&amp;quot;AND&amp;quot;|&amp;quot;OR&amp;quot; BoolFactor}.&lt;br /&gt;
      BoolFactor      = {&amp;quot;NOT&amp;quot;} BoolAtomic.&lt;br /&gt;
      BoolAtomic      = (&amp;quot;(&amp;quot; BoolExpression &amp;quot;)&amp;quot;) |&lt;br /&gt;
                        TRUE | FALSE |&lt;br /&gt;
                        Ident | Condition.&lt;br /&gt;
      ...&lt;br /&gt;
&lt;br /&gt;
:Möglicherweise sind, um Probleme zu vermeiden, bestimmte Symbole durch andere zu ersetzen. Wie &amp;quot;=&amp;quot; durch &amp;quot;==&amp;quot;, etc.&lt;br /&gt;
#Erweitern der Sprache um den Typ Float&lt;br /&gt;
#Erweitern der Sprache um den Typ Array(1-Dimensionale sollten erstmal langen)&lt;br /&gt;
#(Erweitern der Sprache um den Typ String)&lt;br /&gt;
#Erweitern der Sprache um Funktionen und Prozeduren mit Parametern&lt;br /&gt;
&lt;br /&gt;
Wenn das geschehen ist, hat man ein sehr mächtiges Werkzeug entstehen lassen. Es fehlt dann nur noch, dass man dem Compiler ein paar Funktionen bereits mit auf den Weg gibt, die das interpretierende Programm in echtem Maschienencode bereitstellt(z.B. zur Steuerung). Im übrigen ist davon auszugehen, dass bei den genannten Erweiterungen auch verschiedene Änderungen an der VM sinnvoll sind.&lt;br /&gt;
&lt;br /&gt;
...have a lot of fun!&lt;br /&gt;
Delphic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{TUTORIAL_NAVIGATION| [[Tutorial Scriptsprachen Teil 1]] | - }}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Tutorial|Scriptsprachen Teil 2]]&lt;/div&gt;</summary>
		<author><name>MyChaOS</name></author>	</entry>

	</feed>