Toon posts:

[PHP] Comments verwijderen?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zit even wat scripts door te kijken van anderen, maar ik merk dat veel programmeurs de rare afwijking te hebben 5x meer comments te schrijven dan source code. Vandaar dat ik een programma/functie zoek waarmee ik comments kan verwijderen uit een PHP script. In PHP dus de drie mogelijkheden om commentaar te plaatsen (#, //, /* */) en het liefst niet de strings door te lopen op de tekens.

Verwijderd

waarom zou je commentaar willen verwijderen, ik vind het juist handig als je een lap code van iemand anders heb, om de comments erbij te hebben.

Verwijderd

Topicstarter
En ik kan vaak sneller PHP code lezen dan boekwerken met commentaar. Ik vind commentaar ook handig, maar soms is het zo slecht/veel dat het gewoon niet hoeft.

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Hoe kan een programma nou bepalen welk commentaar wel nuttig is en welke niet. Want bedenk wel, beter teveel dan te weinig :)

  • J3roen
  • Registratie: Januari 2000
  • Niet online

J3roen

Intentionally left blank

Als je zo goed bent in PHP, dan is het toch gemakkelijk om een scriptje te maken die dat voor je doet? })

Verwijderd

Topicstarter
CRiSiS schreef op 13 september 2002 @ 19:03:
Als je zo goed bent in PHP, dan is het toch gemakkelijk om een scriptje te maken die dat voor je doet? })
Klopt, maar ik ga ook niet mijn eigen Photoshop schrijven oid ;).

Verwijderd

er zijn geloof ik wel leuke edittors waarmee je commentaar kunt wegklappen ( dat laat hij dan nie zien, maar wel dat daar commentaar stond)
had laats 1 gezien die dat deed maar weet de naam nie..........

  • Rotjeknor
  • Registratie: April 2001
  • Laatst online: 03-02 15:29
Verwijderd schreef op 13 september 2002 @ 20:09:
er zijn geloof ik wel leuke edittors waarmee je commentaar kunt wegklappen ( dat laat hij dan nie zien, maar wel dat daar commentaar stond)
had laats 1 gezien die dat deed maar weet de naam nie..........
Je kan met UltraEdit een of meerdere delen in een file laten hiden.

Ook Knor is aangestoken met het ligfietsvirus!


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 23:52
Je zou 'm door de C preprocessor kunnen halen, om alle C/C++ style commentaar eruit te strippen. Misschie niet 100% fail safe, maar het komt wel in de buurt.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
De meeste grammatica's voor programmeertalen beschouwen commentaar als een soort layout en nemen het dus niet op in de abstract syntax tree die wordt geproduceerd na het parsen van een stuk code.

Je kan dus gewoon op zoek gaan naar een grammatica voor PHP en liefst daarbij dan ook nog een pretty-printer voor PHP die aansluit bij deze grammatica. Het verwijderen van comments komt dan simpelweg neer op het parsen van de code gevolgd door het pretty-printen van de code.

Alle andere oplossingen zijn al snel ad-hoc omdat je voor een degelijke verwijdering van commentaar toch echt een degelijke grammatica nodig hebt. Reguliere expressies zijn heel leuk, maar ongeschikt voor het parsen van volledige programmeertalen.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Het hoeft toch niet zo moeilijk?? Het commentaar is erg simpel te vinden.
van # tot \n, van // to \n en van /* tot */. Het enige vervelende is dat je strings in je source moet negeren :)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 23:52
Janoz schreef op 14 september 2002 @ 00:07:
Het hoeft toch niet zo moeilijk?? Het commentaar is erg simpel te vinden.
van # tot \n, van // to \n en van /* tot */. Het enige vervelende is dat je strings in je source moet negeren :)
In het geval van PHP moet je ook nog commentaar-achtige tekst in het niet-PHP deel negeren. Daarbij kunnen PHP closing tags ook weer in strings zitten. Al met al is het dus niet zo eenvoudig om het helemaal goed te doen.

Als je je origenele code bewaart, is die methode waarschijnlijk wel afdoende (en dan zou ik niet zelf iets schrijven maar de C preprocessor pakken), maar ik zou het niet zomaar durven toepassen op kritieke files.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Janoz: Het enige vervelende is dat je strings in je source moet negeren :)
Juist :+ .

Er zijn echter nog veel meer complicaties.

Commentaar scheidt bijvoorbeeld tokens. Als je dus het volgende hebt:
code:
1
int/* */i;

en je haalt domweg /* */ weg, heb je een probleem. De code was correct, nu niet meer.

Verder is commentaar niet toegestaan in alle andere literals:
code:
1
float f = 1./** */0

Is bijvoorbeeld incorrect. Als je /* */ domweg weg haalt is de code plotseling correct.

Verder mag commentaar over het algemeen niet genest zijn. Dit moet je dus afwijzen:
code:
1
/* /* */ */


Verder moet je nog opletten dat je een */ in een literal niet per ongelijk voor een afsluitend commentaar aanziet (het gaat dus niet alleen om commentaar in een literal.

Al deze complicaties gelden ook voor de // (en nog meer ;) )

Je kan al deze zaken af gaan proberen te vangen, maar gegarandeerd dat je iets vergeet. Je tooltje werkt dan misschien voor code die jij verwacht, maar verder is het tooltje niet erg veel waard. Aangezien er toch al smakken grammatica's en pretty-printers zijn, kan je dan beter gelijk een degelijke oplossing kiezen. Het kost waarschijnlijk nog minder tijd dan gepruts met pattern matching.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Zie je het nog zitten om comments te gaan verwijderen? :*)

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Hum ... Ik voel me schuldig ;) . Waarom wil je het niet meer proberen? Proberen kan natuurlijk nooit kwaad en is vast heel leerzaam :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Het ligt niet aan jou hoor ;). Het was handig geweest wanneer zoiets er al was, maar verder wil ik gewoon verder werken aan mijn eigen project.

  • sjokki
  • Registratie: Juli 2002
  • Niet online
Met de functie token_get_all is dit makkelijk te doen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
// splits de source in tokens 
$tokens = token_get_all($source);

// ga alle tokens langs
// voeg toe aan nieuwe source als het geen comment is
$newsource = "";
for ($k = 0; $k < count($tokens); $k++){
    if (!is_array($tokens[$k])){
        $newsource .= $tokens[$k];
    } elseif ($tokens[$k][0] != T_COMMENT){
        $newsource .= $tokens[$k][1];
    }
}

  • MiezeL
  • Registratie: Augustus 2002
  • Laatst online: 08-04 08:40
ja das slim..... ipv uitgaan dat je de comments eruit haalt gewoon de source eruit pikken.... nais bed8 sjokkie. wat kan logishc denken toch gaar zijn...

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Het maakt niet zo heel erg verschil of je nu de comments eruit vist of de code, wat wel een belangrijk verschil maakt is dat er kennelijk een standaard lexical analyzer (tokenizer) voor PHP in PHP zit. Dit lost veel problemen op, maar niet alles :*)

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • MiezeL
  • Registratie: Augustus 2002
  • Laatst online: 08-04 08:40
hmm lijkt mij wel dat het uitmaakt aangezien je anders weer gezeur krijgt met of het nu code of comment is right?

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
MiezeL: hmm lijkt mij wel dat het uitmaakt aangezien je anders weer gezeur krijgt met of het nu code of comment is right?
Of je nu code uit code+commentaar vist of commentaar uit code+commentaar verwijderd: er zal sowieso bepaald moeten worden of iets commentaar of code is. Dit wordt in de oplossing met de tokenizer bepaald door deze tokenizer.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • MiezeL
  • Registratie: Augustus 2002
  • Laatst online: 08-04 08:40
yup. DUS maakt het wel uit welke methode je kiest, toch?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:01

.oisyn

Moderator Devschuur®

Demotivational Speaker

MiezeL schreef op 16 september 2002 @ 02:10:
yup. DUS maakt het wel uit welke methode je kiest, toch?


het concept 'ergens iets uit verwijderen' betekent over het algemeen 'een kopie aanmaken waarin alleen datgene staat wat je niet wilde verwijderen'

Maak jij maar eens een simpele routine in php die alle a's uit een string haalt. Het resultaat is een kopie ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • MiezeL
  • Registratie: Augustus 2002
  • Laatst online: 08-04 08:40
jah mijn idee. maar daar kwam sjokkie dus mee. daarvoor ging het allemaal nog over eruit slopen ipv eruit rippen. Maare ik ga mezelf niet langer verdedigen:P Neem mijn fort maar lol. kruip ook meteen lekker in mijn eigen Fort. NN all
Pagina: 1