180 votes

Quelle est la différence entre la syntaxe et la sémantique dans les langages de programmation ?

Quelle est la différence entre syntaxe y sémantique dans les langages de programmation (comme C, C++) ?

263voto

Jeff N Points 3069

TL ; DR

En résumé la syntaxe est le concept qui se préoccupe uniquement de savoir si la phrase est valide ou non pour la grammaire de la langue. La sémantique s'occupe de savoir si la phrase a un sens valide ou non.

Longue réponse :

La syntaxe concerne le structure ou la grammaire de la langue. Elle répond à la question : comment construire une phrase valide ? Toutes les langues, même l'anglais et les autres langues humaines (dites "naturelles"), ont des grammaires, c'est-à-dire des règles qui définissent si la phrase est correctement construite ou non.

Voici quelques règles de syntaxe du langage C :

  • séparer les déclarations par un point-virgule
  • mettre l'expression conditionnelle d'une instruction IF entre parenthèses
  • regrouper plusieurs déclarations en une seule en les entourant d'accolades
  • les types de données et les variables doivent être déclarés avant la première instruction exécutable (cette fonctionnalité a été abandonnée dans C99. C99 et les suivants autorisent les déclarations de types mixtes).

La sémantique concerne le signification de la phrase. Il répond aux questions suivantes : cette phrase est-elle valide ? Si oui, que signifie cette phrase ? Par exemple :

x++;                  // increment
foo(xyz, --b, &qrs);  // call foo

sont des instructions C syntaxiquement valides. Mais qu'est-ce qu'elles signifient ? Est-il même valable de tenter de transformer ces déclarations en une séquence d'instructions exécutables ? Ces questions sont au cœur de la sémantique.

Considérons l'opérateur ++ dans la première déclaration. Tout d'abord, est-il même valable de tenter cette opération ?

  • Si x est un type de données flottant, cette instruction n'a pas de sens (selon les règles du langage C) et constitue donc une erreur. même si l'énoncé est syntaxiquement correct.
  • Si x est un pointeur vers un certain type de données le sens de l'instruction est d'"ajouter sizeof( un certain type de données ) à la valeur à l'adresse x et stocke le résultat dans l'emplacement à l'adresse x".
  • Si x est un scalaire, la signification de l'instruction est "ajouter un à la valeur à l'adresse x et stocker le résultat dans l'emplacement à l'adresse x".

Enfin, notez que certaines sémantiques ne peuvent pas être déterminées au moment de la compilation et doivent donc être évaluées au moment de l'exécution. Dans l'exemple de l'opérateur ++, si x est déjà à la valeur maximale pour son type de données, que se passe-t-il lorsque vous essayez de lui ajouter 1 ? Autre exemple : que se passe-t-il si votre programme tente de déréférencer un pointeur dont la valeur est NULL ?

35voto

doctorlove Points 7649

La syntaxe se réfère à la structure d'une langue, en retraçant sa étymologie à la façon dont les choses sont assemblées.
Par exemple, vous pouvez exiger que le code soit composé en déclarant un type, puis un nom et enfin un point-virgule, pour être syntaxiquement correct.

Type token;

D'autre part, la sémantique concerne le sens. Un compilateur ou un interprète pourrait se plaindre d'erreurs de syntaxe. Vos collègues de travail se plaindront de la sémantique.

12voto

thumbtackthief Points 1066

La sémantique est ce que votre code signifie - ce que vous pourriez décrire en pseudo-code. La syntaxe est la structure réelle - tout ce qui va des noms de variables aux points-virgules.

12voto

Basile Starynkevitch Points 67055

Wikipedia a la réponse. Lire syntaxe (langages de programmation) & sémantique (informatique) wikipages.

Ou pensez au travail de n'importe quel compilateur o interprète . La première étape est analyse lexicale où les tokens sont générés en divisant la chaîne de caractères en lexèmes, puis analyse syntaxique de qui construisent des arbre syntaxique abstrait (qui est une représentation de la syntaxe). L'étape suivante consiste à transformer ou à évaluer ces AST (sémantique).

De plus, observez que si vous définissez une variante du C où chaque mot clé est transformé en son équivalent français (donc if devenir si , do devenir faire , else devenir sinon etc etc...) vous changerez certainement la syntaxe de votre langage, mais vous ne changerez pas beaucoup la sémantique : la programmation dans ce français-C ne sera pas plus facile !

11voto

meaning-matters Points 3501
  • Vous devez corriger syntaxe à compiler.
  • Vous devez corriger sémantique pour que ça marche.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X