Les meilleures pratiques pour la rédaction d'un langage de programmation de l'analyseur
Sont là des pratiques exemplaires que je devrais suivre lors de l'écriture d'un analyseur?
- un analyseur syntaxique pour quoi? D'un compilateur ou d'ip des messages?
Vous devez vous connecter pour publier un commentaire.
La sagesse populaire est pour l'utilisation de l'analyseur de générateurs de + grammaires et il semble que de bons conseils, parce que vous êtes à l'aide d'un outil rigoureux et sans doute une réduction de l'effort et le potentiel pour les bugs en faire.
D'utiliser un analyseur générateur de la grammaire doit être sans contexte. Si vous êtes à la conception de la languauge être analysée ensuite, vous pouvez contrôler cela. Si vous n'êtes pas sûr, alors il pourrait vous coûter beaucoup d'effort si vous commencez en bas de la grammaire de la route. Même si c'est sans contexte dans la pratique, à moins que la grammaire est énorme, il peut être plus simple à la main le code récursif décent de l'analyseur.
Étant sans contexte n'est pas seulement de faire de l'analyseur générateur possible, mais il a également fait part codé d'analyseurs beaucoup plus simple. Ce que vous vous retrouvez avec un (ou deux) des fonctions par phrase. Si vous organisez et nom le code proprement n'est pas beaucoup plus difficile de voir qu'une grammaire (si votre IDE peut montrer que vous appelez hiérarchie similaire, alors vous pouvez très bien voir ce que la grammaire est).
Les avantages:-
Je ne dis pas que les grammaires sont toujours inapproprié, mais souvent les avantages sont minimes et sont souvent considérés par les coûts et les risques.
(Je crois que les arguments sont speciously attrayants et qu'il y a un biais général pour eux que c'est une façon de signalisation que l'on est plus de l'informatique lettré.)
Quelques morceaux de conseils:
N'abusez pas des expressions régulières - alors qu'ils ont leur place, ils n'ont tout simplement pas le pouvoir de gérer toute sorte de véritable analyse. Vous pouvez pousser, mais vous êtes finalement va frapper un mur ou un mess difficile à maintenir. Vous êtes mieux de trouver un analyseur générateur qui peut traiter un plus grand ensemble de langue. Si vous ne voulez vraiment pas à entrer dans outils, vous pouvez regarder récursive descente analyseurs - c'est vraiment un modèle simple pour la main-d'écrire un petit analyseur. Ils ne sont pas aussi flexibles ou aussi puissant que le gros de l'analyseur générateurs, mais ils ont beaucoup plus courte de la courbe d'apprentissage.
Sauf si vous avez très serré exigences de performance, d'essayer de garder vos calques séparés - l'analyseur lexical lit individuel des jetons, l'analyseur organise dans un arbre, puis l'analyse sémantique des contrôles sur tout et sur des liens de références, puis une phase finale à la sortie de ce qui est produit. En gardant les différentes parties de la logique distinct va rendre les choses plus facile à maintenir plus tard.
Lire la plupart des Dragon livre premier.
Analyseurs sont pas compliqué si vous savez comment les construire, mais ils ne sont PAS le genre de chose que si vous mettez assez de temps, vous finirez par y arriver. Il est d'ailleurs préférable de construire sur la base de connaissances existante. (Sinon attendre de l'écrire et de le jeter quelques dizaines de fois).
Yep. Essayez de générer, de ne pas écrire. Pensez à utiliser yacc, ANTLR, Flex/Bison, Coco/R, OR Analyseur générateur, etc. Station manuellement écrire un analyseur syntaxique uniquement si aucun des existants analyseur de générateurs de s'adapter à vos besoins.
Tout d'abord, n'essayez pas d'appliquer les mêmes techniques d'analyse tout. Il existe de nombreux cas d'utilisation possible, à partir de quelque chose comme les adresses IP (un peu d'un code ad hoc) pour les programmes C++ (qui a besoin d'une force industrielle de l'analyseur avec le feedback de la table des symboles), et à partir de la saisie de l'utilisateur (qui doit être traitée très rapidement) pour les compilateurs (qui normalement peut se permettre de dépenser un peu de temps d'analyse). Vous pouvez spécifier ce que vous faites si vous voulez des réponses utiles.
Deuxième, ont une grammaire à l'esprit pour analyser avec. Le plus compliqué c'est, le plus formel, la spécification doit être. Essayez de pencher du côté de l'être trop formel.
Troisième, eh bien, cela dépend de ce que vous êtes en train de faire.