OOP PreCompiler 0.9.01 Beta

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
Leonhard
Beiträge: 602
Registriert: 01.03.2006 21:25

OOP PreCompiler 0.9.01 Beta

Beitrag 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
Zuletzt geändert von Leonhard am 31.07.2018 14:23, insgesamt 1-mal geändert.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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".
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Leonhard
Beiträge: 602
Registriert: 01.03.2006 21:25

Beitrag von Leonhard »

Ich hab die Keywords 'Methode' in PureBasic-Form gebracht. So hat es jedenfalls 'Hroudtwolf' aus PureBasic-Lounge geschrieben.

Danke, werd ich ändern.
Zuletzt geändert von Leonhard am 31.07.2018 12:07, insgesamt 1-mal geändert.
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag 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
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Beitrag 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)
Benutzeravatar
Leonhard
Beiträge: 602
Registriert: 01.03.2006 21:25

Beitrag 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.
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

Beitrag 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?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

Beitrag von X0r »

Nagut, dann halt:
Könntest du für mich eine Spezialanfertigung machen, Leonhard?
Wäre nett.
Benutzeravatar
Leonhard
Beiträge: 602
Registriert: 01.03.2006 21:25

Beitrag 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.
Antworten