Autor Beitrag
Manfred
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 90



BeitragVerfasst: Mo 19.12.05 12:43 
Hi!
Ich habe einen Compiler erstellt, der einen Syntax unterstützt, der mit Pascal vergleichbar ist.
Dabei habe ich dafür gesorgt, dass Kommentare wahlweise durch // (*...*) oder {...} möglich sind. Zudem sind diese schachtelbar.
Beispiel:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
ausführbare Anweisungen
{
  Kommentar 1
  {
     Kommentar 2
  }
  Immer noch Kommentar 1
}
wieder ausführbare Anweisungen

Mein Problem besteht nun darin, dass bereits beim Auftreten des 1. "}"-Zeichens das Highlighting für Kommentare ausgeschaltet wird.
Kennt jemand vielleicht ein Beispiel-Highlighting, welches geschachtelte Kommentare o.ä. unterstützt?

_________________
Computer können schneller rechnen als wir, deshalb machen sie auch mehr Fehler
Manfred Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 90



BeitragVerfasst: Do 29.12.05 22:43 
Hi!
Kennt jemand eine Programmiersprache, in der geschachtelte Kommentare erlaubt sind? Wenn es dazu bereits einen Highlighter gibt, könnte ich vielleicht daran erkennen, wie soetwas realisiert wird.

_________________
Computer können schneller rechnen als wir, deshalb machen sie auch mehr Fehler
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Do 29.12.05 22:48 
Wie sieht denn der Codeteil aus der einen Kommentarblock verarbeietet?
Manfred Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 90



BeitragVerfasst: Do 29.12.05 22:59 
Hi!
@Tino
Ich muss gestehen, dass ich die Bemerkung nicht ganz verstehe.
Im Grunde geht es darum, einen Editor für eine eigene Programmiersprache herzustellen. Die Programmiersprache existiert bereits und ein Editor ebenfalls.
Mein Ziel bestand nun darin, den Editor "aufzupeppeln", indem u.A. Highlighting realisiert wird (bisher wird RichEdit genutzt).
Der Griff zum SynEdit liegt dabei nahe.
Nun geht es lediglich um folgendes Problem:
In dieser speziellen Programmiersprache ist es erlaubt, Kommentare mit "(*" oder "{" einzuleiten - und zwar geschachtelt.
Das bedeutet, dass z.B. folgender Code lediglich "Hello World" ausgibt:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure beispiel ;
begin
  { Beginn der Bemerkung
    { Hier eine einzelne Bemerkungszeile }
    Ende der Bemerkung }
  print "Hello World" ;
end ;

Innerhalb der {...}-Anweisung befindet sich also eine weitere {...}-Anweisung.
Insgesamt findet man also {...{...}...}
Das ist in meinem COmpiler erlaubt!
Die Highlightings aus SynEdit markieren aber lediglich {...{...}
Die letzte geschweifte Klammer wird nicht mehr markiert, da Highlighting so wie ich es verstehe, bei einem Syntaxelement beginnt (hier also "{") und bei einem endet (hier "}").
Da während des Highlightings nicht geprüft wird, ob eine Schachtelung vorliegt, endet es bereits mit dem ersten Auftreten des Zeichens "}".

_________________
Computer können schneller rechnen als wir, deshalb machen sie auch mehr Fehler
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 30.12.05 00:01 
Für den GeSHi könnt ich Dir auf Anhieb sagen, wie's geht ... *g*

Aber zu deinem Problem. Insgesamt wirst Du das mit den SynEdits nicht hinbekommen, da diese so highlighten, wie es Delphi macht.

Was Du versuchen könntest, wäre die SynEdit-Komponenten bzgl. der Kommentar-Erkennung zu erweitern; da ich diese aber nicht nutze, kann ich diesbezüglich nicht allzuviel sagen ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.