Sollen Pascal-Kommentare verschachteln?

8

Ich habe eine Compiler-Hausaufgabenfrage, die möchte, dass ich ein DFA für Pascal-Kommentare zeichne, aber ich habe Pascal nie benutzt (und wahrscheinlich auch nie). Die Frage spezifiziert nicht, ob wir ANSI Pascal oder Turbo Pascal verwenden sollten, also wollte ich eins für beide tun.

Einige Google-Suchen haben mir gezeigt, dass Turbo Pascal geschachtelte Kommentare erlaubt, solange das gleiche Trennzeichen nicht verwendet wird, also ist {(*comment*)} ok und (*{comment}*) , aber {{comment}} oder (*(*comment*)*) sind nicht in Ordnung. Meine Frage hier ist, ob ein Kommentar wie {(*{comment}*)} oder (*{(*comment*)}*) in Ordnung ist, da dieselben Begrenzer nicht in einer Zeile verwendet werden.

Ich habe auch gegoogelt, ob ANSI Pascal verschachtelte Kommentare erlaubt, aber ich habe keine definitive Antwort gefunden. Wenn ANSI Pascal verschachtelte Kommentare erlaubt, was sind die Regeln?

Nebenbei bemerkt, mache ich mir keine Sorgen wegen der seltsamen Kommentarkonvention verschiedener Start- und Endtrennzeichen, eine Konvention, die in ANSI Pascal erlaubt ist.

UPDATE:

Ich möchte klarstellen, dass ich mich nicht wirklich damit beschäftige, wie spezifische Compiler mit Pascal-Kommentaren umgehen, ich bin besorgt, wie ein Compiler SOLL mit Pascal kommentiert, wenn dieser Compiler 100% an der ANSI oder TURBO Pascal Standards.

    
ubiquibacon 01.10.2010, 19:33
quelle

4 Antworten

11

ISO 7185: 1990 sagt dies über Kommentare in §6.1.8:

  

Wo ein Kommentar eine beliebige Folge von Zeichen und Trennungen von Zeilen sein soll, die weder} noch *) enthält, das Konstrukt

     

('{' | '(*') Kommentar ('*)' | '}')

     

