s n h m r u
i

Miniprojekt - Automatensimulator

Zielsetzung

Bei der Entwicklung eines Automatensimulators orientieren wir uns an dem Software-Werkzeug JFlap.

JFlap

Ziel ist es, einen von JFlap erzeugten XML-Quelltext zur Beschreibung eines endlichen Automaten mit Hilfe eines selbst entwickelten Automatensimulators zu verarbeiten. Dieser Simulator muss also XML-Quelltexte wie den folgenden verarbeiten können.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!--Created with JFLAP 6.4.-->
<structure>
    <type>fa</type>
    <automaton>
        <!--The list of states.-->
        <state id="0" name="q0">
            <x>60.0</x>
            <y>59.0</y>
            <initial/>
        </state>
        <state id="1" name="q1">
            <x>147.0</x>
            <y>59.0</y>
        </state>
        ...
        <state id="5" name="q5">
            <x>510.0</x>
            <y>59.0</y>
            <final/>
        </state>
        <!--The list of transitions.-->
        <transition>
            <from>4</from>
            <to>5</to>
            <read>b</read>
        </transition>
        ...
        <transition>
            <from>1</from>
            <to>2</to>
            <read>@</read>
        </transition>
    </automaton>
</structure>
email.jff

Entwicklung eines Automatensimulators

Der folgende Python-Quelltext zeigt einen Ausschnitt aus einer Implementierung eines Automatensimulators.

from xml.dom.minidom import *
<h1>Anfangszustand</h1>
<p>def anfangszustand(baum):<br />
z = None<br />
k_initial_liste = baum.getElementsByTagName("initial")<br />
if k_initial_liste != []:<br />
k_state = k_initial_liste[0].parentNode<br />
z = k_state.getAttribute("id")<br />
return z</p>
<h1>nächster Zustand</h1>
<p>def naechsterzustand(baum, zustand, eingabe):<br />
pass</p>
<h1>Endzustand</h1>
<p>def endzustand(baum, zustand):<br />
pass</p>
<h1>Einlesen des XML-Quelltextes</h1>
<p>f_xml = open("email.jff", "r")<br />
xml_quelltext = f_xml.read()</p>
<h1>Initialisierung des DOM-Baums</h1>
<p>dombaum = parseString(xml_quelltext)<br />
wurzel = dombaum.documentElement</p>
<h1>Test</h1>
<p>z = anfangszustand(wurzel)<br />
print(z)

Aufgabe 1

Analysiere zunächst den gezeigten Python-Quelltext. Was leistet die Funktion anfangszustand? Benutze die Datei "email.jff" zum Testen.

Aufgabe 2

Ergänze die Implementierung der beiden Funktionen naechsterzustand und endzustand. Teste anschließend die Funktionen wie folgt:

...
<p>z = anfangszustand(wurzel)<br />
print(z)<br />
wort = "bbb@b.bb"<br />
for w in wort:<br />
z = naechsterzustand(wurzel, z, w)<br />
print(z)<br />
if endzustand(wurzel, z):<br />
print("akzeptiert")<br />
else:<br />
print("nicht akzeptiert")

Objektorientierte Realisierung

Zur objektorientierten Realisierung eines Automatensimulators wird die Klasse Automat modelliert.

Klassendiagramm

Der folgende Python-Quelltext zeigt einen Ausschnitt aus einer Implementierung der Klasse Automat sowie einen einfachen Test dieser Klasse.

class Automat(object):
    def __init__(self, quelltext):
        self.quelltext = quelltext
        self.dombaum = parseString(self.quelltext)
        self.wurzel = self.dombaum.documentElement
        self.zustand = None
<pre><code>def anfangszustand(self):
    k_initial_liste = self.wurzel.getElementsByTagName("initial")
    if k_initial_liste != []:
        k_state = k_initial_liste[0].parentNode
        self.zustand = k_state.getAttribute("name")

def naechsterzustand(self, eingabe):
    pass

def endzustand(self):
    pass

def getZustand(self):
    return self.zustand

Test

f_xml = open("email.jff", "r")
xml_quelltext = f_xml.read()

automat = Automat(xml_quelltext)

automat.anfangszustand()
print(automat.getZustand())
automat.naechsterzustand("b")

Aufgabe 3

Ergänze die Implementierung der beiden Methoden naechsterzustand und endzustand. Teste anschließend die Methoden.

Aufgabe 4

Entwickle eine Klasse Simulator. Objekte dieser Klasse sollen ein eingegebenes Wort mit Hilfe eines Automaten abarbeiten und entscheiden, ob das Wort vom Automaten akzeptiert wird.

Suche

v
1.3.4.5 Miniprojekt - Automatensimulator
Kopieren durch Anklicken

Rückmeldung geben