Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

advanced parsovanje PHP koda

[es] :: PHP :: advanced parsovanje PHP koda

[ Pregleda: 1690 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

zgas

Član broj: 74613
Poruke: 334
*.ptt.rs.

Sajt: odbrojavanje.com


Profil

icon advanced parsovanje PHP koda06.10.2008. u 20:14 - pre 189 meseci
Potrebno mi da programiram jedanu veoma korisnu PHP klasu koja bi istrazivala kod-ove - strukture drugih php klasa.
Posto ne postoje funkcije za ovu namenu u samom PHp-u, moram napraviti pomenutu kalsu.

Osnove ovog alata:
Poznato je da u metodama vecine klasa postoji pozivanje metoda iz iste klase.
Imam veliku potrebu da automatski dobijem izvestaj o tome, koje metode klase pozivaju u sebi druge metode iste klase.
Kao sto znamo, metode to rade uglavnom na "$this->" ili "self::" nacin.

Primer:
Code:

class Klasa
{
    protected static function metod1()
    {
    }

    protected static function metod2()
    {
    }

    protected static function metod3()
   {
       self::metod1();
       self::metod2();   
   }
}


Najuprosceniji tip izvestaja bi mogao biti ovakav:
Code:

array(
        'metod1' => array()
        'metod2' => array()
        'metod3' => array('metod1', 'metod2')
       )


Da li mozete da mi pomognete, na koji nacin mogu izvrsiti parsovanje koda. Vrlo slabo baratam sa regularnim izrazima koji bi se ovde, pretpostavljam koristili.

Za uspesan rad potebno je da se rese 3 kljucna problema:

1. Prvo je potrebno da klasa detektuje imena svih metoda koje klasa koja se istrazuje ima.
2. Pri citanju svake linije koda, detektovati da li se citac nalazi u nekoj metodi, i kojoj.
3. Pri citanju svake linije koda, detektovati da li postoji u njoj pozivanje nekog metoda, i kojeg.

Molim vas ako mozete pomoci u ova tri priblema narocitu u 2. i 3.

Mnogo vam hvala.

Aukcije, www.Odbrojavanje.com
Aukcija može biti osvojena jeftino - za 30 sekundi a 6 dinara!
 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 569
200.49.157.*

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: advanced parsovanje PHP koda06.10.2008. u 21:14 - pre 189 meseci
Ne treba nista da razvijas. Php 5 vec sve to ima

http://www.php.net/oop5.reflection


Citat:
PHP 5 comes with a complete reflection API that adds the ability to reverse-engineer classes, interfaces, functions and methods as well as extensions. Additionally, the reflection API also offers ways of retrieving doc comments for functions, classes and methods.

The reflection API is an object-oriented extension to the Zend Engine,

Tko leti vrijedi
 
Odgovor na temu

zgas

Član broj: 74613
Poruke: 334
*.ptt.yu.

Sajt: odbrojavanje.com


Profil

icon Re: advanced parsovanje PHP koda07.10.2008. u 09:16 - pre 189 meseci
Mnogo hvala Darko.

Reflection mi resava problem 1. i 2., ali ne vidim da resava problem 3.
To jest kako da saznam koji metod poziva u sebi druge metode (i koji su to.)?
Znaci kako da mi kaze da "metod3" u sebi poziva "self::metod1" i "self::metod2"?

Evo spiska funkcija koje ima Reflection za metod klase.
U spisku ne vidim nesto sto bi mi resilo ovaj problem. Da li gresim?

Code:

    public void __construct(mixed class, string name)
    public string __toString()
    public static string export(mixed class, string name, bool return)
    public mixed invoke(stdclass object [, mixed args [, ...]])
    public mixed invokeArgs(stdclass object, array args)
    public bool isFinal()
    public bool isAbstract()
    public bool isPublic()
    public bool isPrivate()
    public bool isProtected()
    public bool isStatic()
    public bool isConstructor()
    public bool isDestructor()
    public int getModifiers()
    public mixed getClosure() /* As of PHP 5.3.0 */
    public ReflectionClass getDeclaringClass()

    // Inherited from ReflectionFunctionAbstract
    final private __clone()
    public string getName()
    public bool isInternal()
    public bool isUserDefined()
    public string getFileName()
    public int getStartLine()
    public int getEndLine()
    public string getDocComment()
    public array getStaticVariables()
    public bool returnsReference()
    public ReflectionParameter[] getParameters()
    public int getNumberOfParameters()
    public int getNumberOfRequiredParameters()


[Ovu poruku je menjao zgas dana 07.10.2008. u 10:51 GMT+1]
Aukcije, www.Odbrojavanje.com
Aukcija može biti osvojena jeftino - za 30 sekundi a 6 dinara!
 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 569
200.49.157.*

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: advanced parsovanje PHP koda07.10.2008. u 20:46 - pre 189 meseci
OK, u pravu si. Taj deo moras sam da razvijes i to vec spada u domen staticke analize koda sto je veoma daleko od trivijalnog.

Par linkova:

http://www.manuel-pichler.de/pages/pdepend.html
http://pixybox.seclab.tuwien.ac.at/pixy/
http://ocportal.com/site/pg/downloads/entry/7?keep_has_js=1
http://pmd.sourceforge.net/cpd.html
Tko leti vrijedi
 
Odgovor na temu

[es] :: PHP :: advanced parsovanje PHP koda

[ Pregleda: 1690 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.