EnglischFranzösischSpanisch

Ad


OnWorks-Favicon

cpphs – Online in der Cloud

Führen Sie cpphs im kostenlosen Hosting-Anbieter OnWorks über Ubuntu Online, Fedora Online, den Windows-Online-Emulator oder den MAC OS-Online-Emulator aus

Dies ist der Befehl cpphs, der beim kostenlosen Hosting-Anbieter OnWorks mit einer unserer zahlreichen kostenlosen Online-Workstations wie Ubuntu Online, Fedora Online, dem Windows-Online-Emulator oder dem MAC OS-Online-Emulator ausgeführt werden kann

PROGRAMM:

NAME/FUNKTION


cpphs – liberalisierter cpp-a-ähnlicher Präprozessor für Haskell

ZUSAMMENFASSUNG


cpphs [DATEINAME|zur Auswahl] ...

BESCHREIBUNG


cpphs ist eine liberalisierte Neuimplementierung von cpp (1) der C-Präprozessor, in und für
Haskell.

Warum CPP neu implementieren? Zu Recht oder zu Unrecht wird der C-Präprozessor in Haskell häufig verwendet
Quellcode. Es ermöglicht die bedingte Kompilierung für verschiedene Compiler
Versionen desselben Compilers und verschiedene Betriebssystemplattformen. Es wird auch gelegentlich verwendet
für seine Makrosprache, die bestimmte Formen plattformspezifischer Details ermöglichen kann.
B. die langwierige Standardgenerierung von Instanzdefinitionen und FFI
Erklärungen. Abgesehen von der offensichtlichen Ästhetik gibt es jedoch zwei Probleme mit CPP
Einsen:

Für einige Haskell-Systeme, insbesondere Hugs unter Windows, ist kein echtes CPP verfügbar
default.

Auch für die anderen Haskell-Systeme wird das von der gcc 3.x-Serie bereitgestellte gemeinsame CPP verwendet
ändert sich subtil auf eine Weise, die mit Haskells Syntax nicht kompatibel ist. Es gibt
Es gab schon immer Probleme mit z. B. Zeichenfolgenlücken und Primzahlen
Bezeichner. Diese Probleme werden nur noch schlimmer.

Daher schien es richtig, zu versuchen, eine Alternative zu cpp bereitzustellen, mit der beide besser kompatibel sind
Haskell und selbst in Haskell geschrieben, damit es mit Compilern verteilt werden kann.

cpphs ist nahezu funktionsreich und mit dem kompatibel -traditionell Stil von CPP.
Es gibt zwei Modi:

Nur bedingte Kompilierung (--nomacro),

und vollständige Makroerweiterung (Standard).

In --nomacro Modus cpphs führt nur bedingte Kompilierungsaktionen aus, d. h #einschließenist,
#wenn's und #ifdef's werden gemäß Textersetzungsdefinitionen verarbeitet (beide Befehls-
Linie und intern), es wird jedoch keine parametrisierte Makroerweiterung durchgeführt. Vollständig
Kompatibilitätsmodus (Standardeinstellung), Textersetzungen und Makroerweiterungen sind ebenfalls verfügbar
im verbleibenden Textkörper des Nicht-CPP-Textes verarbeitet.

Arbeitsfunktionen:

#ifdef einfache bedingte Kompilierung

#wenn die vollständige boolesche Sprache von define(), &&, ||, == usw.

#elif verkettete Bedingungen

#define
Inline-Definitionen (Textersetzungen und Makros)

#undef Inline-Widerruf von Definitionen

#einschließen
Dateieinbindung

#Leitung Zeilennummernanweisungen

\n Zeilenfortsetzungen innerhalb aller #-Direktiven

/ ** / Tokenverkettung innerhalb einer Makrodefinition

## Tokenverkettung im ANSI-Stil

# Token-Stringisierung im ANSI-Stil

__DATEI__
spezieller Textersatz für DIY-Fehlermeldungen

__LEITUNG__
spezieller Textersatz für DIY-Fehlermeldungen

__DATUM__
spezielle Textersetzung

__ZEIT__
spezielle Textersetzung

