Startseite < Informatik < Algorithmen Datenstrukturen / Software-Engineering / Programmiersprachen < Compiler Interpreter < Setty < [ DRUCK , 2004 , 2005 , 2006 , 2007 , 2008 , 2009 ] Setty-Präprozessor Setty-Scanner Setty-Parser > Tinyray > / Java C/C++ POV-Ray LaTeX > / Künstliche Intelligenz > Schach Privates / Inhalt >
Setty-Präprozessor
Ein besonders einfacher Präprozessor zur Quellsprache Setty.
Setty-Präprozessor Der Präprozessor zur Sprache: Setty
Setty's Präprozessor
Dieser Präprozessor eliminiert diverse Mengenkurzschreibweisen (E und R) im gegebenen Setty-Programm. Ein korrektes Setty-Programm sollte nach Ausführung des Setty-Präprozessors gemäß folgender Grammatik SG interpretierbar sein:
Die Grammatik der Setty-Sprache
Setty-Grammatik SG = (N, T, P, S) mit

N = {ProgramSetUSetISetDSetFromTo},

T = {LPAREN1      := '(',     RPAREN1      := ')',
     LPAREN2      := '[',     RPAREN2      := ']',
     LPAREN3      := '{',     RPAREN3      := '}',
     PLUS         := '+',     MINUS        := '-',
     SEMICOLON    := ';',     QUESTIONMARK := '?',
     COMPLEMENT   := 'C',     UNION        := 'u'|'v',
     INTERSECTION := 'n',     DIFFERENCE   := '\',
     IS           := 'Is',    IN           := 'in',
     NOT          := 'not',
     NUMBER       := ['+'|'-']('0'-'9')+['.'('0'-'9')+],
     INFINITY     := 'inf'},

P = {Program ::= IS NUMBER [ NOT ] IN SetU QUESTIONMARK,
     SetU    ::= SetI ( UNION SetI )*,
     SetI    ::= SetD ( INTERSECTION SetD )*,
     SetD    ::= Set [ DIFFERENCE Set ],
     Set     ::= COMPLEMENT LPAREN1 SetU RPAREN1
               | LPAREN1 SetU RPAREN1
               | LPAREN3 [ NUMBER ( SEMICOLON NUMBER )* ] RPAREN3
               | From SEMICOLON To,
     From    ::= RPAREN2 ( NUMBER | MINUS INFINITY )
               | LPAREN2 NUMBER,
     To      ::= NUMBER ( LPAREN2 | RPAREN2 )
               | [ PLUS ] INFINITY LPAREN2} und

S = Program.
Implementierung Implementierung des Setty-Präprozessors
Der Setty-Präprozessor ersetzt alle Zeichenvorkommen „E” durch „{}” und „R” durch „C({})”.

Die Java-String-Klasse bietet bereits für solche Zwecke die Methode replaceAll() an.
Der Setty-Präprozessor
/**
 * Die Klasse Preprocessor ersetzt die Mengen-Aliase E (empty) und R (real)
 * durch für den Scanner verständliche Mengenangaben.
 */

public class Preprocessor {

  /**
   * Repräsentiert das im Konstruktor übergebene Setty-Programm (Source).
   */

  private String source;

  /**
   * Erzeugt und initialisiert den Präprozessor mit einem Setty-Programm.
   * @param source Das Setty-Programm.
   */

  public Preprocessor(String source) {
    this.source = source;
  }

  /**
   * Gibt das gesamte, modifizierte Setty-Programm zurück:
   *    1. Das Mengen-Alias "E" wird durch "{}" ersetzt.
   *    2. Das Mengen-Alias "R" wird durch "C({})" ersetzt.
   * @return Das modifizierte Setty-Programm.
   */

  public String program() {
    return (this.source.replaceAll("E", "{}")).replaceAll("R", "C({})");
  }
}
Anmerkung
Zugegeben, dieser Präprozessor tut nicht viel! Aber im Prinzip ist das die Hauptaufgabe des Präprozessors, er ersetzt gewisse Zeichenketten in andere. Wenn man sich mal die Entwicklung von universellen Programmiersprachen einmal genauer ansieht, rückt die Bedeutung des Präprozessors immer mehr in den Hintergrund.