A Semântica Denotacional descreve o significado de um programa mapeando (ou "denotando") cada construção da linguagem a um objeto matemático imutável, como funções, números ou conjuntos. Ela não descreve a execução passo a passo, mas sim o quê o programa calcula, em termos de uma função matemática que transforma entradas em saídas.
Por exemplo, um comando de laço while não é descrito por sua execução repetida, mas sim como um ponto fixo de uma função matemática. Toda a linguagem é vista como um sistema de equações cujas soluções são os significados (denotações) dos programas.
Objetivo:
O principal objetivo da Semântica Denotacional é fornecer um entendimento abstrato e independente de implementação do significado de um programa. Por ser altamente matemática e composicional (o significado de uma construção complexa é definido a partir dos significados de suas partes), ela é excelente para analisar propriedades da linguagem como um todo, como a equivalência de programas.
Exemplos de uso:
Análise de Linguagens: É usada para estudar e comparar as características expressivas de diferentes linguagens de programação em um nível puramente matemático.
Geração de Compiladores: Embora menos direta que a semântica operacional, ela pode guiar o desenvolvimento de compiladores "corretos por construção", garantindo que a tradução do código-fonte para o código de máquina preserve o significado matemático original.
Fundamento para Linguagens Funcionais: Linguagens como Haskell e Lisp são fortemente baseadas em conceitos matemáticos (como o cálculo lambda), e a semântica denotacional é a forma mais natural de descrever seu significado.