o que é semântica?

13

Existem muitos idiomas populares. Porém, os cientistas da computação nos dizem que, para entender o comportamento dos programas nessas línguas de maneira definitiva e inequívoca, argumentar sobre o comportamento do programa (por exemplo, provar sua identidade), precisamos traduzi-los para outra linguagem bem compreendida. Eles chamam essa linguagem de "semântica". Os autores propõem uma das muitas semânticas. Eles explicam o significado de suas construções e como você pode traduzir seu idioma para o deles. Depois que você fizer isso, todos entenderão seu programa certamente, eles dizem.

Parece bom, ainda assim, eu não entendo alguma coisa. Eles nos dizem que introduzem outro idioma para entender o primeiro? Por que o entendemos melhor do que o original? Por que essa semântica é melhor que isso? Por que não aprender semântica de C imediatamente em vez de inventar outra linguagem, para descrever a semântica de C? O mesmo se aplica à sintaxe. Por que não faço a mesma pergunta em relação à sintaxe?

PS: Nos comentários, ouvi dizer que semântica não significa outra língua ou tradução para ela. Mas a Semântica Formal para VHDL diz que se você entende algo de apenas uma maneira, não o entende e o "significado do significado" pode ser especificado se fornecermos a uma linguagem um mecanismo que a traduza para outra linguagem (conhecida). Ou seja, "semântica é uma relação entre sistemas formais". Hennessy, em Semântica de linguagens de programação , diz que a semântica permite o processamento formal do "significado" do programa, quando a semântica é fornecida como BNF ou Diagrama de sintaxe. O que é um sistema formal, se não um idioma?

PS2 Posso dizer que a síntese de HW de determinado programa HDL na interconexão de portas é um processo de extração semântica? Depois, traduzimos a descrição (de alto nível) para o idioma (de baixo nível) que entendemos.

Val
fonte
Que tipo de diagramas você quer dizer? Trabalho com semântica, mas praticamente nunca uso diagramas.
Dave Clarke
1
Eu não chamaria a semântica de "linguagem". Semântica define o significado das línguas. Por exemplo, a sintaxe dos números binários é . Somente com o valor da semântica ( w ) = | w | i = 1 w i 2 n - i + 1 obtemos números reais; note que essa não é a única semântica possível; também existem BCD, 2-complementos e muito mais. {0,1}+value(w)=i=1|w|wi2ni+1
Raphael
@ Dave Com licença, criei minha pergunta sob a impressão de Diagramas de decisão de atribuição. Eu também acabei de formal semântica para VHDL, um livro em que os autores propõem diferentes semânticas, muitos diagramas em cada uma. Eu estava pensando que essa é uma linguagem para a qual mapeamos.
Val
Isso parece muito menos semântica e mais como uma etapa intermediária no caminho da compilação para o hardware.
9118 Dave
Sim, mas eles extraem o "significado" da descrição.
Val

Respostas:

15

Por que não aprender semântica de C imediatamente em vez de inventar outra linguagem, para descrever a semântica de C?

Porque, para definir a semântica de C, você precisa de algum tipo de idioma, por exemplo, inglês. O inglês pode ser ambíguo, e especialmente é a semântica do C99.

A noção de semântica da ciência da computação é geralmente uma descrição matemática de um programa, e essa descrição não é exatamente uma tradução. Existem vários tipos de semântica, que podem ser sobre coisas diferentes:

  1. sobre qual função matemática o programa calcula ( semântica denotacional ),
    lambda x: x + x =(x2x)
  2. sobre propriedades que devem conter antes e depois do programa ( semântica axiomática ),
    {a>0} x = a; y = 0; while(1 < x){ x = x/2; y++; } {y=log(a)}
  3. sobre como o programa reduzirá ( semântica operacional ). onde representa sua memória antes e depois. Neste caso e se e são as células de memória paraee se .
    (σ, while(x){x--;y++;})σ
    σ,σσ=(xa,yb)σ=(xa+b,y0)xyxya

Infelizmente, por enquanto, entender universalmente um programa por meio de sua semântica não é fácil nem é a intenção de tudo. Não é o primeiro porque, bem, essas contas podem ser confusas. Não é o último, porque a semântica fornece de fato uma descrição comum e inequívoca, mas não é usada para entender um programa.

Se a leitura da semântica não é tão significativa, é muito importante ler e concordar com a semântica nos elementos básicos da linguagem, por exemplo, para explicar sem ambiguidade como C'sobras primitivas.continue

Em conclusão:

Eles nos dizem que introduzem outro idioma para entender o primeiro?

Tecnicamente não, a linguagem é matemática. Também é basicamente o mesmo para todas as linguagens de programação; portanto, mesmo a introdução de uma nova linguagem, se for a mesma para todas, seria praticamente aceitável.

Por que o entendemos melhor do que o original?

Por ser matemática, pode ser mais difícil de entender, mas é muito mais preciso e completo.

O mesmo se aplica à sintaxe.

Existem trabalhos sobre analisadores verificados, mas a questão do que significaria uma semântica de um analisador não é trivial.

jmad
fonte
2
"matemática [...] é muito mais precisa e completa." - o que, é claro, sugere a sintaxe formal e a semântica da própria matemática. ;)
Raphael