2010-08-13 7 views
3

Je me demande où est la limite entre la spécification grammaticale et l'analyse sémantique. Quoi de mieux: utiliser une description grammaticale détaillée ou laisser les détails pour la phase sémantique? Par exemple: imaginez un OO-langage comme C# avec le type de ENUM, qui peut "tirer" d'un type primitifGrammaire vs analyse sémantique

enum X : int { a = 1 } 

Maintenant, si l'exactitude (dans ce cas: type primitif ou non primitive) de base- type d'enum être un sujet de vérification grammaticale ou d'analyse sémantique?

+0

Ce livre fait un bon travail décrivant quelques compromis de la mise en œuvre des fonctionnalités de langue à différentes couches: http://pragprog.com/titles/tpdsl/language-implementation-patterns mais je dois admettre que je ne suis pas positif directement répond à cette question. – sarnold

+0

J'ai lu ce livre et le manque d'une telle information m'a conduit à poser des questions ici. Je pense que ma question est purement théorique. Je veux savoir quelle approche est la meilleure. –

Répondre

2

Ceci est une question extrêmement large. Il y a tellement d'autres considérations qu'il serait très difficile de dire simplement qu'une tactique est meilleure qu'une autre dans toutes les situations. Cela dépend de votre objectif et de la définition du reste de la langue. Si d'autres parties du langage sont intrinsèquement ambiguës syntaxiquement (et doivent être désambiguïsées à l'aide d'informations sémantiques), alors il est évident qu'il est nécessaire d'effectuer des tâches comme une étape de l'analyse sémantique. Cela dit, je suis fan de la détection de toutes les erreurs le plus tôt possible. Si votre langage et votre cible vous permettent d'analyser une représentation sémantique sans ambiguïté de votre entrée sans avoir besoin d'une analyse sémantique pour rejeter des programmes invalides, je crois que cela va être la meilleure approche. Fondamentalement, vous équilibrez définitivement votre capacité à rejeter les programmes erronés le plus tôt possible avec la complexité de votre grammaire et de votre parser et la duplication des efforts entre la description de la grammaire et la phase d'analyse sémantique. Je ne crois pas qu'il soit jamais possible de dire que faire les choses d'une certaine manière est meilleur que l'autre.