Seite 1 von 2

OOP PreCompiler 0.9.01 Beta

Verfasst: 10.03.2007 09:59
von Leonhard
Hier ist eine Beta meines PreCompiler (PureBasic-IDE-Werkzeug). Entgegen anderen PreCompilern arbeitet mein PreCompiler mit Strukturen. Dies macht es etwas schwer, die Definition eines Objektes festzustellen (z.B. in Strukturen, was mitlerweile funktionieren sollte). Darum bitte ich um verzeiung, wenn das Objekt nicht richtig geparst wird. Diese Bugs bitte hier Posten (auf Doppelposts achten).

Ein Objekt wird nur bei Definitionen oder aus Procedure/Methode-Header gelesen. Deshalb ist empfehlbar, EnableExplicit am anfang des Codes einzufügen, um zu vermeiden, das der PreCompiler die Objekte erkennt.

Leide ist die Fehlerausgabe noch in Deutsch und in Klassen noch nicht ausgereift. So ist es mit dem PreCompiler noch möglich, Methoden doppelt zu verwenden.

Da der PreCompiler noch ne Beta ist, wird jedes mal beim Parsen eine 'pbp_debug.txt'-Datei erstellt wird. Diese enthält den Debug des PreCompilers. Sollte man einfach ignoriren.

Eine Linux-Version ist auch geplant.

Was der PreCompiler für Funktionen momentan besitzt:
- 'Class'/'ClassDLL' / 'EndClass' zum einleiten von Klassen
- 'ClassStructure' / 'EndClassStructure' zum deklamieren oder manuellen erstellen von Klassen
- 'Methode' / 'EndMethode' zum einleiten von Methoden in Klassen oder auserhalb
- verwendung von Modifizierer 'Public', 'Private', 'Protected'
- verwendung von Variablen in allen Modifizierer möglich
- 'NewObject' zum erstellen neuer Objekte (Dieses Keyword ist nur eine art Macro. Es dient nicht zur signalisierung von Objekten. Dies geschieht bei der Definition.)
- 'Extends' für Vererbung (auch Mehrfachvererbung)

Was noch dazu kommt / noch verbessert werden muss:
- Verwendung von Include-Dateien
- Spezielle Methoden: '%ClassName%' und '~%ClassName%' für die Erstellung und Freigabe von Objekten
- Fehlerüberprüfung (momentan kann man noch wild Methoden u. Variablen überschreiben)
- Verwendung von 'Fixed' bei Variablen und 'Virtual' bei Methoden (Keywords können schon angegeben werden, haben noch keine auswirkung)
- Methoden können überschrieben werden (wirkt sich auch auf vererbte Klassen aus!)
- Strukturen in Klassen
- Default-Werte von Variablen
- [...]

Den Download gibt es hier (Zip mit Win32-exe u. Beispiele für die OOP Funktionen).

Hier ist ein kleiner Beispielcode (mehr Beispiele gibt es im Zip):

Code: Alles auswählen

EnableExplicit

Class CMessageDialog
  Public
    Methode.l ShowDialog()
      *this\lResult = MessageRequester(*this\sTitle, *this\sText, *this\dwFlags)
      MethodeReturn *this\lResult
    EndMethode
  Public
    sTitle.s
    sText.s
    dwFlags.l
    lResult.l
EndClass


Define *obj.CMessageDialog = NewObject CMessageDialog

*obj\sTitle = "<titel>"
*obj\sText = "Hallo, Welt!"
*obj\dwFlags = 64 ; Info-Meldung

*obj\ShowDialog()

*obj\Free()

End
MfG

leonhard

Verfasst: 10.03.2007 10:03
von DarkDragon
"Methode" und "EndMethode" sind deutsch/denglisch. "Method" bzw. "EndMethod" ist korrekt. Zum Rest kann ich nichts sagen, ich hab keinen Nutzen für einen "OOP PreCompiler".

Verfasst: 10.03.2007 10:10
von Leonhard
Ich hab die Keywords 'Methode' in PureBasic-Form gebracht. So hat es jedenfalls 'Hroudtwolf' aus PureBasic-Lounge geschrieben.

