Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi eigene Programmiersprache: Verschachtelte Kommentare (https://www.delphipraxis.net/47961-eigene-programmiersprache-verschachtelte-kommentare.html)

malo 18. Jun 2005 14:46


eigene Programmiersprache: Verschachtelte Kommentare
 
Hi!

Ich bin immer noch an meiner "Programmiersprache" am basteln... mir kommt da nur wieder ein kleines Problem auf:

Ich durchsuche den Quellcode vorerst mit einem Tokenizer, der den Quellcode "aufteilt". Der "tokenized" Code soll dann erst dem parser zugeschoben werden.

der Parser soll jedoch Kommentare zum Beispiel gar nicht erst sehen. Dafür prüfe ich im Tokenizer, ob Kommentar-Begrenzer im Quellcode vorkommen (z.B. "/*"... welche Zeichen ich als Begrenzer wähle, kann ja jederzeit angepasst bzw. entschieden werden).

Ich will sowohl einzeilige Kommentare (//), als auch mehrzeile erlauben. Bei einzeiligen Kommentaren ist die Verschatelung kein Problem, da ich da einfach prüfen kann, ob eine neue Zeile im Quellcode vorkommt (also #10#13). Bei mehrzeiligen Kommentaren weiß ich aber nicht, wie ich das machen soll...

Um mehrzeilige Kommentare zu erkennen, gehe ich den Quellcode durch, und prüfe nach dem Kommentarbegrenzer. Wenn ein Kommentar erkannt wurde, wird eine Boolsche Variable (is_comment) auf TRUE gesetzt. Sobald dann der jeweilige "Endbegrenzer" gefunden wurde, wird die Variable wieder auf FALSE gesetzt. Wenn jedoch ein verschachtelter Kommentar zu Ende sein sollte, würde dann trotzdem mein "Kommentar" zu ende sein. Tja, und da ist das kleine Problem...

Hat jemand eine Ahnung, wie ich die Verwendung von veraschtelten Kommenaren ermöglichen könnte?

Ultimator 18. Jun 2005 14:51

Re: eigene Programmiersprache: Verschachtelte Kommentare
 
Du könntest eine ganzzahlige Vaiable mitzählen lassen.

Wir ein Anfangsbegrenzer gefunden, erhöhst du sie um eins, wird ein Endbegrenzer gefunden, erniedrigst du sie um eins.
Und wenn sie Null ist, dann hast du Code und keine Kommentare.

Phistev 18. Jun 2005 14:52

Re: eigene Programmiersprache: Verschachtelte Kommentare
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab' mal eine Funktion geschrieben, die einen String anhand eines Start- und eines Endzeichens (z.B. Klammern) zerlegt (1. Teil davor, 2. Teil Block, 3. Teil dahinter) und Verschachtelungen berücksichtigt (Brauchte ich für einen Taschenrechner). Mit etwas Arbeit sollte auch ein String als Begrenzer möglich sein.

P.S.: Wenn jemand die Funktion umschreibt, würde ich gerne das Resultat sehen.

Waldteufel 18. Jun 2005 14:53

Re: eigene Programmiersprache: Verschachtelte Kommentare
 
Hi.

Zitat:

Zitat von malo
Um mehrzeilige Kommentare zu erkennen, gehe ich den Quellcode durch, und prüfe nach dem Kommentarbegrenzer. Wenn ein Kommentar erkannt wurde, wird eine Boolsche Variable (is_comment) auf TRUE gesetzt. Sobald dann der jeweilige "Endbegrenzer" gefunden wurde, wird die Variable wieder auf FALSE gesetzt. Wenn jedoch ein verschachtelter Kommentar zu Ende sein sollte, würde dann trotzdem mein "Kommentar" zu ende sein. Tja, und da ist das kleine Problem...

Nimm stattdessen Byte/Integer.

Delphi-Quellcode:
var
  kommentar : integer;

{...}

function IsInnerhalbKommentar : boolean;
begin
  result := (kommentar > 0);
end;

{...}
  if token = '{' then inc(kommentar)
  else if token = '}' then dec(kommentar);
{...}
edit: Wo war der rote Kasten... :gruebel:

malo 18. Jun 2005 15:00

Re: eigene Programmiersprache: Verschachtelte Kommentare
 
Zitat:

Zitat von Ultimator
Du könntest eine ganzzahlige Vaiable mitzählen lassen.

Wir ein Anfangsbegrenzer gefunden, erhöhst du sie um eins, wird ein Endbegrenzer gefunden, erniedrigst du sie um eins.
Und wenn sie Null ist, dann hast du Code und keine Kommentare.

Danke, das ist die Idee :)

Christian Seehase 18. Jun 2005 15:18

Re: eigene Programmiersprache: Verschachtelte Kommentare
 
Moin Calvin,

verschachtelte Kommentare sind übrigens, beispielsweise, in Delphi und C++ nicht zulässig.

Geht:
Delphi-Quellcode:
(* (* *)
Geht nicht:
Delphi-Quellcode:
(* (* *) *)

Ultimator 18. Jun 2005 15:23

Re: eigene Programmiersprache: Verschachtelte Kommentare
 
Aber z.B. das geht:
Delphi-Quellcode:
(* {asdasd} *)
Oder das:
Delphi-Quellcode:
{ (* asdf *) }
;)

Robert_G 18. Jun 2005 15:58

Re: eigene Programmiersprache: Verschachtelte Kommentare
 
Es gibt in Delphi entweder einen multi line comment, der mit /* begint ODER einen, der mit{ beginnt.
Christian wollte damit nur zeigen, dass die erste schleißende Zeichefole den Kommentar schließt. eine weitere steht alleine da und verursacht einen Fehler beim Kompostieren.

Ultimator 18. Jun 2005 17:25

Re: eigene Programmiersprache: Verschachtelte Kommentare
 
Das war schon fast klar, aber ich hab das halt mal andersrum ausgelegt ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz