che cos'è la semantica?


13

Ci sono molte lingue popolari. Ma gli informatici ci dicono che per capire il comportamento dei programmi in quelle lingue discutono in modo definitivo e inequivocabile del comportamento dei programmi (ad esempio, dimostrando la loro identità), dobbiamo tradurli in un altro linguaggio ben compreso. Chiamano tale linguaggio "una semantica". Gli autori propongono una delle tante semantiche. Spiegano il significato delle loro costruzioni e come puoi tradurre la tua lingua nella loro. Una volta che lo fai, tutti capiranno sicuramente il tuo programma, dicono.

Sembra buono, tuttavia, non capisco qualcosa. Ci dicono che introducono un'altra lingua per capire la prima? Perché lo capiamo meglio di quello originale? Perché questa semantica è meglio di così? Perché non imparare subito la semantica di C invece di inventare un'altra lingua, per descrivere la semantica di C? Lo stesso vale per la sintassi. Perché non faccio la stessa domanda riguardo alla sintassi?

PS Nei commenti ho sentito che la semantica non significa un'altra lingua o traduzione in essa. Ma la semantica formale per VHDL afferma che se capisci qualcosa in un solo modo, non lo capisci e il "significato del significato" può essere specificato se forniamo una lingua con un meccanismo che la traduce in un'altra lingua (conosciuta). Cioè, "la semantica è una relazione tra sistemi formali". Hennessy, in Semantica dei linguaggi di programmazione , afferma che la semantica consente l'elaborazione formale del "significato" del programma, quando la semantica viene fornita come BNF o diagramma di sintassi. Cos'è un sistema formale se non una lingua?

PS2 Posso dire che la sintesi HW di un determinato programma HDL nell'interconnessione delle porte, è un processo di estrazione della semantica? Traduciamo la descrizione (di alto livello) nella lingua (di basso livello) che comprendiamo in seguito.


Che tipo di diagrammi intendi? Lavoro con la semantica, ma praticamente non uso mai i diagrammi.
Dave Clarke,

1
Non definirei la semantica una "lingua". La semantica definisce il significato delle lingue. Ad esempio, la sintassi dei numeri binari è . Solo con la semantica otteniamo numeri reali; nota che questa non è l'unica possibile semantica, ci sono anche BCD, 2-complemento e molti altri. valore ( w ) = | w | i = 1 w i 2 n - i + 1{0,1}+valore(w)=Σio=1|w|wio2n-io+1
Raffaello

@Dave Mi scusi, ho creato la mia domanda sotto l'impressione dei diagrammi di decisione di assegnazione. Ho anche appena formale Semantics for VHDL, un libro in cui gli autori propongono diverse semantiche, molti diagrammi in ognuna. Stavo pensando che questa è una lingua a cui mappiamo.
Val

Questo suona molto meno come la semantica, e più come un passaggio intermedio sulla strada per la compilazione su hardware.
Dave Clarke,

Sì, ma estraggono il "significato" dalla descrizione.
Val

Risposte:


15

Perché non imparare subito la semantica di C invece di inventare un'altra lingua, per descrivere la semantica di C?

Perché per definire la semantica di C è necessario un qualche tipo di linguaggio, ad esempio l'inglese. L'inglese può essere ambiguo, e in particolare è la semantica C99.

La nozione di semantica di informatica è generalmente una descrizione matematica di un programma, e questa descrizione non è esattamente una traduzione. Esistono diversi tipi di semantica, che possono riguardare cose diverse:

  1. su quale funzione matematica il programma calcola ( semantica denotazionale ),
    lambda x: x + x =(X2X)
  2. sulle proprietà che devono contenere prima e dopo il programma ( semantica assiomatica ),
    {un'>0} x = a; y = 0; while (1 <x) {x = x / 2; y ++; } {y=log(un')}
  3. su come il programma ridurrà ( semantica operativa ). dove rappresenta la tua memoria prima e dopo. In questo caso e se ed sono le celle di memoria peree se .
    (σ, while(x){x--;y++;})σ
    σ,σσ=(xa,yb)σ=(xa+b,y0)xyxya

Un po 'tristemente per ora, comprendere universalmente un programma attraverso la sua semantica non è né facile né l'intenzione di tutto. Non è il primo perché, beh, quella matematica può essere disordinata. Non è quest'ultimo perché la semantica fornisce in effetti una descrizione comune e inequivocabile, ma non viene utilizzata per comprendere un programma.

Se leggere la semantica non è molto significativo, leggere e concordare la semantica sugli elementi di base della lingua è molto importante, ad esempio per spiegare in modo inequivocabile come Copere primitive.Continua

In conclusione:

Ci dicono che introducono un'altra lingua per capire la prima?

Tecnicamente no, la lingua è matematica. Inoltre è sostanzialmente lo stesso per tutti i linguaggi di programmazione, quindi anche l'introduzione di un nuovo linguaggio, se è lo stesso per tutti, sarebbe praticamente OK.

Perché lo capiamo meglio di quello originale?

Perché è matematica, quindi potrebbe essere più difficile da capire, ma è molto più preciso e completo.

Lo stesso vale per la sintassi.

Esistono lavori su parser verificati, ma la domanda su cosa significherebbe una semantica di un parser non è banale.


2
"la matematica [...] è molto più precisa e completa." - che ovviamente pone la domanda per la sintassi formale e la semantica della matematica stessa. ;)
Raffaello
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.