2010-09-23 3 views
3

Dans mon maître, j'ai vu comment écrire des parseurs, des compilateurs utilisant ANTLR. Mais dans le monde réel, nous avons souvent besoin d'analyser et d'extraire du contenu pertinent à partir d'une charge importante de données de flux entrantes. Chaque langue a son propre moteur d'expression régulière qui peut être utilisé pour analyser les données. Alternativement, nous pouvons écrire une grammaire EBNF et prendre un outil lisse comme ANTLR pour générer automatiquement l'analyseur. Cette dernière approche est moins sujette aux erreurs et garantie d'être plus fiable que la première (en particulier dans le cas de certains espaces supplémentaires, de nouvelles lignes). Je voudrais juste savoir quelle serait la limite entre ce monde 2 quand on irait écrire une grammaire entière et générer son propre parseur vs on utilise rapidement le moteur regex langage intégré et déployer un petit analyseur qui peut faites le travail assez rapidement. Encore une fois, je ne cherche pas d'arguments, mais j'essaie d'analyser dans quelle mesure et avec quelle approche les gens vont écrire des parseurs.Quand écrire un analyseur en utilisant la grammaire par rapport à la langue en utilisant des expressions régulières

Répondre

3

Si votre flux d'entrée peut être traité par une expression régulière et qu'il n'est pas complexe, utilisez une expression régulière. Un flot d'enregistrements où chaque enregistrement a un créneau et une valeur peut être traité raisonnablement de cette façon.

Si le flux a des enregistrements arbitrairement imbriqués, le faire par regex est peu pratique (en fait impossible), et vous devriez passer à l'aide d'un générateur BNF et parser.

+0

Incase des applications critiques de sécurité telles que la finance et la santé où même une petite erreur mineure causera des ravages, pensez-vous que regex est recommandable du tout? Je veux dire qu'en est-il de la fiabilité même pour un simple enregistrement? –

+0

Pourquoi les expressions régulières sont-elles moins fiables que le "si" ou toute autre instruction dans votre langue, si votre langue est bien implémentée? En fait, dans le cas des applications «critiques pour la sécurité», si vous voulez vraiment dire cela, vous devrez démontrer que * tout * votre code est en sécurité, pas seulement les parties qui lisent les enregistrements, et vous trouverez beaucoup plus difficile que tout ce que vous utilisez pour faire des enregistrements. Mais je ne suis pas sûr de comprendre «sécurité critique» et «financière» dans la même phrase; es-tu sérieux? –

+0

La sécurité critique peut être limitée aux soins de santé plutôt (bien d'autres existent aussi comme aéronautique etc.). Finances désolé ne tombe pas sous le même. mon erreur. –

Questions connexes