Toon posts:

[PHP] parsen van php code in php zelf

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi,

Heeft er iemand enig idee hoe je een parser opzet in php die php-code zelf kan parsen ?
Het zou al helemaal mooi zijn als het ook nog eens de inhoud van multiline quoted strings (SQL of waarden) in de code intact zou laten.

Alle hulp is welkom, thanx in advance,

Shortwire.

input:
----8<--------------8<----------
$myVar="SELECT
myFieldA,
myFieldB
from MyTable where MyFieldA like \'%ik%\'
;";
----8<--------------8<----------
class MyClassMyFunc {
function MyClassMyFunc($myInp){
return ($myInp++);
}
}

----8<--------------8<----------
output is minimaal:
----8<--------------8<----------
var: $myVar
class: MyClassMyFunc
function: MyClassMyFunc($myInp)
return($myInp++);

----8<--------------8<----------


_/-\o_ _/-\o_ _/-\o_ _/-\o_ _/-\o_ _/-\o_ _/-\o_

Acties:
  • 0 Henk 'm!

  • TheRebell
  • Registratie: Oktober 2000
  • Nu online
en wat heb je zelf al geprobeerd dan????

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op dinsdag 06 september 2005 @ 23:13:
Hoi,

Heeft er iemand enig idee hoe je een parser opzet in php die php-code zelf kan parsen ?
Vies doen met eval() :?
Waarom zou je dat willen?

offtopic:
en wat is die "code" onderaan je post, door die vage tekentjes is het niet duideljik, zou je de code tussen [php]-tags willen zetten :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
TheRebell schreef op dinsdag 06 september 2005 @ 23:16:
en wat heb je zelf al geprobeerd dan????
ik ben al met preg_split en match begonnen omdat ik uit de perl community kom.
maar ik hoopte eigenlijk dat er al iemand me voor was geweest/een geneiek parservoorbeeld kon aangeven. :)

T4repl.

ShorWire

Acties:
  • 0 Henk 'm!

  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 23-07 18:19
weet je wel waar je aan begint?
iedere code kan op die manier naar de server gestuurd worden?
(als we het over eval enzo hebben...)

Kun je niet een of andere UBB achtige parser maken, dat lijkt mij iig veiliger enzo

[ Voor 41% gewijzigd door SWINX op 06-09-2005 23:23 ]

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Erkens schreef op dinsdag 06 september 2005 @ 23:17:
[...]

Vies doen met eval() :?
Waarom zou je dat willen?
omdat ik een project heb met ~400 classes die ik moet evalueren :)
offtopic:
en wat is die "code" onderaan je post, door die vage tekentjes is het niet duideljik, zou je de code tussen [php]-tags willen zetten :)
Bah... Tags :) Larry Wall had het door... een goed rapport is vaak beter dan een mooie site :P

Just Kidding

[ Voor 4% gewijzigd door Verwijderd op 06-09-2005 23:23 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Tsja, je kan een aantal regular expressions gebruiken, maar dat is niet echt helemaal betrouwbaar in dit geval (vanwege nesten van accolades en dergelijke). Om die code een beetje betrouwbaar te kunnen evalueren denk ik al snel aan een stack based parser.

Overigens suggereert je topictitel nogal dat je de code wil parsen, terwijl je hem eigenlijk alleen maar wil analyseren als ik je goed begrijp? :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 23-07 18:19
Ben je toevallig niet op zoek naar reflection?
http://nl3.php.net/manual/en/language.oop5.reflection.php

[ Voor 81% gewijzigd door SWINX op 06-09-2005 23:48 ]

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt


Acties:
  • 0 Henk 'm!

  • Gwaihir
  • Registratie: December 2002
  • Niet online
Er is ook een PHP IDE / debugger geschreven in PHP (of wellicht meer dan een). Ik denk dat je daar eens je licht op moet gaan steken. Scheelt het opnieuw uitvinden van hetzelfde wiel.

Acties:
  • 0 Henk 'm!

  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 22-09 10:35

Knutselsmurf

LED's make things better

SWINX schreef op dinsdag 06 september 2005 @ 23:22:
weet je wel waar je aan begint?
iedere code kan op die manier naar de server gestuurd worden?
(als we het over eval enzo hebben...)

Kun je niet een of andere UBB achtige parser maken, dat lijkt mij iig veiliger enzo
Ik heb hier zelf ook ooit mee lopen spelen. Ik moest een soort filters maken om code uit een CSV-bestand te pre-processen zodat deze in een database gedumpt kon worden. Deze filters zijn gewoon php-code en worden met eval() uitgevoerd. Om dit toch enigszins veilig te houden, worden vooraf de filters gecontroleerd. Met token_get_all() trek ik de hele boel uit elkaar en kijk ik of er bepaalde functies worden aangeroepen. Als dat niet het geval is, wordt het filter goedgekeurd.

- This line is intentionally left blank -


Acties:
  • 0 Henk 'm!

  • erkje
  • Registratie: Oktober 2001
  • Laatst online: 12-06-2024
'Vroeger' (een kleine twee jaar terug) heb ik een parser geschreven in Java, voor de EBNF notatie (opdracht op de VU). Een parser voor PHP lijkt me een stukje meer werk maar wel een uitdaging.

Deze parser werkte zo, en ik zal het maar een beetje toepassen op PHP (en of het de meest efficiënte manier is laat ik dan maar in het middne): elk karakter werd achtereenvolgens ingelezen. Kom je een $ tegen dan gaat het om een variabele, dus lees je de daarachterkomende karakters ook in om je variabelenaam te ontdekken. Spaties sla je over, die hebben niet zoveel effect. Kom je twee // tegen dan drop je de hele regel. Kom je een " tegen, dan lees je totdat je nog een " tegenkomt want dat is een string.
Om het overzichtelijk te maken kun je het zo doen: als je een " tegenkomt, roep je een functie aan die doorleest tot aan de volgende ". Je laat deze functie dan ook de \n-etjes bewaren in de string. Losse \n's hoef je namelijk niet te bewaren

't is een beginnetje, kijk maar wat je'r aan hebt ;)

