<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://zumunterrichten.idea-sketch.com/index.php?action=history&amp;feed=atom&amp;title=Lernpfad_Know-How-Computer%2FKHA-Parser_als_Endlicher_Automat</id>
	<title>Lernpfad Know-How-Computer/KHA-Parser als Endlicher Automat - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://zumunterrichten.idea-sketch.com/index.php?action=history&amp;feed=atom&amp;title=Lernpfad_Know-How-Computer%2FKHA-Parser_als_Endlicher_Automat"/>
	<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Lernpfad_Know-How-Computer/KHA-Parser_als_Endlicher_Automat&amp;action=history"/>
	<updated>2026-06-26T03:18:27Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in ZUM-Unterrichten</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Lernpfad_Know-How-Computer/KHA-Parser_als_Endlicher_Automat&amp;diff=152105&amp;oldid=prev</id>
		<title>Ukalina am 14. April 2026 um 15:19 Uhr</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Lernpfad_Know-How-Computer/KHA-Parser_als_Endlicher_Automat&amp;diff=152105&amp;oldid=prev"/>
		<updated>2026-04-14T15:19:34Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 14. April 2026, 15:19 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-l341&quot;&gt;Zeile 341:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 341:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Mithilfe der Übergangsregeln in Form von Wenn-dann-sonst-Aussagen kann der KHA-Parser recht einfach in einer höheren Programmiersprache mit geschachtelten if-else-Anweisungen implementiert werden. Hier z.B. ein bewusst einfach gehaltenes Konsolen-Programm in Java:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Mithilfe der Übergangsregeln in Form von Wenn-dann-sonst-Aussagen kann der KHA-Parser recht einfach in einer höheren Programmiersprache mit geschachtelten if-else-Anweisungen implementiert werden. Hier z.B. ein bewusst einfach gehaltenes Konsolen-Programm in Java:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{Lösung versteckt&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|1 =&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;/** KHA_Parser als Endlicher Automat&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;/** KHA_Parser als Endlicher Automat&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-l404&quot;&gt;Zeile 404:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 406:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;} // class KHA_Parser&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;} // class KHA_Parser&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|2 = Java-Programm anzeigen&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|3= Java-Progamm verbergen&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====Zwei Anmerkungen zum Schluss====&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====Zwei Anmerkungen zum Schluss====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key zumunterrichten:diff::1.12:old-152104:rev-152105 --&gt;
&lt;/table&gt;</summary>
		<author><name>Ukalina</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Lernpfad_Know-How-Computer/KHA-Parser_als_Endlicher_Automat&amp;diff=152104&amp;oldid=prev</id>
		<title>Ukalina am 14. April 2026 um 15:14 Uhr</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Lernpfad_Know-How-Computer/KHA-Parser_als_Endlicher_Automat&amp;diff=152104&amp;oldid=prev"/>
		<updated>2026-04-14T15:14:13Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 14. April 2026, 15: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-l15&quot;&gt;Zeile 15:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 15:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# &amp;#039;&amp;#039;&amp;#039;Zielcode-Generierung&amp;#039;&amp;#039;&amp;#039; (Codegenerator)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# &amp;#039;&amp;#039;&amp;#039;Zielcode-Generierung&amp;#039;&amp;#039;&amp;#039; (Codegenerator)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;: Die einzelnen Phasen sind allerdings bei einem Compiler deutlich komplexer und ihre Implementierung ist erheblich aufwändiger als bei einem Assembler.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;: Die einzelnen Phasen sind allerdings bei einem Compiler deutlich komplexer und ihre Implementierung ist erheblich aufwändiger als bei einem Assembler.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;* In diesem Kapitel geht es darum, wie man den &amp;#039;&amp;#039;&amp;#039;Parser&amp;#039;&amp;#039;&amp;#039; eines Know-How-Assemblers in einer Programmiersprache wie z.B. Java implementieren kann. Dabei wird zugleich auch das Konzept eines &amp;quot;&amp;#039;&amp;#039;&amp;#039;Endlichen Automaten&amp;#039;&amp;#039;&amp;#039;&amp;quot; vorgestellt, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;das &lt;/del&gt;in der &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;theoretischen &lt;/del&gt;Informatik eine wichtige Rolle &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;spielt&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;* In diesem Kapitel geht es darum, wie man den &amp;#039;&amp;#039;&amp;#039;Parser&amp;#039;&amp;#039;&amp;#039; eines Know-How-Assemblers in einer Programmiersprache wie z.B. Java implementieren kann. Dabei wird zugleich auch das Konzept eines &amp;quot;&amp;#039;&amp;#039;&amp;#039;Endlichen Automaten&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;#039;&amp;#039;&amp;#039;&amp;quot; und seine Darstellung als &amp;quot;&amp;#039;&amp;#039;&amp;#039;Zustandsübergangsgraph&lt;/ins&gt;&amp;#039;&amp;#039;&amp;#039;&amp;quot; vorgestellt, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;die beide &lt;/ins&gt;in der &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Theoretischen &lt;/ins&gt;Informatik eine wichtige Rolle &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;spielen&lt;/ins&gt;.  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}} &amp;lt;!-- Box Lernpfad --&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}} &amp;lt;!-- Box Lernpfad --&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key zumunterrichten:diff::1.12:old-152101:rev-152104 --&gt;
&lt;/table&gt;</summary>
		<author><name>Ukalina</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Lernpfad_Know-How-Computer/KHA-Parser_als_Endlicher_Automat&amp;diff=152101&amp;oldid=prev</id>
		<title>Ukalina am 14. April 2026 um 14:41 Uhr</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Lernpfad_Know-How-Computer/KHA-Parser_als_Endlicher_Automat&amp;diff=152101&amp;oldid=prev"/>
		<updated>2026-04-14T14:41:04Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 14. April 2026, 14:41 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=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;__NOTOC__&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;__NOTOC__&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;{{Fortsetzung|&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;{{Fortsetzung&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;vorher=zurück|&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;|vorher=zurück|vorherlink=Lernpfad_Know-How-Computer/Know-How-Assembler_-_Grammatik_einer_formalen_Sprache&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;vorherlink=Lernpfad_Know-How-Computer/Know-How-Assembler_-_Grammatik_einer_formalen_Sprache|&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;|weiter=weiter|weiterlink=Lernpfad_Know-How-Computer/Anhang&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;weiter=weiter|&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;|übersicht=&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Kapitelübersicht&lt;/ins&gt;|übersichtlink=Lernpfad_Know-How-Computer&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;#Kapitelübersicht&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;weiterlink=Lernpfad_Know-How-Computer/Anhang|&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;übersicht=&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Startseite&lt;/del&gt;|&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;übersichtlink=Lernpfad_Know-How-Computer}}&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Box&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Box&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;1&lt;/del&gt;=Ein Parser als Endlicher Automat am Beispiel Know-How-Assembler  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Titel &lt;/ins&gt;= Ein Parser als Endlicher Automat am Beispiel Know-How-Assembler&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;2&lt;/del&gt;=Im Kapitel [[Lernpfad_Know-How-Computer/Know-How-Assembler_-_Grammatik_einer_formalen_Sprache|Know-How-Assembler - Grammatik einer formalen Sprache]] wurde darauf hingewiesen, dass die Überprüfung eines Assemblercodes auf seine formale Korrektheit auch von einem Computerprogramm übernommen werden kann. Bei höheren Programmiersprachen wie z.B. C++, Delphi, Java oder Python heißen solche Übersetzungsprogramme Compiler. Von ihrem Grundaufbau her sind Assembler und Compiler vergleichbar. Im Compilerbau teilt man den Übersetzungsprozess üblicherweise in drei Phasen ein:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Klasse &lt;/ins&gt;= &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Lernpfad&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;# Lexikalische Analyse (Lexer oder auch Scanner)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|Inhalt = &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;# Syntaktische Analyse (Parser)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* &lt;/ins&gt;Im Kapitel [[Lernpfad_Know-How-Computer/Know-How-Assembler_-_Grammatik_einer_formalen_Sprache|Know-How-Assembler - Grammatik einer formalen Sprache]] wurde darauf hingewiesen, dass die Überprüfung eines Assemblercodes auf seine formale Korrektheit auch von einem Computerprogramm übernommen werden kann. Bei höheren Programmiersprachen wie z.B. C++, Delphi, Java oder Python heißen solche Übersetzungsprogramme Compiler. Von ihrem Grundaufbau her sind Assembler und Compiler vergleichbar. Im &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;#039;&amp;#039;&amp;#039;&lt;/ins&gt;Compilerbau&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;#039;&amp;#039;&amp;#039; &lt;/ins&gt;teilt man den Übersetzungsprozess üblicherweise in drei Phasen ein:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;# Zielcode-Generierung (Codegenerator)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;#039;&amp;#039;&amp;#039;&lt;/ins&gt;Lexikalische Analyse&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;#039;&amp;#039;&amp;#039; &lt;/ins&gt;(Lexer oder auch Scanner)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;Die einzelnen Phasen sind allerdings bei einem Compiler deutlich komplexer und ihre Implementierung ist erheblich aufwändiger als bei einem Assembler.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;#039;&amp;#039;&amp;#039;&lt;/ins&gt;Syntaktische Analyse&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;#039;&amp;#039;&amp;#039; &lt;/ins&gt;(Parser)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;#039;&amp;#039;&amp;#039;&lt;/ins&gt;Zielcode-Generierung&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;#039;&amp;#039;&amp;#039; &lt;/ins&gt;(Codegenerator)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;In diesem Kapitel geht es darum, wie man den Parser eines Know-How-Assemblers in einer Programmiersprache wie z.B. Java implementieren kann. Dabei wird zugleich auch das Konzept eines &amp;quot;Endlichen Automaten&amp;quot; vorgestellt, das in der theoretischen Informatik eine wichtige Rolle spielt.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;: &lt;/ins&gt;Die einzelnen Phasen sind allerdings bei einem Compiler deutlich komplexer und ihre Implementierung ist erheblich aufwändiger als bei einem Assembler.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|3=Lernpfad&lt;/del&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* &lt;/ins&gt;In diesem Kapitel geht es darum, wie man den &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;#039;&amp;#039;&amp;#039;&lt;/ins&gt;Parser&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;#039;&amp;#039;&amp;#039; &lt;/ins&gt;eines Know-How-Assemblers in einer Programmiersprache wie z.B. Java implementieren kann. Dabei wird zugleich auch das Konzept eines &amp;quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;#039;&amp;#039;&amp;#039;&lt;/ins&gt;Endlichen Automaten&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;#039;&amp;#039;&amp;#039;&lt;/ins&gt;&amp;quot; vorgestellt, das in der theoretischen Informatik eine wichtige Rolle spielt.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;!-- Box Lernpfad --&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====Lexikalische Analyse====&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====Lexikalische Analyse====&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-l411&quot;&gt;Zeile 411:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 410:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;{{Fortsetzung|&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;{{Fortsetzung&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;vorher=zurück|&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;|vorher=zurück|vorherlink=Lernpfad_Know-How-Computer/Know-How-Assembler_-_Grammatik_einer_formalen_Sprache&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;vorherlink=Lernpfad_Know-How-Computer/Know-How-Assembler_-_Grammatik_einer_formalen_Sprache|&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;|weiter=weiter|weiterlink=Lernpfad_Know-How-Computer/Anhang&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;weiter=weiter|&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;|übersicht=&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Kapitelübersicht&lt;/ins&gt;|übersichtlink=Lernpfad_Know-How-Computer&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;#Kapitelübersicht&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;weiterlink=Lernpfad_Know-How-Computer/Anhang|&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;übersicht=&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Startseite&lt;/del&gt;|&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;übersichtlink=Lernpfad_Know-How-Computer}}&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Know-How-Computer]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Know-How-Computer]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Informatik]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Informatik]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Sekundarstufe 2]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Sekundarstufe 2]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Kategorie:Barrierefrei]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key zumunterrichten:diff::1.12:old-143012:rev-152101 --&gt;
&lt;/table&gt;</summary>
		<author><name>Ukalina</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Lernpfad_Know-How-Computer/KHA-Parser_als_Endlicher_Automat&amp;diff=143012&amp;oldid=prev</id>
		<title>Ukalina am 30. Juli 2025 um 19:18 Uhr</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Lernpfad_Know-How-Computer/KHA-Parser_als_Endlicher_Automat&amp;diff=143012&amp;oldid=prev"/>
		<updated>2025-07-30T19:18:45Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 30. Juli 2025, 19:18 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-l90&quot;&gt;Zeile 90:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 90:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Welche Symbole sind in diesem Startzustand syntaktisch zulässig - oder mit anderen Worten: Mit welchen Symbolen kann ein KHA-Programm beginnen - und mit welchen nicht?&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Welche Symbole sind in diesem Startzustand syntaktisch zulässig - oder mit anderen Worten: Mit welchen Symbolen kann ein KHA-Programm beginnen - und mit welchen nicht?&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;Nach den Syntax-Regeln aus dem Kapitel [[Lernpfad_Know-How-Computer/Know-How-Assembler_-&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Grammatik_einer_formalen_Sprache&lt;/del&gt;|Know-How-Assembler - Grammatik einer formalen Sprache]] geht hervor, dass ein KHA-Programm entweder mit einem Adressbefehl (Tokentyp &amp;#039;A&amp;#039;), einem Bezeichner für ein Label (Tokentyp &amp;#039;B&amp;#039;) oder mit einem Stoppbefehl (Tokentyp &amp;#039;S&amp;#039;) beginnen kann. Jedes dieser Symbole überführt den EA vom Zustand n in einen neuen Folgezustand - nennen wir diese einmal a, b und s. Alle anderen Symbole wie Doppelpunkt, Semikolon oder Zahl sind am Anfang nicht erlaubt. Falls sie trotzdem gleich zu Beginn als erstes Symbol auftauchen, wird dadurch den EA in den Fehler-Zustand f überführt, aus dem er auch im Folgenden nicht mehr herauskommt - egal welche Eingabe-Symbole noch folgen. Denn wenn erst einmal ein Fehler in der Symbolabfolge aufgetreten ist, kann dieser nicht durch weitere korrekte Abfolgen &amp;quot;ungeschehen&amp;quot; gemacht werden.  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;Nach den Syntax-Regeln aus dem Kapitel [[Lernpfad_Know-How-Computer/Know-How-Assembler_-&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;_Grammatik_einer_formalen_Sprache&lt;/ins&gt;|Know-How-Assembler - Grammatik einer formalen Sprache]] geht hervor, dass ein KHA-Programm entweder mit einem Adressbefehl (Tokentyp &amp;#039;A&amp;#039;), einem Bezeichner für ein Label (Tokentyp &amp;#039;B&amp;#039;) oder mit einem Stoppbefehl (Tokentyp &amp;#039;S&amp;#039;) beginnen kann. Jedes dieser Symbole überführt den EA vom Zustand n in einen neuen Folgezustand - nennen wir diese einmal a, b und s. Alle anderen Symbole wie Doppelpunkt, Semikolon oder Zahl sind am Anfang nicht erlaubt. Falls sie trotzdem gleich zu Beginn als erstes Symbol auftauchen, wird dadurch den EA in den Fehler-Zustand f überführt, aus dem er auch im Folgenden nicht mehr herauskommt - egal welche Eingabe-Symbole noch folgen. Denn wenn erst einmal ein Fehler in der Symbolabfolge aufgetreten ist, kann dieser nicht durch weitere korrekte Abfolgen &amp;quot;ungeschehen&amp;quot; gemacht werden.  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=====Übergangsregeln in Form von Wenn-dann-sonst-Aussagen=====&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=====Übergangsregeln in Form von Wenn-dann-sonst-Aussagen=====&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-l342&quot;&gt;Zeile 342:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 342:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Mithilfe der Übergangsregeln in Form von Wenn-dann-sonst-Aussagen kann der KHA-Parser recht einfach in einer höheren Programmiersprache mit geschachtelten if-else-Anweisungen implementiert werden. Hier z.B. ein bewusst einfach gehaltenes Konsolen-Programm in Java:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Mithilfe der Übergangsregeln in Form von Wenn-dann-sonst-Aussagen kann der KHA-Parser recht einfach in einer höheren Programmiersprache mit geschachtelten if-else-Anweisungen implementiert werden. Hier z.B. ein bewusst einfach gehaltenes Konsolen-Programm in Java:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;source &lt;/del&gt;lang=&amp;quot;java&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;syntaxhighlight &lt;/ins&gt;lang=&amp;quot;java&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;/** KHA_Parser als Endlicher Automat&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;/** KHA_Parser als Endlicher Automat&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   * @author Ulrich Kalina&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   * @author Ulrich Kalina&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-l404&quot;&gt;Zeile 404:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 404:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;} // class KHA_Parser&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;} // class KHA_Parser&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;source&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;syntaxhighlight&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====Zwei Anmerkungen zum Schluss====&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====Zwei Anmerkungen zum Schluss====&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-l419&quot;&gt;Zeile 419:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 419:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;übersichtlink=Lernpfad_Know-How-Computer}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;übersichtlink=Lernpfad_Know-How-Computer}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;[[Kategorie:&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Lernpfad&lt;/del&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;[[Kategorie:&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Know-How-Computer&lt;/ins&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Informatik]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Informatik]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Kategorie:Programmieren]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Kategorie:Know-How-Computer]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Sekundarstufe 2]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Sekundarstufe 2]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Ukalina</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Lernpfad_Know-How-Computer/KHA-Parser_als_Endlicher_Automat&amp;diff=143011&amp;oldid=prev</id>
		<title>Ukalina am 30. Juli 2025 um 14:07 Uhr</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Lernpfad_Know-How-Computer/KHA-Parser_als_Endlicher_Automat&amp;diff=143011&amp;oldid=prev"/>
		<updated>2025-07-30T14:07:03Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 30. Juli 2025, 14:07 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-l422&quot;&gt;Zeile 422:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 422:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Informatik]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Informatik]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Programmieren]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Programmieren]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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 style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Kategorie:Know-How-Computer]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Sekundarstufe 2]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Sekundarstufe 2]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key zumunterrichten:diff::1.12:old-142999:rev-143011 --&gt;
&lt;/table&gt;</summary>
		<author><name>Ukalina</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Lernpfad_Know-How-Computer/KHA-Parser_als_Endlicher_Automat&amp;diff=142999&amp;oldid=prev</id>
		<title>Ukalina am 30. Juli 2025 um 13:43 Uhr</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Lernpfad_Know-How-Computer/KHA-Parser_als_Endlicher_Automat&amp;diff=142999&amp;oldid=prev"/>
		<updated>2025-07-30T13:43:30Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 30. Juli 2025, 13:43 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-l10&quot;&gt;Zeile 10:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 10:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Box&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Box&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|1=Ein Parser als Endlicher Automat am Beispiel Know-How-Assembler  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|1=Ein Parser als Endlicher Automat am Beispiel Know-How-Assembler  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;|2=Im Kapitel [[Lernpfad_Know-How-Computer/Know-How-Assembler_-&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Grammatik_einer_formalen_Sprache&lt;/del&gt;|Know-How-Assembler - Grammatik einer formalen Sprache]] wurde darauf hingewiesen, dass die Überprüfung eines Assemblercodes auf seine formale Korrektheit auch von einem Computerprogramm übernommen werden kann. Bei höheren Programmiersprachen wie z.B. C++, Delphi, Java oder Python heißen solche Übersetzungsprogramme Compiler. Von ihrem Grundaufbau her sind Assembler und Compiler vergleichbar. Im Compilerbau teilt man den Übersetzungsprozess üblicherweise in drei Phasen ein:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;|2=Im Kapitel [[Lernpfad_Know-How-Computer/Know-How-Assembler_-&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;_Grammatik_einer_formalen_Sprache&lt;/ins&gt;|Know-How-Assembler - Grammatik einer formalen Sprache]] wurde darauf hingewiesen, dass die Überprüfung eines Assemblercodes auf seine formale Korrektheit auch von einem Computerprogramm übernommen werden kann. Bei höheren Programmiersprachen wie z.B. C++, Delphi, Java oder Python heißen solche Übersetzungsprogramme Compiler. Von ihrem Grundaufbau her sind Assembler und Compiler vergleichbar. Im Compilerbau teilt man den Übersetzungsprozess üblicherweise in drei Phasen ein:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Lexikalische Analyse (Lexer oder auch Scanner)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Lexikalische Analyse (Lexer oder auch Scanner)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Syntaktische Analyse (Parser)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Syntaktische Analyse (Parser)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Ukalina</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Lernpfad_Know-How-Computer/KHA-Parser_als_Endlicher_Automat&amp;diff=142835&amp;oldid=prev</id>
		<title>Ukalina: Die Seite wurde neu angelegt: „__NOTOC__ {{Fortsetzung| vorher=zurück| vorherlink=Lernpfad_Know-How-Computer/Know-How-Assembler_-_Grammatik_einer_formalen_Sprache| weiter=weiter| weiterlink=Lernpfad_Know-How-Computer/Anhang| übersicht=Startseite| übersichtlink=Lernpfad_Know-How-Computer}}  {{Box |1=Ein Parser als Endlicher Automat am Beispiel Know-How-Assembler  |2=Im Kapitel Lernpfad_Know-How-Computer/Know-How-Assembler_-Grammatik_einer_formalen_Sprache|Know-How-Assembler - Gramm…“</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Lernpfad_Know-How-Computer/KHA-Parser_als_Endlicher_Automat&amp;diff=142835&amp;oldid=prev"/>
		<updated>2025-07-21T08:31:56Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „__NOTOC__ {{Fortsetzung| vorher=zurück| vorherlink=Lernpfad_Know-How-Computer/Know-How-Assembler_-_Grammatik_einer_formalen_Sprache| weiter=weiter| weiterlink=Lernpfad_Know-How-Computer/Anhang| übersicht=Startseite| übersichtlink=Lernpfad_Know-How-Computer}}  {{Box |1=Ein Parser als Endlicher Automat am Beispiel Know-How-Assembler  |2=Im Kapitel Lernpfad_Know-How-Computer/Know-How-Assembler_-Grammatik_einer_formalen_Sprache|Know-How-Assembler - Gramm…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=zurück|&lt;br /&gt;
vorherlink=Lernpfad_Know-How-Computer/Know-How-Assembler_-_Grammatik_einer_formalen_Sprache|&lt;br /&gt;
weiter=weiter|&lt;br /&gt;
weiterlink=Lernpfad_Know-How-Computer/Anhang|&lt;br /&gt;
übersicht=Startseite|&lt;br /&gt;
übersichtlink=Lernpfad_Know-How-Computer}}&lt;br /&gt;
&lt;br /&gt;
{{Box&lt;br /&gt;
|1=Ein Parser als Endlicher Automat am Beispiel Know-How-Assembler &lt;br /&gt;
|2=Im Kapitel [[Lernpfad_Know-How-Computer/Know-How-Assembler_-Grammatik_einer_formalen_Sprache|Know-How-Assembler - Grammatik einer formalen Sprache]] wurde darauf hingewiesen, dass die Überprüfung eines Assemblercodes auf seine formale Korrektheit auch von einem Computerprogramm übernommen werden kann. Bei höheren Programmiersprachen wie z.B. C++, Delphi, Java oder Python heißen solche Übersetzungsprogramme Compiler. Von ihrem Grundaufbau her sind Assembler und Compiler vergleichbar. Im Compilerbau teilt man den Übersetzungsprozess üblicherweise in drei Phasen ein:&lt;br /&gt;
# Lexikalische Analyse (Lexer oder auch Scanner)&lt;br /&gt;
# Syntaktische Analyse (Parser)&lt;br /&gt;
# Zielcode-Generierung (Codegenerator)&lt;br /&gt;
Die einzelnen Phasen sind allerdings bei einem Compiler deutlich komplexer und ihre Implementierung ist erheblich aufwändiger als bei einem Assembler.&lt;br /&gt;
&lt;br /&gt;
In diesem Kapitel geht es darum, wie man den Parser eines Know-How-Assemblers in einer Programmiersprache wie z.B. Java implementieren kann. Dabei wird zugleich auch das Konzept eines &amp;quot;Endlichen Automaten&amp;quot; vorgestellt, das in der theoretischen Informatik eine wichtige Rolle spielt.&lt;br /&gt;
|3=Lernpfad}}&lt;br /&gt;
&lt;br /&gt;
====Lexikalische Analyse====&lt;br /&gt;
Die Aufgabe eines Lexers wird am Beispiel des KHA-Programms &amp;quot;Von x auf 0&amp;quot; aus dem Kapitel [[Lernpfad_Know-How-Computer/KHC-Maschinensprache_-_erste_Schritte_Teil_2|Programmieren in der KHC-Maschinensprache - erste Schritte Teil 2]] verdeutlicht. Hier zunächst noch einmal der Programmcode in Assemblersprache, wobei die Anweisungen jetzt nicht mehr durch Zeilenumbrüche, sondern durch Semikolons voneinander getrennt werden:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;start: isz x; jmp xminus1; stp; xminus1: dec x; jmp start; x: 3;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der KHA-Lexer durchläuft nun den Programmtext Zeichen für Zeichen und versucht, daraus eine so genannte Token-Kette zu erstellen. Dabei fasst er zusammengehörende Zeichen zu lexikalischen Einheiten zusammen - z.B. eine Buchstabenfolge zu einem Bezeichner oder eine Ziffernfolge zu einer Zahl - und bildet daraus die so genannten Tokens.&lt;br /&gt;
&lt;br /&gt;
Auch Befehlsworte wie &amp;lt;code&amp;gt;inc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dec&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;stp&amp;lt;/code&amp;gt; werden als &amp;quot;reservierte Bezeichner&amp;quot; zu eigenen lexikalischen Einheiten zusammengefasst, wobei der KHA-Lexer hier noch einmal unterscheidet zwischen den vier Adressbefehlen &amp;lt;code&amp;gt;inc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dec&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;jmp&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;isz&amp;lt;/code&amp;gt;, die erst durch einen nachfolgenden Bezeichner als Befehl komplett werden, und dem Stoppbefehl &amp;lt;code&amp;gt;stp&amp;lt;/code&amp;gt;, bei dem dies nicht so ist. &lt;br /&gt;
 &lt;br /&gt;
Auch die Symbole &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt; bilden jeweils eigene lexikalische Einheiten.&lt;br /&gt;
Ein Token ist ein Elementepaar, das aus einem Tokenwert und seinem Tokentyp besteht, Schreibweise: (Tokentyp | Tokenwert). Die Tokenwerte sind die als lexikalische Einheiten identifzierten Teilstücke des Quellcodes. Die Tokentypen des KHA-Lexers sind in der folgenden Tabelle aufgeführt:&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot;border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ &amp;#039;&amp;#039;&amp;#039;Tokentypen des KHA-Lexers&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!Tokentyp     &lt;br /&gt;
!Abk. &lt;br /&gt;
!Beispiele für Tokenwerte&lt;br /&gt;
|-&lt;br /&gt;
|Bezeichner&lt;br /&gt;
|B&lt;br /&gt;
|start , x , xminus1&lt;br /&gt;
|-&lt;br /&gt;
|Adressbefehl&lt;br /&gt;
|A&lt;br /&gt;
|inc , dec , jmp, isz&lt;br /&gt;
|-&lt;br /&gt;
|Stoppbefehl&lt;br /&gt;
|S&lt;br /&gt;
|stp&lt;br /&gt;
|-&lt;br /&gt;
|Zahl&lt;br /&gt;
|Z&lt;br /&gt;
|0 , 5 , 27 &lt;br /&gt;
|-&lt;br /&gt;
|Doppelpunkt&lt;br /&gt;
|:&lt;br /&gt;
|:      &lt;br /&gt;
|-&lt;br /&gt;
|Semikolon&lt;br /&gt;
|;&lt;br /&gt;
|;      &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Das KHA-Programm &amp;quot;Von x auf 0&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;isz&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;jmp&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;xminus1&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;stp&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;xminus1&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;dec&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;jmp&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wird vom Lexer in die folgende &amp;#039;&amp;#039;&amp;#039;Tokenkette&amp;#039;&amp;#039;&amp;#039; zerlegt, wobei für die Tokentypen die Abkürzungen aus obiger Tabelle verwendet werden: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;(B|start)&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;(:|:)&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;(A|isz)&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;(B|x)&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;(;|;)&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;(A|jmp)&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;(B|xminus1)&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;(;|;)&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;(S|stp)&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;(;|;)&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;(B|xminus1)&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;(:|:)&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;(A|dec)&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;(B|x)&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;(;|;)&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;(A|jmp)&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;(B|start)&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;(;|;)&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;(B|x)&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;(:|:)&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;(Z|3)&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;(;|;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn die lexikalische Analyse des Lexers nicht erfolgreich ist, weil er im Quellcode z.B. auf ein unerlaubtes Zeichen wie &amp;#039;+&amp;#039; oder &amp;#039;#&amp;#039; stößt, dann liefert er eine Fehlermeldung. Andernfalls übergibt er die gewonnene Token-Kette zur weiteren Verarbeitung (syntaktische Analyse) an den Parser. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der Lexer kann zwar unerlaubte Zeichen erkennen, überflüssige Leerzeichen, Zeilenumbrüche und Kommentare entfernen und lexikalische Einheiten identifizieren, um daraus eine Token-Kette zu bilden, er überprüft jedoch im Gegensatz zum Parser noch nicht, ob die Tokens innerhalb dieser Kette in einer syntaktisch korrekten Abfolge im Sinne der KHA-Grammatik stehen. Der Lexer würde also z.B. auch die (syntaktisch falsche) Befehlsfolge&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;anfang&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;inc&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;dec&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;stp&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
akzeptieren und in folgende Token-Kette überführen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;(:|:)&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;(B|anfang)&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;(A|inc)&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;(A|dec)&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;(;|;)&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;(S|stp)&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;(Z|4)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Syntaktische Analyse (Parser)====&lt;br /&gt;
Der Parser überprüft die vom Lexer erstellte Token-Kette auf syntaktische Korrektheit. Bei höheren Programmiersprachen, die auch verschachtelte Strukturen  (z.B. for-Schleife in while-Schleife) und Klammerausdrücke erlauben, ist dies deutlich aufwändiger als bei einer Assemblersprache, in der es solche Strukturen nicht gibt. Im Folgenden wird gezeigt, wie ein Parser für den Know-How-Assembler mit Hilfe des relativ einfachen Konzepts eines &amp;quot;Endlichen Automaten&amp;quot; realisiert werden kann.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ausgangspunkt für die Arbeit dieses Endlichen Automaten ist die Token-Kette, die der Lexer zuvor erzeugt hat. Da der Parser lediglich die korrekte Reihenfolge der Token prüft, benötigt er dafür auch nur die Tokentypen aus der Kette. Die Tokenwerte werden erst später in der dritten Phase bei der Code-Generierung wieder benötigt.&amp;lt;br /&amp;gt;&lt;br /&gt;
Wenn man aus der Token-Kette zum KHA-Programm &amp;quot;Von x auf 0” nur die (abgekürzten) Tokentypen zu einer Zeichenkette zusammenfasst, dann erhält man folgende &amp;#039;&amp;#039;&amp;#039;Tokentyp-Kette&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;Z&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Endlicher Automat====&lt;br /&gt;
Wie kann nun die Prüfung auf korrekte Abfolge der Tokentyp-Symbole mit Hilfe eines Endlichen Automaten (EA) in einem Computerprogramm (z.B. in Java) implementiert werden? Das soll im Folgenden Schritt für Schritt erläutert werden.&lt;br /&gt;
&lt;br /&gt;
Einen Endlichen Automaten können wir uns als eine Maschine vorstellen, die eine Zeichenkette - in unserem Fall die Tokentyp-Kette - schrittweise Symbol für Symbol verarbeitet. Der Automat befindet sich dabei jederzeit in genau einem von mehreren fest definierten &amp;#039;&amp;#039;&amp;#039;Zuständen&amp;#039;&amp;#039;&amp;#039;. Am Anfang, noch bevor ein Symbol verarbeitet wurde, befindet er sich im so genannten &amp;#039;&amp;#039;&amp;#039;Startzustand&amp;#039;&amp;#039;&amp;#039;, den wir hier einmal &amp;quot;neutral&amp;quot; bzw. abgekürzt n nennen.&lt;br /&gt;
&lt;br /&gt;
Welche Symbole sind in diesem Startzustand syntaktisch zulässig - oder mit anderen Worten: Mit welchen Symbolen kann ein KHA-Programm beginnen - und mit welchen nicht?&lt;br /&gt;
Nach den Syntax-Regeln aus dem Kapitel [[Lernpfad_Know-How-Computer/Know-How-Assembler_-Grammatik_einer_formalen_Sprache|Know-How-Assembler - Grammatik einer formalen Sprache]] geht hervor, dass ein KHA-Programm entweder mit einem Adressbefehl (Tokentyp &amp;#039;A&amp;#039;), einem Bezeichner für ein Label (Tokentyp &amp;#039;B&amp;#039;) oder mit einem Stoppbefehl (Tokentyp &amp;#039;S&amp;#039;) beginnen kann. Jedes dieser Symbole überführt den EA vom Zustand n in einen neuen Folgezustand - nennen wir diese einmal a, b und s. Alle anderen Symbole wie Doppelpunkt, Semikolon oder Zahl sind am Anfang nicht erlaubt. Falls sie trotzdem gleich zu Beginn als erstes Symbol auftauchen, wird dadurch den EA in den Fehler-Zustand f überführt, aus dem er auch im Folgenden nicht mehr herauskommt - egal welche Eingabe-Symbole noch folgen. Denn wenn erst einmal ein Fehler in der Symbolabfolge aufgetreten ist, kann dieser nicht durch weitere korrekte Abfolgen &amp;quot;ungeschehen&amp;quot; gemacht werden. &lt;br /&gt;
&lt;br /&gt;
=====Übergangsregeln in Form von Wenn-dann-sonst-Aussagen=====&lt;br /&gt;
Die so genannten Übergangsregeln, die für einen Zustand festlegen, welchen Folgezustand der EA einnimmt - je nachdem, welches Eingabe-Symbol als nächstes folgt - können kurz in Form von Wenn-Dann-Sonst-Aussagen ausgedrückt werden:&lt;br /&gt;
======Übergangsregel für den Zustand n======&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wenn zustand ist n &lt;br /&gt;
dann wenn Symbol ist &amp;#039;A&amp;#039; &lt;br /&gt;
     dann setze zustand = a &lt;br /&gt;
     sonst wenn Symbol ist &amp;#039;B&amp;#039; &lt;br /&gt;
           dann setze zustand = b&lt;br /&gt;
           sonst wenn Symbol ist &amp;#039;S&amp;#039; &lt;br /&gt;
                 dann setze zustand = s&lt;br /&gt;
                 sonst setze zustand = f&lt;br /&gt;
wenn_ende&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
======Übergangsregel für den Zustand f======&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wenn zustand ist f &lt;br /&gt;
dann wenn Symbol ist beliebig&lt;br /&gt;
     dann setze zustand = f&lt;br /&gt;
wenn_ende &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Übergangstabelle=====&lt;br /&gt;
Eine kompakte und übersichtliche Art, die Übergangsregeln darzustellen, ist die so genannte &amp;#039;&amp;#039;&amp;#039;Übergangstabelle&amp;#039;&amp;#039;&amp;#039;. Im folgenden Beispiel werden die ersten beiden Regeln für die Zustände n und f so dargestellt:&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot;border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ &amp;#039;&amp;#039;&amp;#039;Übergangstabelle für die Zustände n und f&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;Symbol&amp;lt;br&amp;gt;Zustand     &lt;br /&gt;
!A&lt;br /&gt;
!B&lt;br /&gt;
!S&lt;br /&gt;
!Z&lt;br /&gt;
!:&lt;br /&gt;
!;&lt;br /&gt;
|- &lt;br /&gt;
|align=&amp;quot;center&amp;quot; |&amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
|a&lt;br /&gt;
|b&lt;br /&gt;
|s&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|- &lt;br /&gt;
|align=&amp;quot;center&amp;quot; |&amp;#039;&amp;#039;&amp;#039;f&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für jede Kombination aus einem Zustand in der ersten Spalte und einem Eingabe-Symbol in der obersten Zeile steht der jeweilige Folgezustand in derjenigen Tabellenzelle, in der sich die entsprechende Zustandszeile und die Symbolspalte kreuzen.&lt;br /&gt;
&lt;br /&gt;
Natürlich muss es jetzt auch für die neuen Zustände a, b und s entsprechende Übergangsregeln bzw. Zeilen in der Übergangstabelle geben, durch die für jedes Eingabe-Symbol ein Folgezustand festgelegt wird. Wie sehen diese Regeln aus?&lt;br /&gt;
&lt;br /&gt;
Besonders einfach ist das für den Zustand s zu beantworten. Nach einem Stopp-Befehl muss zwingend ein Semikolon folgen. Alle anderen Symbole führen zum Fehlerzustand f. In welchen Folgezustand gelangt der EA aber von s aus, wenn ein Semikolon folgt? Offenbar ist dann ja eine KHA-Anweisung als vollständig und abgeschlossen erkannt worden und der Überprüfungsprozess befindet sich daher wieder in seiner ursprünglichen Ausgangssituation. Mit anderen Worten: Der EA gelangt also wieder zurück in den Startzustand n.  &lt;br /&gt;
======Übergangsregel für den Zustand s======&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wenn zustand ist s &lt;br /&gt;
dann wenn Symbol ist &amp;#039;;&amp;#039; &lt;br /&gt;
     dann setze zustand = n&lt;br /&gt;
     sonst setze zustand = f&lt;br /&gt;
wenn_ende&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wir können damit die obige Übergangstabelle folgendermaßen um eine s-Zeile ergänzen:&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot;border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ &amp;#039;&amp;#039;&amp;#039;Übergangstabelle für die Zustände n, f und s&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;Symbol&amp;lt;br&amp;gt;Zustand     &lt;br /&gt;
!A&lt;br /&gt;
!B&lt;br /&gt;
!S&lt;br /&gt;
!Z&lt;br /&gt;
!:&lt;br /&gt;
!;&lt;br /&gt;
|- &lt;br /&gt;
|align=&amp;quot;center&amp;quot; |&amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|a&lt;br /&gt;
|b&lt;br /&gt;
|s&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|- &lt;br /&gt;
|align=&amp;quot;center&amp;quot; |&amp;#039;&amp;#039;&amp;#039;f&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |&amp;#039;&amp;#039;&amp;#039;s&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|n&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Selbst, wenn ein Programm lediglich aus der einzigen Anweisung  &amp;lt;code&amp;gt;stp ;&amp;lt;/code&amp;gt; besteht (was inhaltlich zwar ziemlich sinnfrei, syntaktisch aber nicht unzulässig ist), dann wäre die Rückkehr in den Zustand n ein Beleg dafür, dass dieses Programm zumindest &amp;#039;&amp;#039;syntaktisch&amp;#039;&amp;#039; korrekt ist. Der Zustand n ist daher bei unserem EA nicht nur der Start- sondern zugleich auch der so genannte &amp;#039;&amp;#039;&amp;#039;Zielzustand&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
{{Box&lt;br /&gt;
|1=Aufgabe&lt;br /&gt;
|2=Formuliere eine Übergangsregel für den Zustand a in Form einer Wenn-dann-sonst-Aussage. Warum ist es hier nicht notwendig, noch einen  zusätzlichen Zustand zu definieren? Wie lautet die entsprechende a-Zeile in der Übergangstabelle?&lt;br /&gt;
|3=Üben}} &lt;br /&gt;
&lt;br /&gt;
{{ Lösung versteckt&lt;br /&gt;
|1=Wenn auf einen Adressbefehl ein Bezeichner folgt, dann muss auf diesen nur noch ein abschließendes Semikolon folgen, damit eine vollständige KHA-Anweisung entsteht. Alle anderen Eingabe-Symbole führen zu einem Fehler. Das ist dann aber genau die gleiche Situation, wie wir sie bereits vom s-Zustand kennen. Wir müssen in diesem Fall also gar keinen neuen Zustand einführen, sondern können auch hier s als Folgezustand verwenden:&lt;br /&gt;
&lt;br /&gt;
======Übergangsregel für den Zustand a======&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wenn zustand ist a &lt;br /&gt;
dann wenn Symbol ist &amp;#039;B&amp;#039; &lt;br /&gt;
     dann setze zustand = s&lt;br /&gt;
     sonst setze zustand = f&lt;br /&gt;
wenn_ende&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{(!}} cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot;border=&amp;quot;1&amp;quot;&lt;br /&gt;
{{!+}} &amp;#039;&amp;#039;&amp;#039;Zeile für Zustand a in der Überganstabelle&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;Symbol&amp;lt;br&amp;gt;Zustand     &lt;br /&gt;
!A&lt;br /&gt;
!B&lt;br /&gt;
!S&lt;br /&gt;
!Z&lt;br /&gt;
!:&lt;br /&gt;
!;&lt;br /&gt;
{{!-}} &lt;br /&gt;
{{!}}align=&amp;quot;center&amp;quot; {{!}}&amp;#039;&amp;#039;&amp;#039;a&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
{{!}}f&lt;br /&gt;
{{!}}s&lt;br /&gt;
{{!}}f&lt;br /&gt;
{{!}}f&lt;br /&gt;
{{!}}f&lt;br /&gt;
{{!}}f&lt;br /&gt;
{{!)}}&lt;br /&gt;
&lt;br /&gt;
|2=Lösung anzeigen&lt;br /&gt;
|3=Lösung verbergen}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bleibt noch zu klären, was passiert, wenn wir im zustand b gelandet sind. In diesem Fall muss als nächstes Symbol zwingend ein Doppelpunkt folgen. Hierfür führen wir den weiteren Zustand d (Doppelpunkt) ein und legen fest:&lt;br /&gt;
&lt;br /&gt;
======Übergangsregel für den Zustand b======&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wenn zustand ist b &lt;br /&gt;
dann wenn Symbol ist &amp;#039;:&amp;#039; &lt;br /&gt;
     dann setze zustand = d&lt;br /&gt;
     sonst setze zustand = f&lt;br /&gt;
wenn_ende&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Welche Übergangsregeln müssen für den Zustand d gelten? Nach einem Doppelpunkt darf laut Syntaxregeln entweder das Symbol &amp;#039;A&amp;#039; für einen Adressbefehl oder &amp;#039;Z&amp;#039; für eine Zahl oder &amp;#039;S&amp;#039; für einen Stopp-Befehl folgen. Im letzten Fall &amp;#039;S&amp;#039; kann wieder der Zustand s als Folgezustand verwendet werden, denn daran anschließend wird nur noch ein abschließendes Semikolon akzeptiert. Das Gleiche gilt für das Symbol &amp;#039;Z&amp;#039;. Bleibt schließlich noch der Fall, dass auf den Doppelpunkt ein Adressbefehl &amp;#039;A&amp;#039; folgt. Für diesen Fall kann der schon vorhandene Zustand a als Folgezustand festgelegt werden. Insgesamt erhält man folgende&lt;br /&gt;
======Übergangsregel für den Zustand d======&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wenn zustand ist d &lt;br /&gt;
dann wenn Symbol ist &amp;#039;A&amp;#039;&lt;br /&gt;
     dann setze Zustand = a&lt;br /&gt;
     sonst wenn Symbol ist &amp;#039;S&amp;#039;&lt;br /&gt;
           dann setze Zustand = s&lt;br /&gt;
           sonst wenn Symbol = &amp;#039;Z&amp;#039;&lt;br /&gt;
                 dann setze Zustand = s&lt;br /&gt;
                 sonst setze zustand = f&lt;br /&gt;
wenn_ende&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die vollständige Übergangstabelle für unseren EA sieht demnach so aus:&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot;border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ &amp;#039;&amp;#039;&amp;#039;Übergangstabelle für EA &amp;quot;KHA-Parser&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;Symbol&amp;lt;br&amp;gt;Zustand     &lt;br /&gt;
!A&lt;br /&gt;
!B&lt;br /&gt;
!S&lt;br /&gt;
!Z&lt;br /&gt;
!:&lt;br /&gt;
!;&lt;br /&gt;
|- &lt;br /&gt;
|align=&amp;quot;center&amp;quot; |&amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|a&lt;br /&gt;
|b&lt;br /&gt;
|s&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|- &lt;br /&gt;
|align=&amp;quot;center&amp;quot; |&amp;#039;&amp;#039;&amp;#039;a&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|f&lt;br /&gt;
|s&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |&amp;#039;&amp;#039;&amp;#039;b&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|d&lt;br /&gt;
|f&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |&amp;#039;&amp;#039;&amp;#039;d&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|a&lt;br /&gt;
|f&lt;br /&gt;
|s&lt;br /&gt;
|s&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |&amp;#039;&amp;#039;&amp;#039;s&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|n&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |&amp;#039;&amp;#039;&amp;#039;f&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|f&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Aus der Tabelle sieht man u.a., dass der EA auf unterschiedlichen Wegen in den Zustand s gelangen kann. Aber egal, auf welchem Weg er dorthin kommt: Sobald sich der EA im s-Zustand befindet, fehlt nur noch ein abschließendes Semikolon, damit eine vollständige KHA-Anweisung entsteht und der EA wieder in den Zustand n zurückkehrt. Dies sieht man auch recht gut an der folgenden Darstellung des EA als Übergangsgraph.&lt;br /&gt;
&lt;br /&gt;
=====Übergangsgraph=====&lt;br /&gt;
[[Datei:KHA-Parser als EA Graph Arial24.png|alternativtext=Graph zum  KHA-Parser, dargestellt als Endlicher Automat mit Zustandsübergängen|left|400px|KHA-Parser als EA - Übergangsgraph]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Zustände werden im Graphen durch Kreise dargestellt, die den jeweiligen Zustandsbezeichner umschließen. &lt;br /&gt;
* Der Doppelkreis (hier um Zustand n) zeigt an, dass es sich um einen Zielzustand handelt. &lt;br /&gt;
* Der von Außen kommende Pfeil (in diesem Fall ebenfalls zum Zustand n) kennzeichnet den Startzustand. &lt;br /&gt;
* Die Zustandsübergänge werden durch Pfeile dargestellt. &lt;br /&gt;
* Die Beschriftung eines Pfeils gibt an, welches Eingabesymbol den entsprechenden Übergang bewirkt.&lt;br /&gt;
&lt;br /&gt;
In diesem Übergangsgraph für den KHA-Parser als EA wurde aus Gründen der Übersichtlichkeit der Fehler-Zustand f weggelassen.&lt;br /&gt;
{{Box|1=&amp;lt;i class=&amp;quot;fa fa-universal-access fa-2x&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; &amp;amp;nbsp; Hinweis&lt;br /&gt;
|2=Diese Grafik gibt es im [[Lernpfad_Know-How-Computer/Anhang|Anhang]] auch als taktile Schwellpapier-Kopiervorlage mit Braillebeschriftung. &lt;br /&gt;
|3=}}&lt;br /&gt;
{{clear}}&lt;br /&gt;
====Eine einfache Implementierung des KHA-Parsers in Java====&lt;br /&gt;
Mithilfe der Übergangsregeln in Form von Wenn-dann-sonst-Aussagen kann der KHA-Parser recht einfach in einer höheren Programmiersprache mit geschachtelten if-else-Anweisungen implementiert werden. Hier z.B. ein bewusst einfach gehaltenes Konsolen-Programm in Java:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/** KHA_Parser als Endlicher Automat&lt;br /&gt;
  * @author Ulrich Kalina&lt;br /&gt;
  * @version 27.06.2025&lt;br /&gt;
  * Beispiel KHA-Programm &amp;quot;Von x auf 0&amp;quot; &lt;br /&gt;
  * start: isz x; jmp xminus1; stp; xminus1: dec x; jmp start; x :3;&lt;br /&gt;
  * mit Tokentyp-Kette: B:AB; AB; S; B:AB; AB; B:Z;&lt;br /&gt;
  */&lt;br /&gt;
&lt;br /&gt;
public class KHA_Parser {&lt;br /&gt;
  &lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    String typkette =&amp;quot;B:AB;AB;S;B:AB;AB;B:Z;&amp;quot; ; // &amp;quot;Von x auf 0&amp;quot; wird akzeptiert &lt;br /&gt;
//    String typkette =&amp;quot;B:AB;ABS;B:AB;AB;&amp;quot; ; // wird nicht akzeptiert &lt;br /&gt;
//    String typkette =&amp;quot;S;S;&amp;quot; ; // wird akzeptiert &lt;br /&gt;
//    String typkette =&amp;quot;SS;&amp;quot; ; // wird nicht akzeptiert &lt;br /&gt;
//    String typkette =&amp;quot;A;&amp;quot; ; // wird nicht akzeptiert &lt;br /&gt;
//    String typkette =&amp;quot;AB;&amp;quot; ; // wird akzeptiert &lt;br /&gt;
                                             &lt;br /&gt;
  System.out.println(&amp;quot;Tokentyp-Kette = &amp;quot; +typkette+ &amp;quot;\nStartzustand = n&amp;quot;);&lt;br /&gt;
      &lt;br /&gt;
  char zustand = &amp;#039;n&amp;#039;; // Startzustand&lt;br /&gt;
  for (int i=0; i&amp;lt;typkette.length(); i++) {&lt;br /&gt;
    char eingabezeichen =typkette.charAt(i); // Zeichen an Position i&lt;br /&gt;
    System.out.print(&amp;quot;Kombination (&amp;quot; + zustand + &amp;quot;|&amp;quot; + eingabezeichen + &amp;quot;)&amp;quot;);&lt;br /&gt;
      &lt;br /&gt;
    if (zustand == &amp;#039;n&amp;#039;) {&lt;br /&gt;
      if (eingabezeichen == &amp;#039;A&amp;#039;) zustand=&amp;#039;a&amp;#039;;&lt;br /&gt;
      else if (eingabezeichen == &amp;#039;B&amp;#039;) zustand=&amp;#039;b&amp;#039;;&lt;br /&gt;
      else if (eingabezeichen == &amp;#039;S&amp;#039;) zustand=&amp;#039;s&amp;#039;;&lt;br /&gt;
      else zustand = &amp;#039;f&amp;#039;;      &lt;br /&gt;
    } // if (zustand == &amp;#039;n&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
    else if (zustand == &amp;#039;a&amp;#039;) {&lt;br /&gt;
      if (eingabezeichen == &amp;#039;B&amp;#039;) zustand=&amp;#039;s&amp;#039;;&lt;br /&gt;
      else zustand = &amp;#039;f&amp;#039;;      &lt;br /&gt;
    } // if (zustand == &amp;#039;a&amp;#039;)&lt;br /&gt;
    &lt;br /&gt;
    else if (zustand == &amp;#039;b&amp;#039;) {&lt;br /&gt;
      if (eingabezeichen == &amp;#039;:&amp;#039;) zustand=&amp;#039;d&amp;#039;;&lt;br /&gt;
      else zustand = &amp;#039;f&amp;#039;;      &lt;br /&gt;
    } // if (zustand == &amp;#039;b&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
    else if (zustand == &amp;#039;s&amp;#039;) {&lt;br /&gt;
      if (eingabezeichen == &amp;#039;;&amp;#039;) zustand=&amp;#039;n&amp;#039;;&lt;br /&gt;
      else zustand = &amp;#039;f&amp;#039;;      &lt;br /&gt;
    } // if (zustand == &amp;#039;s&amp;#039;)&lt;br /&gt;
    &lt;br /&gt;
    else if (zustand == &amp;#039;d&amp;#039;) {&lt;br /&gt;
      if (eingabezeichen == &amp;#039;A&amp;#039;) zustand=&amp;#039;a&amp;#039;;&lt;br /&gt;
      else if (eingabezeichen == &amp;#039;S&amp;#039;) zustand=&amp;#039;s&amp;#039;;&lt;br /&gt;
      else if (eingabezeichen == &amp;#039;Z&amp;#039;) zustand=&amp;#039;s&amp;#039;;&lt;br /&gt;
      else zustand = &amp;#039;f&amp;#039;;      &lt;br /&gt;
    } // if (zustand == &amp;#039;d&amp;#039;)&lt;br /&gt;
    System.out.println(&amp;quot; ergibt neuen zustand &amp;quot;+ zustand);   &lt;br /&gt;
  } // for&lt;br /&gt;
    &lt;br /&gt;
  if(zustand==&amp;#039;n&amp;#039;) System.out.println(&amp;quot;akzeptiert!&amp;quot;); // Zielzustand&lt;br /&gt;
  else System.out.println(&amp;quot;nicht akzeptiert!&amp;quot;);&lt;br /&gt;
  } // main()&lt;br /&gt;
  &lt;br /&gt;
} // class KHA_Parser&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zwei Anmerkungen zum Schluss====&lt;br /&gt;
* Der in diesem Kapitel vorgestellte Endliche Automat stimmt in einem Punkt nicht ganz mit der KHA-Syntax überein: Er akzeptiert nämlich auch eine leere Symbolkette als gültiges KHA-Programm. Das liegt daran, dass sein Startzustand n zugleich auch sein Zielzustand ist. Die KHA-Syntaxregeln schreiben aber vor, dass ein KHA-Programm mindestens eine (nicht leere) Anweisung enthalten muss. Dieser &amp;quot;Schönheitsfehler&amp;quot; lässt sich beheben, indem man getrennt vom Zustand n noch einen zusätzlichen Zielzustand z einführt. Darauf wurde an dieser Stelle zugunsten der Übersichtlichkeit bewusst verzichtet, zumal man den Ausnahmefall &amp;quot;leere Eingabe-Kette&amp;quot; programmtechnisch sehr einfach auch anders abfangen kann. &lt;br /&gt;
* Auch die Compiler höhere Programmiersprachen verwenden für die syntaktische Analyse einen Parser. Dieser lässt sich aber im Gegensatz zum Know-How-Assembler nicht mehr durch das Konzept eines Endlichen Automaten realisieren. Das liegt daran, dass ein Endlicher Automat immer nur den gerade aktuellen Zustand &amp;quot;kennt&amp;quot; und speichert. Bei Programmiersprachen, die verschachtelte Strukturen erlauben, muss sich der Parser aber zusätzlich die Schachtelungstiefe merken, auf der sich ein Ausdruck befindet: Zu jeder Klammer, die geöffnet wird, muss irgendwann auch wieder eine schließende Klammer folgen. Um einen Parser zu implementieren, der dies überwachen kann, benötigt man leistungsfähigere Konzepte wie z.B. einen Stack als höhere Datenstruktur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=zurück|&lt;br /&gt;
vorherlink=Lernpfad_Know-How-Computer/Know-How-Assembler_-_Grammatik_einer_formalen_Sprache|&lt;br /&gt;
weiter=weiter|&lt;br /&gt;
weiterlink=Lernpfad_Know-How-Computer/Anhang|&lt;br /&gt;
übersicht=Startseite|&lt;br /&gt;
übersichtlink=Lernpfad_Know-How-Computer}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Lernpfad]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
[[Kategorie:Programmieren]]&lt;br /&gt;
[[Kategorie:Sekundarstufe 2]]&lt;/div&gt;</summary>
		<author><name>Ukalina</name></author>
	</entry>
</feed>