2013-04-18 1 views
1

Je voudrais savoir s'il existe déjà de bons algorithmes pour détecter la déclaration de fonction, le contenu de la fonction, son accolade d'ouverture et sa fermeture. Pour le développement, le débogage et le test de bogues, il peut être intéressant dans certains cas d'ajouter beaucoup de code dans la plupart des fonctions.Détection et correspondance de l'ouverture de la fonction et de l'accolade dans le code source

Exemple code source:

Test.onLoad=function(event){ 
    Test.initialize(); 
}; 

Résultat:

  • Nom de la fonction: Test.onLoad
  • Contenu: Test.initialize();
  • accolade d'ouverture trouvé à la ligne: 1.
  • Accolade de fermeture trouvée à la ligne 3.

On pourrait, par exemple, les informations ci-dessus, ajouter facilement une ligne au début de toutes les fonctions et à la fin d'entre eux, à connecter certains paramètres:

Test.onLoad=function(event){ 
    Log("LogInit","function:Test.onLoad","openbraceline:1","content: Test.initialize();"); 
    Test.initialize(); 
    Log("LogEnd ","function:Test.onLoad","endbraceline :5","content: Test.initialize();"); 
}; 

Je sais que cette fonctionnalité pourrait aussi être fait avec un simple journal global et avec une pile d'appels, mais il y a encore beaucoup d'exemples où cela pourrait être très utile.


Faire un algorithme simple pour détecter et accolades de match et obtenir les informations de la fonction pourrait être facile, mais il y a beaucoup d'exceptions où il pourrait être vraiment compliqué, et c'est pourquoi Im demande s'il existe déjà de bonnes manières connues de le détecter.
Je ne dérange pas si les exemples d'algorithmes ou de conseils sont dans n'importe quelle langue, je voulais juste voir les meilleures façons de le faire. Notepad ++ est un bon exemple parce qu'il a un plugin qui détecte beaucoup de différents langages de code source et analyse le code avec des couleurs pour chaque partie et fait correspondre les accolades.

Répondre

2

L'utilisation d'un vrai analyseur est la seule solution qui fonctionnera dans tous les cas.

Cela semble être à propos de Javascript, donc ma suggestion est d'utiliser Rhino, ce qui est très facile à utiliser, mais l'outil serait un outil Java à la fin, bien sûr.

Si la solution doit être en Javascript, aussi, vous pouvez jeter un oeil à this question about parsers in javascript

+0

Merci à vous deux, Sebastian et Jacob Parker pour vos réponses, très utile. Je ne savais pas à propos de Rhino, JSLint et UglifyJS, bon à savoir :) – xtrm

1

Si vous voulez le parfait, vous aurez besoin d'un vrai analyseur pour votre langue. Si non, vous pouvez concevoir un CFG simplifié et écrire un analyseur pour cela (De nombreux surligneurs de syntaxe que j'ai vu fonctionner comme ça.)

Questions connexes