Qual é a diferença fundamental entre a semântica operacional de pequeno e grande passo?
Estou tendo dificuldade para entender o que é e a motivação para ter os dois.
semantics
operational-semantics
small-step-semantics
Simon Morgan
fonte
fonte
x = 0; while ( true ) { x = x + 1; }
?Respostas:
A semântica de pequenas etapas define um método para avaliar expressões, uma etapa de computação por vez. Formalmente falando, uma semântica de pequeno passo para uma linguagem de expressão é uma relação → : E × E chamada de relação de redução . A semântica de pequenas etapas descreve o que acontece com uma expressão em detalhes. É capaz de fornecer uma descrição precisa de programas não termináveis, com uma cadeia infinita e 0 → e 1 → e 2 → … . Um programa de encerramento é aquele que e 0 → e 1 → ⋯ → vE →:E×E e0→e1→e2→… e0→e1→⋯→v termina com um valor de tal modo que ∀ e ' ∈ E , v ↛ e ' .
v ∀e′∈E,v↛e′
No outro extremo do espectro está a semântica denotacional . A semântica denotacional atribui um "significado" a cada expressão. É uma função de expressões a denotações: ( é chamado de domínio). O espaço das denotações pode não ter relação com o espaço sintático, por exemplo, podem ser expressões avaliadas para um número e pode ser um conjunto de números como ou .D E D N R[[⋅]]:E→D D E D N R
A semântica de grandes etapas está no meio. A grande passos semântica em uma linguagem de expressão e um conjunto de valores de é uma relação . Relaciona uma expressão ao seu valor (possivelmente vários valores se o idioma não for determinístico). Freqüentemente, um valor especial é usado para expressões que não terminam.V ⇓ : E × V ⊥E V ⇓:E×V ⊥
Então, por que temos essas três noções? Todas essas noções podem se modelar, mas o modelo adiciona um grau de complexidade.
Operacionalmente falando, a semântica de pequenas etapas corresponde à observação de cada operação executada por um intérprete para o idioma. A semântica de grandes etapas apenas analisa o valor resultante. A semântica denotacional analisa uma interpretação matemática que pode ou não ter algo a ver com o que acontece em um computador.
A semântica em pequenos passos é a mais óbvia. Ele fornece claramente informações úteis sobre programas que não terminam. De maneira mais geral, fornece informações detalhadas sobre o comportamento do programa.
A semântica denotacional transforma construções sintáticas em objetos matemáticos arbitrários; ele pode expressar o que os cientistas desejam (você pode definir a denotação de uma expressão para ser todas as cadeias de redução possíveis), mas com o custo de adicionar um nível de complexidade. É usado quando queremos abstrair alguns detalhes, como exatamente como a expressão é avaliada.
A semântica de grandes etapas está no meio: abstrai os detalhes da avaliação, mas mantém a natureza sintática do resultado. Normalmente, o conceito é usado quando há uma semântica subjacente em pequenos passos, como uma maneira de expressar de forma concisa “ ”Como“ e ⇓ e n∃(e1,…,en),e→e1→…en and ∄e′,en→e′ e⇓en ”. Em tais construções, enquanto os conceitos são muito diferentes (um permite falar sobre etapas de computação individuais e sobre programas não-termináveis, o outro não), as definições serão muito semelhantes, porque nesse caso as regras que definem o big-passo semântica são basicamente de forma “se e ... e n → * v e v é um valor, em seguida, e 1 ⇓ v ”.e1→∗e2 en→∗v v e1⇓v
fonte
3
em((2+1)+1)⇓3
Eu estou supondo 'denotacional' é um fim-todo o valor, mas em que instância seria 'grande passo' não necessariamente mapear diretamente para isso? A diferença tem algo a ver com o contexto, como(a + 1)
depender do ambiente que contéma
?3