Danke, werd ich ändern.

Verfasst: 10.03.2007 12:08
von ZeHa
Was ist daran PureBasic-Form? PureBasic ist doch auf englisch, also sollten alle Keywords auch englisch sein.

Desweiteren würd ich mir das mit dem Public noch überlegen, entweder so wie in C++ einen Doppelpunkt dahiner machen, damit es wie ein Label aussieht, oder mit Public und EndPublic arbeiten (alles was nicht im Public-Bereich liegt, ist dann private):

Code: Alles auswählen

Class Test
  Public
    Method.l getHallo()
      MethodReturn *this\hallo
    EndMethod

    Method init()
      *this\hallo = 5
    EndMethod
  EndPublic

  hallo.l
EndClass

Verfasst: 10.03.2007 13:58
von Hroudtwolf
Ich hab die Keywords 'Methode' in PureBasic-Form gebracht. So hat es jedenfalls 'Hroudtwolf' aus PureBasic-Lounge geschrieben.
Ganz gewisslich nicht XD.
(Beweis: http://purebasic-lounge.de/viewtopic.php?t=4028&start=0)

Verfasst: 11.03.2007 09:57
von Leonhard
Hroudtwolf hat geschrieben:
Ich hab die Keywords 'Methode' in PureBasic-Form gebracht. So hat es jedenfalls 'Hroudtwolf' aus PureBasic-Lounge geschrieben.
Ganz gewisslich nicht XD.
(Beweis: http://purebasic-lounge.de/viewtopic.php?t=4028&start=0)
:oops: da hab ich wohl irgendwo verlesen.
ZeHa hat geschrieben:Was ist daran PureBasic-Form? PureBasic ist doch auf englisch, also sollten alle Keywords auch englisch sein.

Desweiteren würd ich mir das mit dem Public noch überlegen, entweder so wie in C++ einen Doppelpunkt dahiner machen, damit es wie ein Label aussieht, oder mit Public und EndPublic arbeiten (alles was nicht im Public-Bereich liegt, ist dann private):

Code: Alles auswählen

Class Test
  Public
    Method.l getHallo()
      MethodReturn *this\hallo
    EndMethod

    Method init()
      *this\hallo = 5
    EndMethod
  EndPublic

  hallo.l
EndClass
Ich finde diese Form etwas blöd. Schon wenn man dann noch andere Modifizierer dazunimmt wie z.B. 'Protectet' (was schon funktioniert), 'Global' (für DataSectionen), 'Internal', ..?..
Ich nehm dann noch lieber die C++ -Variante.

Verfasst: 26.03.2007 01:18
von X0r
Nice!!
Bald kann ich C++ durch PB komplett ersetzen.

Aber könntest du es so schreiben, dass man:
Class
{



}

schreiben kann? Also mit den geschweiften Klammern?

Offtopic: Ich weiß jetzt zwar nicht, wie diese precompiler funktionieren, aber ist möglich, bei if/method etc. auch solche geschweiften Klammern einzubauen?

Verfasst: 26.03.2007 01:38
von ts-soft
@Forge
Weiß Du überhaupt das bei 10 Fingerschreibern, Zeichen die nur über AltGr
erreichbar sind, diese geschweifte Klammern kaum schreiben können?

Wer mit Adlersuchsystem arbeitet, aber dt. Maschinenschreiber mögen keine
geschweiften Klammern. Da muß ich die Finger von der Tastatur nehmen,
suchen, in der Zeit hätte ich mind. 3 Zeilen anderen Code getippt :mrgreen:

Verfasst: 26.03.2007 01:43
von X0r
Nagut, dann halt:
Könntest du für mich eine Spezialanfertigung machen, Leonhard?
Wäre nett.

Verfasst: 26.03.2007 07:20
von Leonhard
Forge hat geschrieben:Nagut, dann halt:
Könntest du für mich eine Spezialanfertigung machen, Leonhard?
Wäre nett.
Ich möchte in meinen PreCompiler auch eine neue Art von Macros einbauen. Damit wird dies dann auch möglich sein.