Boardunity & Video Forum

Boardunity & Video Forum (https://boardunity.de/)
-   Programmierung und Datenbanken (https://boardunity.de/programmierung-datenbanken-f23.html)
-   -   PHP4 / Tokenizer Funktionen (https://boardunity.de/php4-tokenizer-funktionen-t1464.html)

exe 28.02.2004 13:22

PHP4 / Tokenizer Funktionen
 
Moin,

ich schlage mich gerade mit den Tokenizer Funktionen von PHP rum. Das Funktioniert prinzipiell auch recht gut. Nur taucht bei mir nun folgendes Problem auf: nachdem ich via token_get_all() eine Liste aller Token in einem PHP Sourcefile erstellt habe möchte ich diese durchgehen, ein paar der Token bearbeiten und eine Ausgabe des Sourcecodes mit farbig hervorgehobenen Token erstellen, also praktisch ein gewöhnliches Syntaxhighlighting. Das Problem ist jetzt das alle Token, die keine Schlüsselwörter oder Operatoren sind, als T_STRING deklariert werden. Das heisst mein Syntaxhighlighter stellt Funktionsnamen, Konstanten, Objekteigenschaften und variable Strings gemeinsam in der Stringfarbe dar, was nicht Sinn der Sache sein kann.
Meine Frage ist nun was ich falsch gemacht haben könnte denn ich kann mir nicht vorstellen das dies das normale Verhalten der token_get_all() Funktion ist, zumal beispielsweise für Konstanten eine eigene Definition (T_CONST) besteht.
Ich benutze PHP 4.3.3 als mod_php unter Apache 1.3.29 und Debian Linux 3.0/unstable.

Michael Przybyla 28.02.2004 14:00

Dieses Verhalten ist absolut gerechtfertigt.

Es heisst ja "Parser Tokens" frei übersetzt also "Syntax Merkmale/Zeichen".

Und "function tralala() {}" ist ja kein Merkmal, denn allein das Wort "function" ist ja ein Merkmal bzw. ein Hinweis damit der Parser weiss, was er als nächstes zu tun hat.

Wenn du beispielsweise den Funktionsnamen haben willst, dann könntest du ja mit next(), prev() usw. arbeiten und somit den Funktionsnamen anhand des Indexes ermitteln, denn dieser verbirgt sich meist 2 "Steinwürfe" weit von diesem entfernt.

Nebenbei: Editoren mit Syntax highlighting arbeiten genauso.
Und mit "const" ist nicht das hier gemeint
-> "define('WHAT', 'nana', true)"
sondern dies hier
-> function tralala() { const $i; }

exe 28.02.2004 14:05

Schade, ich dachte Dinge wie Funktionsnamen und Konstanten würden gesondert gekennzeichnet werden.
Naja, dann muss ich eben, wie du schon sagtest, ein paar Routinen schreiben die prüfen ob ein String ein Textstring, Funktionsname oder was auch immer ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:24 Uhr.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25