web-dev-qa-db-fra.com

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

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

93
haccks

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

Voici quelques règles de syntaxe du langage C:

  • déclarations séparées avec un point-virgule
  • entoure l'expression conditionnelle d'une instruction IF entre parenthèses
  • grouper plusieurs déclarations en une seule déclaration 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é supprimée dans C99. C99 et cette dernière autorise les déclarations de type mixte.)

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

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

sont des instructions C syntaxiquement valables. Mais que veulent-ils dire? Est-il même valable d'essayer de transformer ces instructions en une séquence d'instructions exécutable? Ces questions sont au cœur de la sémantique.

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

  • Si x est un type de données float, cette instruction n'a pas de sens (selon les règles du langage C) et constitue donc une erreur , même si l'instruction est syntaxiquement correcte
  • Si x est un pointeur sur certains types de données, l'instruction a pour effet "d'ajouter sizeof (certains types de données) à la valeur de l'adresse x et de stocker le résultat dans l'emplacement à l'adresse x ".
  • Si x est un scalaire, la signification de l'instruction est "ajoute un à la valeur de l'adresse x et stocke le résultat dans l'emplacement de 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 d'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?

En résumé, la syntaxe est le concept qui ne concerne que le fait que la phrase soit valable ou non pour la grammaire du langage. La sémantique consiste à déterminer si la phrase a un sens valide.

170
Jeff N

La syntaxe fait référence à la structure d'une langue, en traçant son étymologie à la façon dont les choses sont assemblées.
Par exemple, vous pouvez exiger que le code soit assemblé en déclarant un type, puis un nom, puis 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 vont se plaindre de la sémantique.

18
doctorlove

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

Ou pensez au travail de n'importe quel compilateur ou interprète . La première étape est analyse lexicale où les jetons sont générés en divisant une chaîne de caractères en lexèmes, puis analyse , ce qui en construit arbre de syntaxe abstraite (qui est une représentation de syntaxe). Les prochaines étapes consistent à transformer ou à évaluer ces AST (sémantique).

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

8

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 - des noms de variables aux points-virgules.

6
thumbtackthief

Syntaxe est la structure ou la forme des expressions, des déclarations et des unités de programme mais Sémantique est la signification de ces expressions, de ces déclarations et de ces unités de programme. Sémantique suivez directement à partir de syntaxe. Syntaxe fait référence à la structure/forme du code spécifiée par un langage de programmation spécifique mais Sémantique traite de la signification attribuée aux symboles, caractères et mots.

2
Kobina Ebo

Syntaxe: Cela fait référence à la structure grammaticale du langage. Si vous écrivez le langage c. Vous devez faire très attention à utiliser des types de données, des jetons [cela peut être littéral ou un symbole comme "printf ()". Il a 3 touches, "printf, (,)"]. De la même manière, vous devez faire très attention à la manière dont vous utilisez la fonction, la syntaxe de la fonction, la déclaration de la fonction, la définition, l’initialisation et l’appel de celle-ci.

Bien que la sémantique, elle concerne la logique ou le concept de phrase ou de déclaration. Si vous dites ou écrivez quelque chose hors du concept ou de la logique. Alors, vous vous trompez sémantiquement.

1