Sémantique formelle des langages de programmation
Dans le de l'informatique théorique, la sémantique formelle est le champ concerné par l'étude mathématique rigoureuse de la signification des langages de programmation et des modèles du calcul .
La sémantique formelle d'une langue est donnée par un modèle mathématique qui décrit les calculs possibles décrits par la langue.
Il y a beaucoup d'approches à la sémantique formelle ; ces approches appartiennent à trois classes importantes :
sémantique dénotationnelle de de de
, par lequel chaque expression dans la langue soit traduite en signe de , c. une expression dans une autre langue. La sémantique dénotationnelle correspond lâchement à la compilation , bien que le " ; language" de cible ; est habituellement un formalisme mathématique plutôt qu'un autre langage de programmation. Par exemple, la sémantique dénotationnelle des langues fonctionnelles traduit souvent la langue en théorie de domaine de ;
sémantique opérationnelle de de , par lequel l'exécution de la langue soit décrite directement (plutôt que par traduction). La sémantique opérationnelle correspond lâchement à l'interprétation , bien qu'encore le " ; language" d'exécution ; de l'interprète est généralement un formalisme mathématique. La sémantique opérationnelle peut définir une machine abstraite (tel que la machine SECD), et donne la signification aux expressions en décrivant les transitions qu'elles induisent sur des états de la machine. Alternativement, comme avec le calcul pur du lambda, la sémantique opérationnelle peut être définie par l'intermédiaire des transformations syntactiques sur des expressions de la langue elle-même ;
sémantique axiomatique de de , par lequel on donne la signification aux expressions en décrivant les axiomes logiques du de 'qui s'appliquent à eux. La sémantique axiomatique ne fait aucune distinction entre la signification d'une expression et les formules logiques qui la décrivent ; sa signification est exactement ce qui peut être prouvé à son sujet dans de la logique. L'exemple canonique de la sémantique axiomatique est la logique de Hoare de .
Les distinctions entre les trois grandes catégories d'approches peuvent parfois être troubles, mais toutes les approches connues à la sémantique formelle emploient les techniques ci-dessus, ou une certaine combinaison en.
Indépendamment du choix entre dénotationnel, les approches opérationnelles et ou axiomatiques, la plupart de variation des systèmes sémantiques formels résulte du choix de soutenir le formalisme mathématique.
Quelques variations de sémantique formelle incluent ce qui suit :
La sémantique d'action de est une approche qui essaye de modulariser la sémantique dénotationnelle, dédoublant le procédé de formalisation dans deux couches (macro et microsemantics) et prédéfinissant trois entités sémantiques (actions, données et producteurs) pour simplifier les spécifications ;
Les grammaires d'attribut définissent les systèmes qui calculent systématiquement le " ; " des méta-données ; (appelé attribue le ) pour les divers cas de la syntaxe du de la langue. Des grammaires d'attribut peuvent être comprises comme sémantique dénotationnelle où la langue cible est simplement la langue originale enrichie avec des annotations d'attribut. Hormis la sémantique formelle, des grammaires d'attribut ont été également employées pour la génération de code dans les compilateurs et pour augmenter le les grammaires indépendantes du contexte régulières de ou de avec des états sensibles au contexte du ;
catégorique (ou " ; functorial" ;) la sémantique emploie la théorie de catégorie de comme formalisme mathématique de noyau ;
La sémantique de simultanéité de est une limite de fourre-tout pour n'importe quelle sémantique formelle qui décrit des calculs concourants. Historiquement les formalismes concourants importants ont inclus le modèle d'acteur de et les calculs de processus ;
La sémantique de jeu de utilise une métaphore inspirée par la théorie des jeux rectangulaires .
Une série de raisons, l'on a pourrait souhaiter décrire les rapports entre la sémantique formelle différente. Par exemple :
L'on a pourrait souhaiter montrer qu'une sémantique opérationnelle particulière pour une langue satisfait les formules logiques d'une sémantique axiomatique pour cette langue. Une telle preuve démontre que c'est " ; sound" ; pour raisonner au sujet d'un (opérationnel) particulier de stratégie d'interprétation de using un (axiomatique) particulier rendre le résistant de système.
Donné un unilingue, on pourrait définir un " ; haut-level" ; machine abstraite et un " ; bas-level" ; machine abstraite pour la langue, telle que ce dernier contient des opérations plus primitives qu'anciennes. On pourrait alors souhaiter montrer qu'une sémantique opérationnelle au-dessus de la machine à niveau élevé est rapportée par un Bisimulation avec la sémantique au-dessus de la machine de bas niveau. Une telle preuve démontre que le " de bas niveau de machine ; loyalement implements" ; la machine à niveau élevé. On peut parfois rapporter la sémantique multiple par les abstractions par l'intermédiaire de la théorie de l'interprétation d'abrégé sur .
Le champ de la sémantique formelle entoure tout les suivre :
la définition des modèles sémantiques,
les relations entre différents modèles sémantiques,
les relations entre différentes approches à la signification, et
la relation entre le calcul et les structures mathématiques fondamentales des champs tels que la logique , la théorie des ensembles , la théorie des modèles , la théorie de catégorie de , etc.
Il a des liens étroits avec d'autres secteurs du de l'informatique tel que la conception de langage de programmation de , le type la théorie , les compilateurs et la vérification de programme de des interprètes et le modèle de vérifiant .
| Random links: | Rue Ansgar, Iowa | Richard Johnson | Échange de Frederick | Services d'émission de Shaw | Semántica_formal_de_lenguajes_de_programación |