Abordagem Vantagens
Operacional
Intuitiva: É a mais próxima de como pensamos na execução de um código. <br> Direta para Implementação: Útil para construir protótipos de interpretadores e compiladores. <br> Simplicidade (para linguagens pequenas): Fácil de entender e aplicar em construções simples.
Denotacional
Abstração: Independente de qualquer máquina ou implementação, o que a torna elegante e geral. <br> Composição: O significado de um programa é construído a partir do significado de suas partes, facilitando a análise. <br> Análise de Linguagens: Excelente para analisar e comparar características de linguagens de forma rigorosa.
Axiomática
Verificação de Programas: É a base para a prova formal da correção de software, crucial em sistemas críticos. <br> Especificação: Fornece uma maneira clara de especificar o que um programa deve fazer.
Desvantagens
Complexidade: Pode se tornar excessivamente complexa e detalhada para linguagens grandes. <br> Baixo Nível de Abstração: Focada em detalhes de implementação, o que pode obscurecer o significado essencial.
Complexidade Matemática: Exige um conhecimento profundo de matemática (teoria dos domínios, cálculo lambda). <br> Difícil Leitura: A notação pode ser muito densa e de difícil compreensão para não especialistas.
Incompletude: Não descreve o significado completo de um programa; por exemplo, não lida diretamente com a terminação (se o programa para ou entra em loop infinito). <br> Dificuldade de Aplicação: Escrever as asserções corretas para programas complexos é uma tarefa difícil e propensa a erros.