2009-12-19 7 views
0

Arrière-plan: Je développe une syntaxe personnalisée de type regex pour les noms de fichiers d'URL. Il fonctionne comme ceci:Analyse syntaxique d'une syntaxe de génération de chaîne personnalisée

  • utilisateur écrit un motif, quelque chose comme "[a-z][0-9]{0,2}", et il passe en entrée
  • Il est analysé par le programme et traduit dans l'ensemble des permutations, il représente par exemple
    'a', 'a0' , 'a00' ... 'z99'

Ces modèles varient en complexité, essentiellement tout ce qui pourrait apparaître dans un nom de fichier URL doit être hébergé. La langue est Java ou PHP, mais des exemples dans n'importe quelle langue ou aide abstraite/conceptuelle sont plus que bienvenus.

Mes questions sont les suivantes:

  1. Où commencer par la mise en œuvre d'un "analyseur" pour le
  2. ci-dessus

et moins important,

  1. Comment traduire par programme les modèles complexes analysés en chaînes
+0

Pouvez-vous préciser pourquoi regex ne convient pas à ce problème? – GrayWizardx

+0

C'est un problème très intéressant et difficile. C'était un sujet d'un Quiz Ruby: http://rubyquiz.com/quiz143.html. Une caractéristique de Ruby que j'aime est celle par exemple. ('a' .. 'zzzzz'). chaque {| x | met x} imprime toutes les combinaisons de lettres minuscules de taille 1 à 5. – mykhal

+0

@GrayWizardx Comment utiliseriez-vous une regex pour la partie de permutation de l'algorithme? – axada

Répondre

0

Il y a une bonne réponse à cette ici: SO: /generate-all-permutations-of-text-from-a-regex-pattern-in-c

Le point crucial de la chose est ce ... définir ce que vous avez vraiment besoin et bien trouver un moyen de mettre un terme une fois que vous avez ce que vous avez besoin et affiner votre champ de recherche autant que possible parce que vous flirtez avec un nombre de permutations qui explosent rapidement. "Tout ce qui pourrait apparaître dans un nom de fichier d'URL doit être adapté." ne va pas le couper. Par exemple, si vous vous limitez aux caractères et aux nombres en anglais, pour une chaîne de 6 caractères, vous regardez plus de 2 milliards de combinaisons. Pour chaque caractère supplémentaire multipliez par 36.
Si vous allez avec ISO 8859 vous obtenez plus de 274 billions de combinaisons et Unicode plus de 745 trillions de milliards de combinaisons.

+0

Merci pour la réponse et les excuses pour avoir seulement 4 ans de retard pour l'accepter. En ce qui concerne l'explosion du nombre de permutations, il appartiendrait à l'utilisateur de définir l'ensemble des caractères à générer, et donc de contrôler la taille du ou des ensembles de permutation. L'idée serait de construire un grand «corpus» d'URL et de calculer la probabilité qu'un personnage apparaisse quelque part/n'importe où et travaille à partir de là, ayant peut-être un seuil de probabilité en dessous duquel les caractères ne sont pas inclus. C'est un projet que je n'ai pas réussi à compléter. – axada