taste and see that the Lord is good


Acties:
  • 0 Henk 'm!

  • DPLuS
  • Registratie: April 2000
  • Niet online

DPLuS

 

Je zou het boek van Niklaus Wirth kunnen lezen: Compilerbouw.

ISBN: 90 6233 234 X

http://www.vanpiere.nl/sa...00128830_1_10090000000010

[ Voor 38% gewijzigd door DPLuS op 07-09-2005 12:46 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
-NMe- schreef op dinsdag 06 september 2005 @ 23:46:
Tsja, je kan een aantal regular expressions gebruiken, maar dat is niet echt helemaal betrouwbaar in dit geval (vanwege nesten van accolades en dergelijke). Om die code een beetje betrouwbaar te kunnen evalueren denk ik al snel aan een stack based parser.

Overigens suggereert je topictitel nogal dat je de code wil parsen, terwijl je hem eigenlijk alleen maar wil analyseren als ik je goed begrijp? :)
Laat ik het zo zeggen. Ik moet een project gaan starten dat een verandering in de code gaat doorvoeren :)

Beter ?

  • Pino
  • Registratie: Oktober 2001
  • Laatst online: 22-09 10:50
Verwijderd schreef op woensdag 07 september 2005 @ 12:54:
[...]


Laat ik het zo zeggen. Ik moet een project gaan starten dat een verandering in de code gaat doorvoeren :)

Beter ?
Maar waarom "misbruik" je daar dan PHP voor en gebruik je geen beter geschikte taal?

"If you don't know where you are going, any road will take you there"


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Waarom zou PHP minder geschikt zijn dan elke andere taal?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 18-09 18:27

pjvandesande

GC.Collect(head);

Is het de bedoeling dat dit webbased gebeurt, lijkt me niet echt een webbased activiteit.
-NMe- schreef op donderdag 08 september 2005 @ 14:43:
Waarom zou PHP minder geschikt zijn dan elke andere taal?
PHP is een weak type scripttaal, dat zegt toch genoeg ;)

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

questa schreef op donderdag 08 september 2005 @ 15:01:
PHP is een weak type scripttaal, dat zegt toch genoeg ;)
nee, dat zegt niet genoeg, waarom zou een "weak type" taal hiervoor niet geschikt zijn :?

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 18-09 18:27

pjvandesande

GC.Collect(head);

Erkens schreef op donderdag 08 september 2005 @ 15:05:
[...]

nee, dat zegt niet genoeg, waarom zou een "weak type" taal hiervoor niet geschikt zijn :?
Het ging mij om het woordje script eigenlijk.

  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

questa schreef op donderdag 08 september 2005 @ 15:06:
[...]


Het ging mij om het woordje script eigenlijk.
De implementatie van een taal hoeft op zich toch geen beperkingen op te leggen aan de functionaliteit.

Systeem | Strava


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

questa schreef op donderdag 08 september 2005 @ 15:06:
Het ging mij om het woordje script eigenlijk.
dan nog blijft mijn vraag staan :Y)

offtopic:
en wat is het nu om dat "weak-type" erbij te halen :?

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

questa:
Het ging mij om het woordje script eigenlijk.
Laten we die discussie alsjeblieft niet gaan voeren 8)7


Het enige wat de topicstarter nodig heeft (imo) is wat zoektermen, want je kunt in PHP een heel eind komen. Wat je vooral nodig hebt is een tokenizer. Die kun je schrijven op de manier die erkje omschrijft. Je kunt ook code genereren mbv. flex, lex, bison, yacc, dat soort meuk.

Ga eens op onderzoek uit en vertel wat je gevonden hebt :Y)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Kijk eens naar de PHP tokenizer extension, zou ik zeggen. Die kan PHP scripts parsen en levert dan tokens af waar je weer mee verder zou kunnen werken. http://php.net/token_get_all

[ Voor 11% gewijzigd door PrisonerOfPain op 08-09-2005 16:05 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 16:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

Euh, een tokenizer parst juist niet, dat doet de parser aan de hand van de tokens ;)

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.

Pagina: 1