soll ein Kommentar sein, wenn weder das {noch das (* innerhalb einer Zeichenkette oder innerhalb eines Kommentars auftritt.

     

HINWEISE

     
  1. Ein Kommentar kann also mit { beginnen und mit *) enden, oder mit (* beginnen und mit } enden.
  2.   
  3. Die Sequenz (*) kann nicht in einem Kommentar vorkommen, obwohl die Sequenz {) kann.
  4.   

Demnach gibt es im Wesentlichen nur eine Art von Kommentar. Obwohl Sie einen Kommentar entweder mit { oder (* starten können, können Sie keine anderen Zeichensätze verwenden, um andere Kommentare zu "umbrechen". Turbo Pascal dagegen hat zwei Arten von Kommentaren, die Klammern und solche, die Klammern verwenden.

Wenn Sie einen geschweiften Kommentar haben und ihn in einen Kommentar im Klammerstil einfügen, um (*{}*) zu erstellen, sagt ISO, dass der Kommentar (*{} mit *) übrig bleibt. Dies ist ein Syntaxfehler in Ihrem Code , während Turbo Pascal sagt, dass der Kommentar (*{}*) ist und kein Text übrig ist.

Mit keinem der beiden Stile können Sie einen bereits eingepackten Kommentar in einen weiteren Satz von Kommentartrennzeichen umbrechen. Das liegt daran, dass der "innere" Kommentar nach dem Umbrechen eines Kommentars nicht mehr als Kommentar behandelt wird. Es ist nur gewöhnlicher Text. Wenn Sie {(**)} haben und es in einen Klammerkommentar umwandeln möchten, um (*{(**)}*) zu machen, sagen sowohl ISO als auch Turbo Pascal, dass der Kommentar (*{(**) mit }*) übrig bleibt.

In den Modi fpc und objfpc unterstützt Free Pascal die Verschachtelung von Kommentaren, so dass mein aktuellstes Beispiel als gültiger Kommentar ohne restlichen Text akzeptiert wird. Die FPC-Dokumentation zu diesem Thema demonstriert dies jedoch nicht. Es gibt sechs Beispiele für angeblich verschachtelte Kommentare:

%Vor%

Aber Turbo Pascal (oder Delphi, für die letzten zwei Zeilen), von dem wir bereits festgestellt haben, dass nicht die Verschachtelung unterstützt, würde alle als perfekt akzeptieren gültige Kommentare! FPC unterstützt wirklich verschachtelte Kommentare, aber diese Beispiele veranschaulichen es nicht. Hier sind einige Beispiele für verschachtelte Kommentare:

%Vor%

Ich würde sogar argumentieren, dass das dritte und vierte Beispiel von FPC tatsächlich Gegenbeispiele zu der Behauptung sind, dass FPC verschachtelte Kommentare unterstützt. Diese beiden Zeilen sollten keine vollständigen Kommentare sein. Der // in der Mitte der Zeile führt einen Kommentar ein, der erst am Ende der Zeile (EOL) endet. Das EOL kommt nach } und *) , so dass der innere Kommentar im Schrägstrichstil möglicherweise nicht bis zum Erreichen der Klammer- oder Klammertrennzeichen abgeschlossen sein kann. Genauso wie <a> <b> </a> </b> falsch verschachteltes XML ist, haben wir falsch verschachtelte Kommentare: { // } EOL .

Nach weiteren Experimenten schließe ich, dass in FPC nur Kommentare des gleichen Typs verschachtelt sind. Wenn Sie beispielsweise einen Kommentar mit { öffnen, sind die Zeichen (* nicht mehr speziell. FPC wird einen Klammerkommentar-Kommentar innerhalb des geschweiften Kommentars nicht öffnen. Wenn dies der Fall wäre, wäre {(*} aufgrund des nicht abgeschlossenen Klammerkommentars ein Syntaxfehler. Wir könnten dies erklären, indem wir sagen, dass die Beendigung innerer Kommentare optional ist, wenn die Kommentare heterogen sind, aber es ist eine einfachere Erklärung, dass der innere Kommentar überhaupt nicht als Kommentar erkannt wird. Sobald Sie einen geschweiften Kommentar öffnen, haben nur Klammern eine Bedeutung. Außerdem startet // nicht wirklich einen Schrägstrichkommentar, wenn er in geschweiften Klammern steht. Das ist eine einfachere Erklärung, um zu sagen, dass FPC erlaubt, dass Schrägstrich-Kommentare falsch verschachtelt werden. Sie können entweder sagen, dass Schrägstrichkommentare überhaupt nicht verschachtelt werden, oder dass Schrägstrichkommentare in anderen Schrägstrichkommentaren verschachtelt werden teilen einen einzelnen EOL-Terminator.

Ihre Aufgabe hat wahrscheinlich dazu geführt, dass Sie den Turbo Pascal-Stil verwenden, in dem die Kommentartrennzeichen übereinstimmen müssen. Es hat definitiv nicht erwartet, dass Sie den Free Pascal-Stil verwenden, da es die Zuordnung unmöglich gemacht hätte - ein DFA kann keine willkürlich verschachtelten Konstrukte akzeptieren.

    
Rob Kennedy 02.10.2010, 00:24
quelle
2

Mindestens Delphi lässt {(*{comment}*)} nicht zu, weil die erste schließende geschweifte Klammer die erste öffnende geschweifte Klammer schließt und nicht die letzte. Gleiches gilt für Ihre andere Probe.

    
quelle
0

Ich denke, in der Version von turbo pascal, die ich verwendet habe, wurden verschachtelte Kommentare nicht unterstützt, beide würden kompilieren:

%Vor%
  

Einige Google-Suchen haben mir gezeigt, dass Turbo Pascal geschachtelte Kommentare erlaubt, solange das gleiche Trennzeichen nicht verwendet wird

Effektiv werden verschachtelte Kommentare "unterstützt", weil die alternative Syntax vom Compiler ignoriert wird.

Sie könnten einen Pascal-Compiler herunterladen und Ihr dfa schreiben, um zu unterstützen, was der Compiler unterstützt. Verwenden Sie eines ihrer Beispielprogramme, und prüfen Sie, ob verschachtelte Kommentare kompiliert werden.

    
Brian Maltzan 01.10.2010 20:17
quelle
0

in fpc (kostenlos pascal): // ... ( ... ) {...}

    
shs.pas 25.12.2014 19:00
quelle

Tags und Links