Hey Leute,
Ich stehe leider momentan mit dem Rücken zur Wand.
Ich soll als Hausaufgabe einen Automaten implementieren.
Folgende Klassen habe ich bis jetzt:
Automat:
EinAus:
Starter:
Die Aufgabe lautet folgendermaßen:
In "Automat1" muss ich doch jetzt wohl etwas bei dem switch und case verändern, damit der Automat überhaupt erst einmal funktioniert.
Wie ich dann aber zusätzlich noch das aufgabenspezifische erledigen soll, bleibt mir ein Rätsel!?
Vielen Dank!
Ich stehe leider momentan mit dem Rücken zur Wand.
Ich soll als Hausaufgabe einen Automaten implementieren.
Folgende Klassen habe ich bis jetzt:
Automat:
Java:
// Klasse zur Syntaxanalyse mit einem endlichen Automaten
public class Automat1
{
String parseStrg;
boolean ok = true;
char zeichen;
// Konstruktor
public Automat1 (String s)
{
parseStrg = s;
}
char cutFirst ()
{
if (parseStrg.length() == 0)
return '$';
else
{
char first =parseStrg.charAt(0);
parseStrg=parseStrg.substring (1);
return first;
}
}
public boolean sagtJa ()
{
final int z0 = 0, z1 = 1, z2 = 2, z3 = 3, err = 4;
zeichen = cutFirst ();
int zustand = z0;
while (zeichen != '$')
{
switch(zustand)
{
case z0: if(zeichen >= '0' && zeichen <= '9')
zustand = z1;
else
zustand = err;
break;
case z1 :
break;
default:
}
}
return (ok & (zeichen =='$'));
}
}
EinAus:
Java:
// Einfache graphische Benutzeroberfläche für Programme zur Syntaxanalyse.
//
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class EinAus extends JFrame implements ActionListener
{
private JTextField EingabeFeld, AusgabeFeld;
public EinAus()
{
super("Syntaxanalyse durch Automaten");
this.getContentPane().setBackground(Color.lightGray);
this.getContentPane().setLayout(new FlowLayout());
//Dialog-Button
JButton button = new JButton("Analyse");
button.setBackground(Color.red);
button.addActionListener(this);
this.getContentPane().add(button);
//Ende-Button
button = new JButton("Ende");
button.setBackground(Color.red);
button.addActionListener(this);
this.getContentPane().add(button);
//Eingabe-Textfeld
EingabeFeld = new JTextField (20);
this.getContentPane().add (EingabeFeld);
//Ausgabe-Textfeld
AusgabeFeld = new JTextField (20);
this.getContentPane().add (AusgabeFeld);
}
public void actionPerformed(ActionEvent event)
{
String cmd = event.getActionCommand();
String antwort, quelltext;
if (cmd.equals("Analyse"))
{
String zeile = EingabeFeld.getText();
//Erzeugen und Initialisieren des Automaten
Automat1 meinAutomat = new Automat1 (zeile);
if (meinAutomat.sagtJa())
AusgabeFeld.setText ("Ja");
else
AusgabeFeld.setText ("Nein");
}
else if (cmd.equals("Ende"))
{
setVisible(false);
dispose();
System.exit(0);
}
}
}
Starter:
Java:
// Starter für Programme zur Syntaxanalyse.
//
public class Starter
{
public static void main(String[] args)
{
EinAus wnd = new EinAus();
wnd.setSize(600,400);
wnd.setVisible(true);
}
}
Die Aufgabe lautet folgendermaßen:
Code:
Terminale Symbole sind die Ziffern 0-9, . , + , - und E.
Ein String über T gehört dann zur formalen Sprache L. wenn er eine Dezimalzahl
in der üblichen Gleitkommaform mit maximal 2 Ziffern im Exponentialteil darstellt.
In "Automat1" muss ich doch jetzt wohl etwas bei dem switch und case verändern, damit der Automat überhaupt erst einmal funktioniert.
Wie ich dann aber zusätzlich noch das aufgabenspezifische erledigen soll, bleibt mir ein Rätsel!?
Vielen Dank!
Zuletzt bearbeitet von einem Moderator: