82 votes

Tout décent analyseur PHP écrit en PHP ?

Je fais beaucoup de travail, la manipulation et l'analyse de code PHP. Normalement je viens d'utiliser le générateur de jetons pour ce faire. Pour la plupart des applications, c'est suffisant. Mais parfois, l'analyse à l'aide d'un analyseur lexical n'est tout simplement pas assez fiables (bien évidemment).

Donc je suis à la recherche pour certains analyseur PHP, écrit en PHP. J'ai trouvé fortunés/PhpParser et kumatch/machiniste-php-analyseur. Les deux sont créés par une conversion automatique de zend_language_parser.y pour un .y fichier avec PHP au lieu de C (et ensuite compilé en un LALR(1) analyseur). Mais cette conversion automatisée juste ne peut pas être travaillé.

Donc, est-il décent de l'analyseur PHP, écrit en PHP? (J'en ai besoin pour PHP 5.2 et un pour la 5.3. Mais seulement l'un d'eux serait un bon point de départ, aussi.)

133voto

NikiC Points 47270

Après pas complet et stable de l'analyseur a été trouvé ici, j'ai décidé d'en écrire un moi-même. Voici le résultat:

PHP-Analyseur: UN analyseur PHP, écrit en PHP

L'analyseur définit un complet et testé PHP 5.5 grammaire, mais est également compatible avec PHP 5.4, 5.3 et 5.2. (Pour plus d'informations, voir le "Que peut-il analyser?" de l' Introduction.)

En dehors de l'analyseur lui-même la bibliothèque fournit certains des éléments liés:

  • La Compilation de l'AST à PHP ("pretty printing")
  • L'Infrastructure pour la traversée et l'évolution de l'AST
  • La sérialisation et de XML (ainsi que les pratiques de dumping dans une forme lisible par l'homme)
  • Résolution des espaces de noms (alias etc.)

Pour une utilisation vue d'ensemble voir "Utilisation de composants de base" de la section de la documentation.

10voto

Charles Points 33585

Cela ne va pas être une bonne option pour vous, car elle viole le pur-PHP contrainte, mais:

Il y a un moment, le php internals les gens ont décidé qu'ils allaient passer à de Citron que leur analyse de la technologie. Il y a une branche dans le PHP repo svn qui contient les modifications nécessaires.

Ils ont décidé de ne pas continuer avec cette, ils ont constaté que leurs Citron solution est d'environ 10-15% plus lent. Mais, la branche est toujours là.

Il y a un plus vieux Citron analyseur écrit comme une extension PHP. Vous pourriez être en mesure de travailler avec elle. Il y a aussi ce paquet PEAR. Il y a aussi cette autre citron paquet (par l'intermédiaire de ce blog à propos de PGN).

Bien sûr, même si vous obtenez le travail, je ne suis pas sûr de ce que vous souhaitez faire avec les données, ou ce que les données ressemble même.

Un autre farfelu option serait de jeter un oeil à Quercus, PHP, mise en œuvre en Java. Ils ont écrit un analyseur, peut-être il pourrait être intéressant de faire une enquête.

7voto

naderman Points 687

Les paramètres de l'outil de PHP depend contient du code pour générer un AST à partir de PHP source écrite entièrement en PHP. Il ne faire usage de PHP propres token_get_all pour la segmentation en unités toutefois.

Le code source est disponible sur github: https://github.com/manuelpichler/pdepend/tree/master/src/main/php/PHP/Depend

La mise en œuvre de l'AST pour quelques pièces, comme les expressions mathématiques n'était pas encore terminé dernière, j'ai vérifié, mais selon son auteur, c'est le but.

3voto

Ira Baxter Points 48153

Eh bien, ce n'est pas en PHP, désolé, mais la construction de ce type de machines est dur, et PHP n'est pas particulièrement adapté à la tâche de traitement de la langue.

Notre PHP Front-End , il fournit un ensemble complet de PHP 4.x et 5.x l'analyse, établit automatiquement ASTs avec tous les détails d'une pleine PHP grammaire, peut générer compilable texte source de l'ASTs. C'est plus difficile que cela puisse paraître quand on considère toutes les tordu de détails, y compris bizarre littéraux de chaîne, capturé des commentaires, des chiffres-avec-radix, etc.

Mais ASTs sont à peine assez (vous avez déjà observé que les jetons ne sont pas encore à peine assez).

Le fondement sur lequel il est construit, le Logiciel DMS Réingénierie Toolkit fournit un soutien pour l'analyse et l'arbitraire des transformations de l'ASTs. Il sera également lire les grands ensembles de fichiers à la fois, permettant une analyse et des transformations à travers les fichiers PHP.

0voto

FractalizeR Points 12887

Il y a un port de ANTLR à PHP : http://code.google.com/p/antlrphpruntime/w/list

Il est abandonné, mais je pense que cela devrait toujours fonctionner.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X