%20in%20Ratfor90%3F.png)
Ich habe höchstwahrscheinlich eine dumme Frage und frage vielleicht im falschen Forum, weiß aber nicht, wohin ich mich wenden soll. OK, ich arbeite mit gfortran über ratfor90 (das ist ein netter kleiner Präprozessor für gfortran und fortran90, der sehr einfach ist, C-ähnlich aussieht und für Untermenschen wie mich entwickelt wurde...) Man schreibt ein sehr kurzes ratfor90, dann wird es in vollwertigen gfortran-Code übersetzt und die Berechnungen gehen von dort aus weiter... Meine Frage: Gibt es einen „inversen“ Übersetzer, der einen vollwertigen gfortran-Code nimmt und ihn in eine viel kürzere und leichter lesbare ratfor90-Datei übersetzt?
(Nur für den Fall – mein Computer ist Dell Precision M, Ubuntu 14.04, KDE-Umgebung …)
Antwort1
Jemandkönntehabe dies als Forschungsprojekt getan, aber
- das ist so etwas wie ein Decompiler (davon gibt es nicht viele zu besprechen) und
- ratfor hat zunächst einmal nicht viele Entwickler.
Allerdings ist alles, was ich in der Gegend sehe, alt (was angesichts der beiden genannten Punkte zu erwarten ist):
- Techniken zur umgekehrten Kompilierung, Cristina Cifuentes, 1994, erwähnt ein in BS Baker beschriebenes Programm. Ein Algorithmus zur Strukturierung von Flussdiagrammen. Journal of the ACM, 24(1):98–120, Januar 1977.
Baker[Bak77] stellte einen Algorithmus vor, um Flussgraphen in äquivalente Flussgraphen zu strukturieren, der die folgenden Kontrollstrukturen verwendete: if..then..else, mehrstufiger break, mehrstufiger next und Endlosschleifen. Gotos wurden immer dann verwendet, wenn der Graph mit den vorherigen Strukturen nicht strukturiert werden konnte. Der Algorithmus wurde auch auf irreduzible Graphen erweitert. Es wurde gezeigt, dass der Algorithmus wohlgeformte und richtig verschachtelte Programme erzeugte und dass alle goto-Anweisungen im endgültigen Graphen nach vorne sprangen. Dieser Algorithmus wurde in der
struct
Programm auf einem PDP11/54 unter Unix. Es wurde verwendet, um Fortran-Programme in Ratfor umzuschreiben, eine erweiterte Fortran-Sprache, die Kontrollstrukturen nutzte. Das Struct-Programm wurde später von J.Reuter in derdecomp
Dekompiler zum Strukturieren von Graphen, die aus Objektdateien mit Symbolinformationen erstellt wurden. - Hilfe zu Disassemblern/Decompilern, Usenet-Thread im Jahr 1990, Kommentar von Mark William Hopkin sagt
Es gibt ein Standard-UNIX-Dienstprogramm (zumindest für das von uns verwendete 4.3-BSD), das ungefähr Folgendes macht:
"struct"
. Dieses Dienstprogramm verwendet Standard-Fortran-77-Programme und generiert daraus Ratfor-Code. Ratfor ist ein „rationalisiertes“ Fortran, das alle von Algol abgeleiteten Kontrollstrukturen enthält.
Wie Sie sehen, handelt es sich bei beiden Kommentaren um dasselbe Programm aus den 1970er Jahren. Der Kommentar zu 4.3BSD zeigt, dass Sie den Quellcode möglicherweise online finden. Was ich gefunden habe, schließt die Handbuchseite mit Folgendem ab:
BUGS
Struct knows Fortran 66 syntax, but not full Fortran 77.
If an input Fortran program contains identifiers which are reserved
words in Ratfor, the structured version of the program will not be a
valid Ratfor program.
The labels generated cannot go above 32767.
If you get a goto without a target, try −e .
Das heißt, das Programm war nicht vollständig und würde (abgesehen von einem anderen Forschungsprojekt) wahrscheinlich nicht das leisten, was Sie benötigen.