Suche Home Einstellungen Anmelden Hilfe  

Zur Ordnungswirkung fundamentaler Ideen der Informatik am Beispiel der theoretischen Schulinformatik

Beispiel 3: LOGO für Arme

Eckart Modrow

Max-Planck-Gymnasium
Theaterplatz 10
37073 Göttingen
emodrow@astro.physik.uni-goettingen.de




Der Turtleparser

Intern arbeitet der Parser mit einem Zustand s und einer Überführungsfunktion u. Aktiviert wird er durch den Aufruf verarbeite, der die Berechnung des neuen Zustands veranlasst.

class Turtleparser
{

  int s; //der Zustand des Automaten

  public void Turtleparser() //der Konstruktor
  {
    s = 0;
  }

  private int u(int s, char c) //die Überführungsfunktion
  {
    switch (s) //je nach Zustand …
    {
      case 0:
      {
        if (c == '#') return 99; //… und nach Eingabezeichen reagieren
        else if ( (c == 'U') || (c == 'D') || (c == 'H') || (c == 'C')) return 1;
             else if ( (c == 'M') || (c == 'T')) return 2;
                  else if (c == 'R') return 4;
                       else return 20;
      }
      case 1:
      {
        if (c == ';') return 0;
        else return 21;
      }
      case 2:
      {
        if ( (c == '0') || (c == '1') || (c == '2') || (c == '3') || (c == '4') ||
             (c == '5') || (c == '6') || (c == '7') || (c == '8') || (c == '9')) return 3;
        else return 22;
      }
      case 3:
      {
        if ( (c == '0') || (c == '1') || (c == '2') || (c == '3') || (c == '4') ||
             (c == '5') || (c == '6') || (c == '7') || (c == '8') || (c == '9')) return 3;
        else if (c == ';') return 0;
             else return 23;
      }
      case 4:
      {
        if ( (c == '0') || (c == '1') || (c == '2') || (c == '3') || (c == '4') ||
             (c == '5') || (c == '6') || (c == '7') || (c == '8') || (c == '9')) return 5;
        else return 22;
      }
      case 5:
      {
        if ( (c == '0') || (c == '1') || (c == '2') || (c == '3') || (c == '4') ||
             (c == '5') || (c == '6') || (c == '7') || (c == '8') || (c == '9')) return 5;
        else if (c == '{') return 6;
             else return 24;
      }
      case 6:
      {
        if ( (c == 'U') || (c == 'D') || (c == 'H') || (c == 'C')) return 7;
        else if ( (c == 'M') || (c == 'T')) return 8;
             else if (c == 'R') return 26;
                  else if (c == '}') return 0;
                       else return 25;
      }
      case 7:
      {
        if (c == ';') return 6;
        else return 21;
      }
      case 8:
      {
        if ( (c == '0') || (c == '1') || (c == '2') || (c == '3') || (c == '4') ||
             (c == '5') || (c == '6') || (c == '7') || (c == '8') || (c == '9')) return 9;
       else return 22;
      }
      case 9:
      {
        if ( (c == '0') || (c == '1') || (c == '2') || (c == '3') || (c == '4') ||
             (c == '5') || (c == '6') || (c == '7') || (c == '8') || (c == '9')) return 9;
        else if (c == ';') return 6;
             else return 23;
      }
      default: return s;
    }
  }

  public void verarbeite(char c) //damit wird der Parser zum Zustandswechsel veranlasst
  {
    s = u(s, c);
  }
}
 

Benutzer: gast • Besitzer: schwill • Zuletzt geändert am: