Je comprends la différence entre la syntaxe et la sémantique -
Syntaxe : comment les symboles sont combinés pour former une expression ou une instruction valide.
Sémantique : la signification de ces symboles qui forment une expression ou une déclaration.
Mais quelle est la grammaire? Par exemple: parfois j'entends des gens dire qu'une construction est "grammaticalement incorrecte mais syntaxiquement correcte". Qu'est-ce que ça veut dire?
int;
est grammaticalement valide, mais mal formé syntaxiquement en C ++. La grammaire n'a aucun problème avec ce code, mais les contraintes de syntaxe nécessitent qu'un nom soit fourni si la première partie d'une déclaration ne contient aucun spécificateur de classe ou spécificateur d' énumération ou, en C ++ 11, ami-spécificateur .Réponses:
Une grammaire est un ensemble de règles qui définissent la syntaxe d'une langue particulière.
Lorsque les gens parlent spécifiquement d'un analyseur (en particulier celui généré avec un générateur d'analyseur comme yacc, Byacc, ANTLR, etc.), ils peuvent faire un peu plus de cheveux et parler spécifiquement de ces règles syntaxiques qui sont encodées à l'aide du générateur. règles, par rapport aux parties qui sont appliquées séparément par un code attaché à une règle. Par exemple, en C lorsque vous définissez un tableau, la taille que vous spécifiez pour le tableau doit être strictement positive (et non nulle). La règle de grammaire pourrait en gros dire quelque chose comme:
... puis séparément, il y aurait un peu de code pour vérifier que le unsigned_int était différent de zéro. Dans ce cas, il pourrait être judicieux de parler des exigences de la syntaxe et de la grammaire séparément, les deux ayant des exigences légèrement différentes (qui, appliquées ensemble, nous supposons qu'elles correspondent aux exigences de la langue elle-même).
la source
La différence est floue et ne vaut pas trop la peine de s'inquiéter.
Les gens incluront parfois des contraintes contextuelles sous l'égide de l'exactitude syntaxique. L'exemple le plus courant est un système de type. Une autre est la règle de Java «pas d'instructions après retour». Cela simplifie la discussion formelle: la syntaxe produit un langage (un ensemble de phrases / expressions / programmes) qui est le domaine de la sémantique; tout le reste n'est "pas un programme", et la sémantique n'a pas à s'en préoccuper.
En revanche, la «grammaire» fait généralement référence à une méthode de description des langages sans contexte (malgré les grammaires d'attributs).
La raison pour laquelle cela ne vaut pas la peine de s'inquiéter est que les systèmes de types sont aussi souvent considérés comme la " sémantique statique " d'un langage qu'ils sont une " discipline syntaxique pour l'exactitude". Et parfois, une langue n'a pas tout à fait une grammaire sans contexte appropriée; C, par exemple, doit réinjecter les informations de l'analyseur dans le lexeur.
De façon pragmatique, quiconque s'appuie sur une distinction entre «syntaxique» et «grammatical» ferait mieux de le dire et d'expliquer ce qu'ils signifient.
la source
Une grammaire est un ensemble de règles pour définir une langue. La grammaire décrit plutôt la syntaxe et la sémantique . Une langue peut avoir deux grammaires différentes:
Par exemple, une partie de la grammaire en C pourrait ressembler à ceci:
Sens:
Jetez un œil à cette façon de définir une grammaire . Si vous êtes vraiment curieux de connaître les grammaires, jetez un œil à GNU Bison , qui est essentiellement un outil pour décrire la grammaire d'une langue.
Le «grammaticalement incorrect mais syntaxiquement correct» n'a pas trop de sens. Peut-être qu'ils se réfèrent à une grammaire qui décrit la sémantique d'une langue. Il serait certainement plus logique de dire simplement "pas sémantiquement correct".
la source