Mehrzeilige Anweisungen

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
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 »

Mir fehlt aber die Unterstützung von Include-Dateien!
MultiLine on darf mehrfach vorkommen
Unterscheidung von MultiLine = je IncludeFile

Ich will Dich nicht beschäftigen und ich weiß das dies nicht so einfach ist, aber
ohne Includes kann ich das Feature nur in der Main.pb nutzen :(

Gruß
Thomas
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
Little John

Beitrag von Little John »

ts-soft hat geschrieben:Mir fehlt aber die Unterstützung von Include-Dateien!
MultiLine on darf mehrfach vorkommen
Unterscheidung von MultiLine = je IncludeFile

Ich will Dich nicht beschäftigen und ich weiß das dies nicht so einfach ist, aber
ohne Includes kann ich das Feature nur in der Main.pb nutzen :(
Ich verstehe. Ist schon klar, dass das keine Beschäftigungstherapie ist. :)
So wie ich die "MultiLine"-Direktive im Moment implementiert habe, hat es den Vorteil, dass, wenn sie fehlt, der Preprocessor gleich beendet werden kann. Ansonsten müsste er evtl. tausende von Zeilen lesen und in die temporäre Datei schreiben, auch wenn es im betr. Quelltext gar keine Zeilen zu verbinden gibt. Ich habe aber an Include-Dateien leider nicht gedacht. :(

Das heißt (bitte korrigiere mich, wenn ich mich irre) entweder gibt es nur 1 "MultiLine"-Direktive in der Hauptdatei, die sich auch auf alle "includierten" Dateien auswirkt, oder andernfalls -- so wie Du es vorschlägst -- muss der Präprozessor immer den ganzen Quelltext durchgehen. In dem Fall kann man sich die Direktive

Code: Alles auswählen

MultiLine on
eigentlich auch sparen, d.h. auch wenn gar nichts angegeben ist, kann/sollte _ als Zeilenverbindungszeichen betrachtet werden, oder?

Gruß, Little John
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 »

MultiLine On braucht nur in der Main ausgewertet werden, wenn nein, dann
beenden, wie bisher, sonst kostet es unnütz Zeit.

MultiLine = \ o.ä. sollte zusätzlich je Include ausgewertet werden. Also
Include A kann \ verwenden, Include B _ usw.

MultiLine bleibt also solange gültig, bis Ende oder es trifft auf neues MultiLine
in neuer Include. Also nur ein MultiLine = je Include möglich.

Gruß
Thomas
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
Little John

Beitrag von Little John »

ts-soft hat geschrieben:MultiLine On braucht nur in der Main ausgewertet werden, wenn nein, dann
beenden, wie bisher, sonst kostet es unnütz Zeit.

MultiLine = \ o.ä. sollte zusätzlich je Include ausgewertet werden. Also
Include A kann \ verwenden, Include B _ usw.

MultiLine bleibt also solange gültig, bis Ende oder es trifft auf neues MultiLine
in neuer Include. Also nur ein MultiLine = je Include möglich.
Ich habe meine private Kopie des Programms angepasst (den Quelltext hier im Forum noch nicht). Die Multiline-Direktive muss weiterhin die erste Anweisung im Programm sein, ansonsten beendet sich der Preprozessor sofort. Neu ist, dass jetzt beliebig viele Multiline-Direktiven im Programm vorkommen können.

Das Problem ist, dass die PureBasic-IDE mir aber trotzdem Syntax-Fehler in Include-Dateien meldet. Wenn ich den Inhalt der Include-Dateien jedoch an die betr. Stelle im Hauptprogramm kopiere, funktioniert alles wie erwartet. D.h. offenbar prüft die IDE die Include-Dateien, bevor mein Preprozessor sie verändert. :(
Der Preprozessor bekommt ja als Argument "%COMPILEFILE" übergeben. Ich hatte angenommen, dass sei der gesamte Programmcode, der auch alle Include-Dateien enthält. Dem ist offenbar nicht so,

Jetzt weiß ich nicht, wie ich vorgehen soll. Ich könnte den Preprozessor so ändern, dass er selbst rekursiv alle Include-Dateien liest. Aber was ist z.B., wenn er dann eine Include-Datei ändert, die gerade in der IDE geöffnet ist?
Das gute an "%COMPILEFILE" ist ja, dass es eine temporäre Datei ist, deren Änderung sich daher nicht auf die in der IDE geöffnete Datei auswirkt. Vielleicht ginge es, wenn der Preprozessor die Include-Dateien vor dem Ändern auch in temporäre Dateien kopiert, aber findet PureBasic diese Dateien dann, um sie kompilieren zu können?

Gruß, Little John
Little John

Beitrag von Little John »

Ich habe das Programm mal wiederbelebt -- jetzt mit deutlich mehr Erfahrung in PB ;-) -- und ein klein wenig verbessert. Der Code ist jetzt nur noch im englischen Forum zu finden.
Wenn alles so läuft wie geplant, kann die nächste Programm-Version dann auch endlich Include-Dateien verarbeiten! :-)

Gruß, Little John
Little John

Beitrag von Little John »

ts-soft hat geschrieben:MultiLine On braucht nur in der Main ausgewertet werden, wenn nein, dann
beenden, wie bisher, sonst kostet es unnütz Zeit.

MultiLine = \ o.ä. sollte zusätzlich je Include ausgewertet werden. Also
Include A kann \ verwenden, Include B _ usw.

MultiLine bleibt also solange gültig, bis Ende oder es trifft auf neues MultiLine
in neuer Include. Also nur ein MultiLine = je Include möglich.

Gruß
Thomas
Dein Wunsch ist mir Befehl.
(Wenn auch mit einer "kleinen" Verspätung.) :D
siehe Link im vorangehenden Posting.

Gruß, Little John
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 »

Little John hat geschrieben:(Wenn auch mit einer "kleinen" Verspätung.)
Weißt Du wie Alt ich inzwischen geworden bin :mrgreen:

:allright:
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
Little John

Beitrag von Little John »

Reicher an Erfahrung bestimmt, aber alt? ... Det gloob ick nich. ;-)

Gruß, Little John
Little John

Beitrag von Little John »

Neue Version 0.50

- Die verarbeiteten Include-Dateien werden nicht mehr in eine einzige Datei geschrieben.
So kann die IDE bei einem Syntaxfehler nun die richtige Zeile anzeigen, in der sich der Fehler befindet.
- Einige Bugs beseitigt.

Der Code ist wie immer im engl. Forum.

Gruß, Little John
Andesdaf
Moderator
Beiträge: 2672
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

danke! :allright:
Win11 x64 | PB 6.20
Antworten