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):
Desweiteren wird der Algorithmus auf die Eingabedatei angewandt und das Ergebnis auf dem Bildschirm (nach dem Algorithmus und dem Ruby-Compile-Quellcode) ausgegeben.
I*->H* IH->HH HD->DEH ED->DE D-> *I->D* H-> *-> E->I
III*II
IIIIII
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 |
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:
def markovc(input)
if not (input=~/linkeSeite/)==nil markovc(input.sub!(/linkeSeite/, "rechteSeite") end
return input end
Im regulären Ausdruck ‘linkeSeite’ werden die Metazeichen von Ruby (?.|(){+\^$*[]) escapet, also mit vorangestelltem Backslash in den Ausdruck übernommen