2009-08-25 3 views
1

Nous avons utilisé regex pour notre exigence de grammaire. Cependant, il y a environ 20+ modèles qui doivent être supportés et le maintien de RegEx est devenu très difficile quand les patterns ont commencé à devenir récursifs. Nous avons essayé de migrer vers ANTLR et nous avons examiné les deux points critiques suivants.RegEx ou Antlr, lequel devrait être le choix?

Performances Les performances semblent être un problème lorsque certaines des expressions ont été migrées. RegEx avec l'assemblage compilé est environ 2x ou 3x plus rapide pour certaines expressions.

Manageabilité La grammaire ANTLR semble être beaucoup plus facile à gérer et à développer. Accueillir de nouvelles expressions/constructions était beaucoup plus simple que RegEx. Est-ce que quelqu'un a une expérience similaire d'une telle migration? Devrions-nous le regarder ou travailler avec RegEx?

Répondre

0

La performance d'ANTLR est lourdement en fonction du style de grammaire que vous utilisez - en particulier le placement et le contenu des prédicats. Après cela, les grammaires récursives-descendantes générées par ANTLR ont tendance à souffrir progressivement du nombre d'opérateurs disponibles dans vos expressions¹, mais il existe des solutions disponibles. Une fois que vous êtes familier avec ANTLR, vous devriez le trouver plus facile à maintenir pour des "tâches de taille significative" que les expressions régulières. Cependant, se lever et courir n'est pas la plus simple des tâches en ce moment. Quelle langue/IDE utilisez-vous?

¹ Parlez strictement performance ici. Les parseurs récursifs-descendants brillent quand il s'agit de comprendre le code généré.

+0

Nous utilisons complètement .NET et Visual Studio 2008 comme environnement de développement. Le contexte des expressions sera plus à l'appui de diverses expressions (mathématiques, fonctions de base de données, fonctions personnalisées, etc.). Nous sommes à un point où les expressions sont imbriquées et deviennent vraiment incontrôlables. – sraj

Questions connexes