L' autre jour, je lisais le document intitulé Fundamental Concepts in Programming Languages de C. Strachey , dans lequel j'ai lu quelque chose qui m'était assez étrange. Citant directement (avec la partie étrange surlignée par moi):
Face à la situation telle qu'elle existe aujourd'hui, où il existe une méthode généralement connue pour décrire une certaine classe de grammaires (connue sous le nom de BNF ou sans contexte), le premier instinct de ces mathématiciens semble être d' étudier les limites du BNF - ce que pouvez-vous exprimer en BNF même au prix de constructions très lourdes et artificielles? Cela peut être une question d'un certain intérêt mathématique (quoi que cela signifie), mais cela a très peu de pertinence pour les langages de programmation où il est plus important de découvrir de meilleures méthodes de description de la syntaxe que BNF (qui est déjà à la fois gênant et inadéquat pour ALGOL) que d' examiner les limites possibles de ce que nous savons déjà être une technique insatisfaisante .
Y a-t-il une raison particulière pour laquelle l'auteur considère le BNF comme une technique peu satisfaisante pour décrire les langues? Serait-ce parce que vous ne pouvez décrire la syntaxe et non la sémantique qu'avec une seule grammaire BNF (cependant, vous pouvez l'étendre pour décrire la sémantique opérationnelle en la transformant en grammaire attributaire)?
la source
Réponses:
Vous mentionnez une raison.
L'autre raison est que la syntaxe des langages de programmation n'est pas sans contexte, sauf si vous définissez la syntaxe comme étant celle qui peut être, ou est, décrite par une grammaire sans contexte.
Lorsque l'article de Strachey a été écrit, la syntaxe d'un nouveau langage, Algol 68, était définie dans un nouveau formalisme, des grammaires à deux niveaux, qui était utilisé pour décrire la validité syntaxique dans son intégralité, y compris beaucoup de choses qui, soumises au lavage de cerveau par le «BNF est la syntaxe "meme, beaucoup d'entre nous ne considèrent pas du tout une partie de la syntaxe, comme toutes les variables devant être déclarées avant utilisation.
La plupart d'entre nous n'irons pas aussi loin, mais conviendront toujours qu'il existe des fonctionnalités syntaxiques non contextuelles dans les langages de programmation.
la source
Je ne pense pas que la sémantique joue un rôle. Votre citation demande de «découvrir de meilleures méthodes de description de la syntaxe que BNF». Bien sûr, des choses comme les noms de fonction et de variable font partie de la syntaxe. Avec BNF, vous ne pouvez pas, par exemple, distinguer une langue dans laquelle les variables doivent être décalcomanies avant utilisation de celle où vous pouvez utiliser des variables non déclarées. Ces choses doivent généralement être expliquées dans le texte d'accompagnement, ce qui n'est pas parfait.
la source