FYPP ist ein Python -Precessor. Es kann für alle Programmiersprachen verwendet werden, es ist jedoch ein Hauptziel, einen FORTRAN -Präzessor anzubieten, der dazu beiträgt, die FORTRAN mit konfessionellen Kompilierungen und Vorlagen -Metaprogrammierfunktionen zu erweitern. Anstatt seine eigene Expressionssyntax einzuführen, verwendet es Python -Ausdrücke in seinen Präprozessor -Richtlinien und bietet die Konsistenz und Vielseitigkeit von Python bei der Formulierung von Metaprogrammierungsaufgaben. Es legt starker Schwerpunkt auf Robustheit und auf nette Integration in sich entwickelnde Toolchains.
Das Projekt wird auf GitHub gehostet.
Eine detaillierte Dokumentation finden Sie in rededHedocs.org.
FYPP wird unter der BSD 2-Clause-Lizenz veröffentlicht.
Definition, Bewertung und Entfernung von Variablen:
#: Wenn Debug> 0 Drucken *, "Einige Debug -Informationen" #: endif #: Loglevel = 2 festlegen print *, "loglevel: $ {loglevel} $" #: del loglevel
Makrodefinitionen und Makroaufrufe:
#: Def Assert (Cond) #: Wenn Debug> 0 if (.not. $ {cond} $) dann print *, "Assert in Datei fehlgeschlagen $ {_ Datei _} $, Zeile $ {_ Zeile _} $" Fehlerstopp Ende wenn #: endif #: Enddef Assert ! Auf direkte Anruf aufgerufen (Argument erfordert kein Zitat) @: Assert (Größe (myarray)> 0) ! Als Python -Ausdruck aufgerufen (Argument braucht Zitat) $: Assert ('Größe (myarray)> 0')
Bedingte Ausgabe:
Programmtest #: Wenn definiert ('with_mpi') Verwenden Sie MPI #: ELIF definiert ('with_openmp') Verwenden Sie OpenMP #:anders Verwenden Sie Serien #: endif
Iterated Output (zB zum Erzeugen von FORTRAN -Vorlagen):
Schnittstelle myfunc #: Für DTYPE in ['Real', 'Dreal', 'Komplex', 'dkomplex'] Modulprozedur myfunc _ $ {dTYPE} $ #: endfor Ende der Schnittstelle myfunc
Inline -Richtlinien:
Logisch, Parameter :: Hasmpi = # {if defined ('mpi')} # .True. # {else}# .false. #{endif}#
Einführung willkürlicher Python -Ausdrücke:
Zeichen (*), Parameter :: comp_date = "$ {time.strftime ('%y-%M-%d')} $"
Aufnahme von Dateien während der Vorverarbeitung:
#: Integrieren Sie "macrodefs.fypp"
Verwenden von Kontinutationsleitungen im Forran-Stil in Präprozessor-Richtlinien:
#: Wenn var1> var2 & & oder var2> var4 Druck *, "hier etwas tun" #: endif
Übergeben (nicht zahlreiche) Multiline -String -Argumente an Hallables:
#! Callable braucht nur String -Argument #: def debug_code (Code) #: Wenn Debug> 0 $: Code #: endif #: enddef debug_code #! Pass Code Block als erster Positionsargument übergeben #: Block Debug_Code if (Größe (Array)> 100) dann Print *, "Debugg: Spur Soury Large Array" Ende wenn #: endblock debug_code #! Callable-Bedarf auch Nicht-String-Argumententypen #: Def repupt_code (Code, Wiederholung) #: Für Ind in Reichweite (Wiederholung) $: Code #: endfor #: enddef repualt_code #! Geben Sie den Codeblock als Positionsargument und 3 als Schlüsselwortargument "Wiederholung" übergeben #: block repuple_code (repep = 3) Dies wird dreimal wiederholt #: EndBlock repualt_code
Präprozessor Kommentare:
#! Dies wird in der Ausgabe nicht angezeigt #! Auch die Newline -Charaktere am Ende der Linien werden unterdrückt
Unterdrückung des Präprozessorausgangs in ausgewählten Regionen:
#! Es werden Definitionen gelesen, aber es werden keine Ausgabe (z. B. Neulinnern) erzeugt #:stumm #: Integrieren Sie "macrodefs.fypp" #: Endmute
Explizite Anfrage zum Beenden des Präprozessors:
#: Wenn Debuglevel <0 #: Stop 'Negatives Debug -Level nicht erlaubt!' #: endif
Einfache Überprüfung auf Makroparameter Vernunft:
#: def MyMacro (Rang) #! Makro funktioniert nur für Rang 1 und höher #: Assert Rank> 0 : #: enddef mymacro
Zeilennummerierungsrichtlinien in Ausgabe:
Programmtest #: Wenn definiert ('mpi') Verwenden Sie MPI #: endif :
verwandelt in
# 1 "test.fypp" 1 Programmtest # 3 "test.fypp" Verwenden Sie MPI # 5 "test.fypp" :
Wenn variabler MPI
definiert ist und FYPP angewiesen wurde, Linienmarker zu erzeugen.
Automatische Faltung generierter Linien, die die Längenlängengrenze überschreiten
FYPP benötigt einen funktionierenden Python 3 -Dolmetscher (Python 3.5 oder höher).
Wenn Sie FYPP installieren, erhalten Sie das fypp
und das Python -Modul fypp.py
Letztere können Sie importieren, wenn Sie auf die Funktionalität von FYPP direkt aus Ihren Python -Skripten zugreifen möchten.
Die letzte stabile Version von FYPP kann einfach als Conda -Paket durch Ausgabe installiert werden
Conda install -c Conda -forge Fypp
Sie können auch Pythons Command Line Installer pip
verwenden, um die stabile Version von der FYPP -Seite auf PYPI herunterzuladen und auf Ihrem System zu installieren.
Wenn Sie FYPP in das Modulsystem des aktiven Python 3 -Interpreters einbauen möchten (normalerweise der Fall, wenn Sie eine virtuelle Python -Umgebung verwenden), ist das Problem
PIP3 FYPP Installieren
Alternativ können Sie FYPP in den Benutzerraum (unter ~/.local) mit installieren
PIP3 Install -Benutzer FYPPP
Unter Windows können Sie die MSYS2 Toolchain verwenden, um FYPP in einem Mingw -Terminal zu installieren. So installieren Sie den FYPP -Gebrauch:
Pacman -S Mingw-W64-X86_64-Python-Fypp
Stellen Sie sicher, dass die ausgewählte Architektur Ihrem aktuellen Mingw -Terminal entspricht. Für alle unterstützenden Mingw -Architekturen finden Sie hier den Paketindex.
Für eine manuelle Installation können Sie den Quellcode der stabilen Veröffentlichungen von der FYPP -Projektwebsite herunterladen.
Wenn Sie die neueste Entwicklungsversion erhalten möchten, klonen Sie das Projekt -Repository:
Git Clone https://github.com/aradi/fypp.git
und schauen Sie sich den Master -Zweig an.
Das Befehlszeilen-Tool ist ein einzelnes eigenständiges Skript. Sie können es direkt aus dem Quellordner ausführen
Fypp_Source_Folder/bin/fypp
oder nach dem Kopieren des Bin -Ordners zu einem beliebigen Ort, der in Ihrer Pfadumgebungsvariablen aufgeführt ist, indem Sie nur ausgeben
fypp
Das Python -Modul fypp.py
findet sich in FYP_SOURCE_FOLDER/src
.
Das FYPP -Befehlszeilen -Tool liest eine Datei, Vorverhandlung und schreibt sie in eine andere Datei, sodass Sie sie normalerweise wie folgt aufrufen.
Fypp Source.fpp Source.f90
Dies würde Source.FPP verarbeiten und das Ergebnis an Source.f90 schreiben. Wenn keine Eingabe- und Ausgabedateien angegeben werden, werden Informationen von STDIN gelesen und in STDOut geschrieben.
Das Verhalten von FYPP kann mit verschiedenen Befehlszeilenoptionen beeinflusst werden. Eine Zusammenfassung aller Befehlszeilenoptionen kann erhalten werden durch:
fypp -h