Die Makroerweiterung ist rekursiv. Bei der Neudefinition eines Makronamens wird keine Warnung generiert.
Makros können auf der Befehlszeile mit definiert werden -D genau wie Textersetzungen. Makro
Namen dürfen Haskell-Bezeichner sein, z. B. mit der Primzahl ` und dem Backtick ´
Zeichen, die etwas lockerer sind als in C, aber möglicherweise immer noch keinen Operator enthalten
Symbole.

Die Nummerierung der Zeilen in der Ausgabe bleibt erhalten, sodass jeder spätere Prozessor sie nachgeben kann
aussagekräftige Fehlermeldungen. Wenn eine Datei ist #einschließen'D, cpphs Einsätze #Leitung Richtlinien für
der gleiche Grund. Die Nummerierung sollte auch bei Zeilenfortsetzungen korrekt sein.
Wenn du nicht willst #Leitung Anweisungen in der endgültigen Ausgabe verwenden Sie die --keine Linie .

Bei Syntaxfehlern in CPP-Anweisungen wird eine Meldung an stderr gesendet und das Programm angehalten.
Wenn eine #include-Datei nicht gefunden wird, wird eine Warnung an stderr ausgegeben, die Verarbeitung wird jedoch fortgesetzt.

Sie können in der Befehlszeile beliebig viele Dateinamen angeben. Die Ergebnisse werden verkettet
Standardausgabe.

-Dsym Definieren Sie eine Textersetzung (Standardwert ist 1)

-Dsym=Welle
Definieren Sie eine Textersetzung mit einem bestimmten Wert

-IWeg Fügen Sie dem Suchpfad für #include ein Verzeichnis hinzu

-ODatei Geben Sie eine Datei für die Ausgabe an (Standard ist stdout)

--nomacro
Verarbeiten Sie nur #ifdefs und #includes,
Makros nicht erweitern

--keine Linie
#line-Kot aus der Ausgabe entfernen

--Streifen
Konvertieren Sie Kommentare im C-Stil in Leerzeichen, auch außerhalb
cpp-Anweisungen

--hashes
Erkennen Sie den ANSI-Operator # stringise und ## for
Token-Verkettung innerhalb von Makros

--Text Behandeln Sie die Eingabe als einfachen Text, nicht als Haskell-Code

--Layout
Behalten Sie Zeilenumbrüche innerhalb von Makroerweiterungen bei

--unbeleuchtet
Entfernen Sie Kommentare im literarischen Stil

--Version
Versionsnummer von cpphs melden und stoppen

Standardmäßig sind KEINE Textersetzungen definiert. (Normales CPP hat normalerweise Definitionen
für Maschine, Betriebssystem usw. Diese können auf Wunsch problemlos zum cpphs-Quellcode hinzugefügt werden.)
Der Suchpfad wird in der Reihenfolge durchsucht -I Optionen, außer dass das Verzeichnis der
Zuerst wird immer die aufrufende Datei und dann das aktuelle Verzeichnis durchsucht. Auch hier gilt: Nein
Standardsuchpfad (und auch dieser könnte leicht geändert werden).

UNTERSCHIEDE AB CPP


Im Allgemeinen basiert cpphs auf dem -traditionell Verhalten, nicht ANSI C, und hat das
Folgende Hauptunterschiede zum Standard-CPP.

Allgemeines

Das # das eine CPP-Direktive einführt, muss in der ersten Spalte einer Zeile stehen (während
ANSI erlaubt Leerzeichen vor dem # ).

Erzeugt die #Leitung n "Dateinamen"Syntax, nicht die # n "Dateinamen" Variante.

C-Kommentare werden nur aus CPP-Anweisungen entfernt. Sie werden nicht von anderen getrennt
Text. Bedenken Sie beispielsweise, dass in Haskell alle folgenden Operatoren gültig sind
Symbole: /* */ * / * Sie können jedoch die Entfernung von C-Kommentaren mit aktivieren --Streifen .

Makro Sprache

Akzeptiert / ** / zum Einfügen von Token in eine Makrodefinition. Jedoch, /* */ (mit beliebigem Text
(zwischen dem Öffnen/Schließen-Kommentar) fügt Leerzeichen ein.

Das ANSI ## Der Token-Pasting-Operator ist mit dem verfügbar --hashes Flagge. Dies gilt es zu vermeiden
Fehlinterpretation eines gültigen Haskell-Operators mit demselben Namen.

Ersetzt einen formalen Makroparameter durch den tatsächlichen Parameter, auch innerhalb einer Zeichenfolge (doppelt oder einfach).
zitiert). Dies ist ein traditionelles Verhalten, das in ANSI nicht unterstützt wird.

Erkennt die # Stringisierungsoperator in einer Makrodefinition nur, wenn Sie den verwenden --hashes
Möglichkeit. (Es handelt sich um eine ANSI-Ergänzung, die nur benötigt wird, weil die Stringisierung in Anführungszeichen (oben) dies ist
gemäß ANSI verboten.)

Behält Leerzeichen innerhalb einer Textersetzungsdefinition exakt bei (Modulo-Zeilenumbrüche),
aber führende und nachfolgende Leerzeichen werden eliminiert.

Behält Leerzeichen innerhalb einer Makrodefinition (und daran anschließend) genau bei (modulo
Zeilenumbrüche), aber führende Leerzeichen werden eliminiert.

Behält Leerzeichen innerhalb von Makroaufrufargumenten genau bei (einschließlich Zeilenumbrüchen), jedoch am Anfang
und nachgestellte Leerzeichen werden eliminiert.

Mit der --Layout Option, Zeilenfortsetzungen in einer Textersetzung oder Makrodefinition
bleiben als Zeilenumbrüche im Makroaufruf erhalten. (Nützlich für Layout-sensitiven Code in
Haskell.)

Verwenden Sie cpphs online über die Dienste von onworks.net


Kostenlose Server & Workstations

Laden Sie Windows- und Linux-Apps herunter

Linux-Befehle

Ad