AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi eigene Programmiersprache: Verschachtelte Kommentare
Thema durchsuchen
Ansicht
Themen-Optionen

eigene Programmiersprache: Verschachtelte Kommentare

Ein Thema von malo · begonnen am 18. Jun 2005 · letzter Beitrag vom 18. Jun 2005
Antwort Antwort
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#1

eigene Programmiersprache: Verschachtelte Kommentare

  Alt 18. Jun 2005, 15:46
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?
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#2

Re: eigene Programmiersprache: Verschachtelte Kommentare

  Alt 18. Jun 2005, 15:51
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.
Julian J. Pracht
  Mit Zitat antworten Zitat
Phistev
(Gast)

n/a Beiträge
 
#3

Re: eigene Programmiersprache: Verschachtelte Kommentare

  Alt 18. Jun 2005, 15:52
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.
Angehängte Dateien
Dateityp: pas dissect_110.pas (1,5 KB, 7x aufgerufen)
  Mit Zitat antworten Zitat
Waldteufel
(Gast)

n/a Beiträge
 
#4

Re: eigene Programmiersprache: Verschachtelte Kommentare

  Alt 18. Jun 2005, 15:53
Hi.

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...
  Mit Zitat antworten Zitat
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#5

Re: eigene Programmiersprache: Verschachtelte Kommentare

  Alt 18. Jun 2005, 16:00
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
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: eigene Programmiersprache: Verschachtelte Kommentare

  Alt 18. Jun 2005, 16:18
Moin Calvin,

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

Geht:
(* (* *) Geht nicht:
(* (* *) *)
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#7

Re: eigene Programmiersprache: Verschachtelte Kommentare

  Alt 18. Jun 2005, 16:23
Aber z.B. das geht:
(* {asdasd} *) Oder das: { (* asdf *) }
Julian J. Pracht
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#8

Re: eigene Programmiersprache: Verschachtelte Kommentare

  Alt 18. Jun 2005, 16:58
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.
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#9

Re: eigene Programmiersprache: Verschachtelte Kommentare

  Alt 18. Jun 2005, 18:25
Das war schon fast klar, aber ich hab das halt mal andersrum ausgelegt
Julian J. Pracht
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:49 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