Quelle est la différence entre la syntaxe et la grammaire?

14

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?

cpx
la source
FWIW, cela me semble absurde. Si la grammaire du langage accepte le morceau de code, il conforme la syntaxe. Peut-être que quelqu'un a une définition très large (et non standard) de la "syntaxe". Contexte / source?
@delnan. Pas vrai. Par exemple, 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 .
Johannes Schaub - litb
@ JohannesSchaub-litb: Voulez-vous citer la partie de la grammaire qui rend cela valide?
@Johanes C'est l'inverse de la situation dans la question.
Nicole
2
@ Johannes Schaub: Quelle règle fait "int;" valide? La grammaire définit la syntaxe.
Casey Patton

Réponses:

6

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:

typename var_name '[' unsigned_int ']'

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

Jerry Coffin
la source
3

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.

Ryan Culpepper
la source
Je ne comprends pas pourquoi la différence est floue. La grammaire décrit la syntaxe.
Casey Patton
1
@Casey, non, selon une utilisation du mot "syntaxe", la grammaire spécifie un surensemble de la syntaxe.
Ryan Culpepper
0

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:

  • Grammaire de syntaxe (un ensemble de règles qui décrit l'ordre des symboles dans la langue)
  • Grammaire sémantique (un ensemble de règles décrivant le placement sémantique valide et l'utilisation de ces symboles)

Par exemple, une partie de la grammaire en C pourrait ressembler à ceci:

if statement -> if_keyword "(" expression ")" if_block
if_keyword -> "if"
logical_statement -> some other stuff here...

Sens:

an if statement is made of an if keyword followed by a parenthesis followed by an expression followed by a parenthesis followed by an if block
an if keyword is ....

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".

Casey Patton
la source
7
Non, la grammaire ne définit pas la sémantique et ne doit jamais le faire, sauf si c'est quelque chose d'exotique, comme contextfreeart.org
SK-logic