qu'est-ce que la sémantique?

13

Il existe de nombreuses langues populaires. Mais, les informaticiens nous disent que pour comprendre le comportement des programmes dans ces langues argumenter définitivement et sans ambiguïté sur le comportement du programme (par exemple prouver leur identité), nous devons les traduire dans un autre langage bien compris. Ils appellent ce langage "une sémantique". Les auteurs proposent une des nombreuses sémantiques. Ils expliquent le sens de leurs constructions et comment vous pouvez traduire votre langue en leur. Une fois que vous aurez fait cela, tout le monde comprendra certainement votre programme, disent-ils.

Ça a l'air bien, pourtant, je ne comprends pas quelque chose. Nous disent-ils qu'ils introduisent une autre langue pour comprendre la première? Pourquoi le comprenons-nous mieux que l'original? Pourquoi cette sémantique est meilleure que ça? Pourquoi ne pas apprendre tout de suite la sémantique de C au lieu d'inventer un autre langage, pour décrire la sémantique de C? Il en va de même pour la syntaxe. Pourquoi je ne pose pas la même question concernant la syntaxe?

PS Dans les commentaires, j'entends que la sémantique ne signifie pas une autre langue ou une traduction en elle. Mais la sémantique formelle pour VHDL dit que si vous ne comprenez quelque chose que d'une seule manière, vous ne le comprenez pas et le «sens du sens» peut être spécifié si nous fournissons une langue avec un mécanisme qui la traduit dans une autre langue (connue). Autrement dit, "la sémantique est une relation entre les systèmes formels". Hennessy, dans Sémantique des langages de programmation , dit que la sémantique permet un traitement formel du "sens" du programme, lorsque la sémantique est fournie sous forme de BNF ou de diagramme de syntaxe. Qu'est-ce qu'un système formel sinon une langue?

PS2 Puis-je dire que la synthèse HW d'un programme HDL donné dans l'interconnexion de portes est un processus d'extraction sémantique? Nous traduisons ensuite la description (de haut niveau) dans le langage (de bas niveau) que nous comprenons.

Val
la source
De quel type de diagrammes parlez-vous? Je travaille avec la sémantique, mais je n'utilise pratiquement jamais de diagrammes.
Dave Clarke
1
Je n'appellerais pas la sémantique un "langage". La sémantique définit le sens des langues. Par exemple, la syntaxe des nombres binaires it . Uniquement avec la valeur sémantique ( w ) = | w | i = 1 w i 2 n - i + 1 obtenons-nous des nombres réels; notez que ce n'est pas la seule sémantique possible, il y a aussi BCD, 2-complément et bien d'autres. {0,1}+valeur(w)=je=1|w|wje2n-je+1
Raphael
@Dave Excusez-moi, j'ai créé ma question sous l'impression de diagrammes de décision d'affectation. Je viens aussi de Formal Semantics for VHDL, un livre où les auteurs proposent différentes sémantiques, beaucoup de diagrammes dans chacune. Je pensais que c'est une langue à laquelle nous mappons.
Val
Cela ressemble beaucoup moins à une sémantique qu'à une étape intermédiaire sur le chemin de la compilation vers le matériel.
Dave Clarke
Oui, mais ils extraient le «sens» de la description.
Val

Réponses:

15

Pourquoi ne pas apprendre tout de suite la sémantique de C au lieu d'inventer un autre langage, pour décrire la sémantique de C?

Parce que pour définir la sémantique de C, vous avez besoin d'une sorte de langage, par exemple l'anglais. L'anglais peut être ambigu, et en particulier la sémantique C99.

La notion informatique de sémantique est généralement une description mathématique d'un programme, et cette description n'est pas exactement une traduction. Il existe plusieurs types de sémantique, qui peuvent concerner différentes choses:

  1. sur quelle fonction mathématique le programme calcule ( sémantique dénotationnelle ),
    lambda x: x + x =(X2X)
  2. sur les propriétés qui doivent tenir avant et après le programme ( sémantique axiomatique ),
    {une>0} x = a; y = 0; tandis que (1 <x) {x = x / 2; y ++; } {y=Journal(une)}
  3. sur la façon dont le programme se réduira ( sémantique opérationnelle ). où représente votre mémoire avant et après. Dans ce cas, et si et sont les cellules mémoire deet, et si .
    (σ, while (x) {x -; y ++;})σ
    σ,σσ=(Xune,yb)σ=(Xune+b,y0)XyXya

Un peu malheureusement pour l'instant, comprendre universellement un programme à travers sa sémantique n'est ni facile ni l'intention de tout cela. Ce n'est pas le premier parce que, bien, ces mathématiques peuvent être compliquées. Ce n'est pas le dernier car la sémantique fournit en effet une description commune et non ambiguë, mais elle n'est pas utilisée pour comprendre un programme.

Si la lecture de la sémantique n'a pas beaucoup de sens, il est très important de lire et de s'entendre sur la sémantique sur les éléments de base du langage, par exemple pour expliquer sans ambiguïté comment Cœuvres primitives.continuer

En conclusion:

Nous disent-ils qu'ils introduisent une autre langue pour comprendre la première?

Techniquement non, la langue est mathématique. De plus, il est fondamentalement le même pour tous les langages de programmation, donc même l'introduction d'un nouveau langage, s'il est le même pour tous, serait à peu près OK.

Pourquoi le comprenons-nous mieux que l'original?

Parce que c'est mathématique, donc c'est peut-être plus difficile à comprendre, mais c'est beaucoup plus précis et complet.

Il en va de même pour la syntaxe.

Il existe des travaux sur les analyseurs vérifiés, mais la question de ce que signifierait une sémantique d'un analyseur n'est pas anodine.

jmad
la source
2
"les mathématiques [...] sont bien plus précises et complètes." - ce qui pose bien sûr la question de la syntaxe formelle et de la sémantique des mathématiques elles-mêmes. ;)
Raphael