Pourquoi la BNF est-elle considérée comme une technique peu satisfaisante pour décrire une langue?

8

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)?

NlightNFotis
la source

Réponses:

3

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.

reinierpost
la source
3

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.

Peter Leupold
la source
"Ces choses doivent généralement être expliquées dans le texte d'accompagnement" - il existe cependant une sémantique formelle.
Raphael
1
La question de savoir si un programme avec un certain identifiant à une certaine position est légale ou non pour moi est la syntaxe, pas la sémantique. La sémantique est le sens, la syntaxe décrit le langage formel des programmes juridiques. Par conséquent, je pense que mon exemple décrit une partie de la syntaxe généralement décrite sous forme de texte.
Peter Leupold
1
Mis à part la terminologie du langage de programmation, la branche de TCS appelée sémantique formelle est ce que vous pouvez y utiliser. Vous pouvez appeler sa syntaxe par la suite, si vous le souhaitez (bien que je considère cela idiot); le fait est que le langage naturel n'est pas la seule alternative pour spécifier ces choses.
Raphael