A3_markovgen.rb

Path: A3_markovgen.rb
Last Update: Wed Feb 15 12:53:40 Westeuropäische Normalzeit 2006

Dieses Programm berechnet Markov-Algorithmen. Dazu werden zwei Input-Dateien abgefragt von denen die erste mit der Endung *.alg den Algorithmus enthält (mit einer Zeile pro Regel und ohne überflüssige Blanks) und die zweite mit der Endung *.inp den Text enthält den der Markov-Interpreter bearbeiten soll (eine Zeile, ohne Return oder Blanks). Beide Dateinamen werden ohne Endung eingegeben. Das Programm generiert dann bei erfolgreichem Ablauf folgende Dateien (+<name>+ steht für den Namen der Algorithmus-Datei):

  • <name>_comp.rb : Ein Ruby-Programm, das den Compiler für den Markov-Algorithmus darstellt.
  • <name>_tracer.rb: Ein eigentlich nur temporäres Programm, welches zur Erstellung der Trace-Datei dient.
  • <name>_trace.txt: Eine Textdatei, die die Trace, also die Ergebnisse der einzelnen Regelanwendungen, enthält.

Desweiteren wird der Algorithmus auf die Eingabedatei angewandt und das Ergebnis auf dem Bildschirm (nach dem Algorithmus und dem Ruby-Compile-Quellcode) ausgegeben.

Beispiel:

  1. Algorithmusdatei test.alg:
                I*->H*
                IH->HH
                HD->DEH
                ED->DE
                D->
                *I->D*
                H->
                *->
                E->I
    
  2. Inputdatei test.inp:
                III*II
    
  3. Ergebnis der Anwendung auf den Input:
                IIIIII
    
  4. Generierte Trace-Datei test_trace.txt:
                III*II
                IIH*II
                IHH*II
                HHH*II
                HHHD*I
                HHDEH*I
                HDEHEH*I
                DEHEHEH*I
                EHEHEH*I
                EHEHEHD*
                EHEHEDEH*
                EHEHDEEH*
                EHEDEHEEH*
                EHDEEHEEH*
                EDEHEEHEEH*
                DEEHEEHEEH*
                EEHEEHEEH*
                EEEEHEEH*
                EEEEEEH*
                EEEEEE*
                EEEEEE
                IEEEEE
                IIEEEE
                IIIEEE
                IIIIEE
                IIIIIE
                IIIIII
    
Author:Lars Gerhard, Sebastian Haffner

Required files

runit/testcase   runit/cui/testrunner   runit/testsuite  

Methods

markovgen  

Public Instance methods

markovgen(input)

Diese Methode ist der Hauptbestandteil des Markov-CompilerCompilers. Sie erhält den Markov-Algorithmus in Textform als Parameter und liefert den Compiler als Ruby-Programm ebenfalls in Textform zurück. Im Wesentlichen werden folgende Bausteine zusammengestellt:

  1. Methodenheader:
          def markovc(input)
    
  2. If-Anweisungen für jede Einzelne Markov-Regel:
        if not (input=~/linkeSeite/)==nil
                          markovc(input.sub!(/linkeSeite/, "rechteSeite")
          end
    
  3. Ergebnisrückgabe und Methodenende:
        return input
        end
    

Im regulären Ausdruck ‘linkeSeite’ werden die Metazeichen von Ruby (?.|(){+\^$*[]) escapet, also mit vorangestelltem Backslash in den Ausdruck übernommen

[Validate]