Qual è la differenza tra sintassi e semantica?

84

Ho sempre pensato che riferirsi alla sintassi di una lingua fosse lo stesso che fare riferimento alla semantica di una lingua. Ma sono stato informato che apparentemente non è il caso. Qual è la differenza?

    
posta gsingh2011 12.10.2011 - 07:28
fonte

13 risposte

102

Semantica ~ Significato

Sintassi ~ Rappresentazione simbolica

Quindi due programmi scritti in lingue diverse potrebbero fare la stessa cosa (semantica) ma i simboli usati per scrivere il programma sarebbero diversi (sintassi).

Un compilatore controllerà la sintassi per te (errori in fase di compilazione) e ricaverà la semantica dalle regole del linguaggio (mappando la sintassi alle istruzioni della macchina), ma non troverà tutti gli errori semantici (errori di run-time ad esempio, calcolando il risultato errato perché il codice dice add 1 invece di add 2).

    
risposta data 12.10.2011 - 09:20
fonte
35

In realtà non ci sono due livelli, ma tre:

  • livello lessicale: come i caratteri vengono combinati per produrre elementi del linguaggio ( i e f produce if )
  • livello sintattico: come gli elementi del linguaggio vengono combinati per produrre espressioni linguistiche ( if , ( , 42 , == , answer e ) produce un'istruzione condizionale)
  • livello semantico: in che modo le espressioni linguistiche vengono convertite in istruzioni della CPU per formare un significato (un'istruzione condizionale consente di eseguire un ramo o l'altro in base al risultato dell'espressione booleana)
risposta data 12.10.2011 - 10:31
fonte
16

Te lo spiegherò con un semplice esempio nella lingua ENGLISH :

The glass drank Ben

È un'affermazione sintatticamente corretta. Ha un nome, un verbo, ecc.

Ma semanticamente è sbagliato, perché questa affermazione non ha un significato concepibile o corretto.

    
risposta data 15.03.2013 - 08:26
fonte
15

Semantica descrive le entità logiche di un linguaggio di programmazione e le loro interazioni. Sintassi definisce come sono espressi in caratteri.

Ad esempio, il concetto di aritmetica puntatore fa parte della semantica di C; il modo in cui gli operatori + e - possono essere utilizzati per esprimere le operazioni del puntatore fanno parte della sua sintassi.

A volte, due lingue condividono parte della loro semantica, ma la sintassi differisce in modo selvaggio (ad esempio C # e VB.NET - entrambi usano tipi di valore e tipi di riferimento, ma i caratteri che digiti per definirli sono diversi); in altri casi, due lingue sono sintatticamente simili, ma la semantica non coincide (si consideri Java vs JavaScript, dove le similitudini spesso confondono i principianti).

    
risposta data 12.10.2011 - 07:35
fonte
6

La sintassi è il modo in cui organizzi i token di una lingua. La semantica è ciò che significano quei token (di solito, cosa significa una particolare disposizione di token).

    
risposta data 12.10.2011 - 12:30
fonte
5

Non hai specificato se ti riferisci solo ai linguaggi di programmazione o alle lingue generali utilizzate nella programmazione, quindi la mia risposta riguarda le lingue dei dati (come XML, RDF, sistemi di tipi di dati, ecc.):

Brian L. Meek nelle sue sette regole d'oro per la produzione di standard indipendenti dalla lingua (1995) scrive che "la sintassi di una lingua può essere la semantica di un altro" . Si riferisce alle parole "sintassi" e "semantica" usate nella descrizione dei dati: quindi se incappate in queste parole in una specifica di alcuni formati di dati, è meglio sostituire entrambe le parole con "Potrzebie" a chiarire che è necessario elaborare il significato per te stesso.

La relazione tra sintassi e semantica, almeno nei dati esattamente specificati, può essere meglio descritta con il termine "codifica" . Semantic è codificato in sintassi. Poiché le registrazioni possono essere annidate, la sintassi di una lingua è la semantica di un altro. Se si va oltre il regno dei dati, questo annidamento può essere virtualmente infinito, come descritto da Umberto Eco come "semiosi illimitata".

Per dare un esempio:

  • La sintassi XML (il materiale con tutte queste parentesi) è la sintassi con un Infoset XML (un albero astratto) come semantica.
  • Un Infoset XML come sintassi può esprimere un record in un formato di dati XML come semantico, ad esempio un documento RDF / XML che codifica un grafico RDF.
  • Un grafico RDF (il materiale con riferimenti URI) come la sintassi codifica un grafo di risorse astratte come semantiche.
  • Un grafico di risorse astratte in quanto la sintassi codifica un modello concettuale come semantico.

La gente di solito si ferma a un certo livello e la considera semantica, ma alla fine non c'è una semantica finale a meno che qualche essere umano interpreti i dati nella sua mente. Non appena si tenta di esprimere la semantica in forma di dati, diventa sintassi.

    
risposta data 13.12.2012 - 20:15
fonte
4

Se può essere descritto in BNF (Backus-Naur Form) o qualcosa di simile, è sintassi. Se non può, non lo è.

La semantica, d'altra parte, riguarda il significato di un programma (o altra porzione di codice sorgente).

E a volte la linea tra i due può essere sfocata.

Un modo per capire la distinzione consiste nell'esaminare i tipi di errori che si verificano quando la sintassi o la semantica del programma non sono corrette.

Un errore di sintassi è un errore del codice sorgente che corrisponde alla grammatica della lingua, per esempio, non avendo un punto e virgola dove è richiesto.

Un errore semantico è un fallimento nel soddisfare altri requisiti linguistici (cosa C, per esempio, chiama "constraints"); un esempio potrebbe scrivere x + y dove x e y sono di tipi incompatibili. La grammatica della lingua ti dice che un'aggiunta somiglia a something + something , ma non è abbastanza potente per esprimere i requisiti sui tipi di operandi sinistro e destro.

(Gli errori logici, come l'uso di 1 dove 2 sarebbe corretto, non sono generalmente rilevabili dal compilatore, anche se in alcuni casi un compilatore può avvisare sul codice discutibile.)

    
risposta data 13.10.2011 - 02:35
fonte
0

La sintassi è ciò che dicono i simboli (lessicali). La semantica è ciò che intendono.

Considera:

C #: condition ? true_value : false_value
VB.NET: If(condition, true_value, false_value)
- Diverse sintassi, stessa semantica.

C #: left_value / right_value
VB.NET: left_value / right_value
- Stessa sintassi, semantica diversa (per numeri interi).

    
risposta data 22.02.2013 - 05:14
fonte
0

Sintassi è la disposizione grammaticale delle parole in una frase, ad esempio l'ordine delle parole.

(inglese) ' cat dog boy ' e (programmazione) ' hi.5 ' è non sintatticamente corretto.

(inglese) ' cat hugs boy ' e (programmazione) '* 3.2 * 5 *' è sintatticamente valido.

Semantica Statica è se le affermazioni sintatticamente valide hanno un significato.

(inglese) ' I are big ' (programmazione) (python) ' 3 +' hi '' è sintatticamente corretto ma ha un errore semantico statico.

Semantica è il significato associato alla stringa sintatticamente corretta dei simboli senza errore semantico statico, cioè la frase è sintatticamente e semanticamente corretta, ma il suo significato potrebbe non essere quello che era inteso.

(inglese) ' Gli aerei volanti possono essere pericolosi ' possono avere due significati, ad esempio il volo di aerei può essere pericoloso o gli aerei che stanno volando possono essere pericolosi.

(Programmazione) 'il computer non genererà alcun messaggio di errore, ma non farà ciò che gli hai detto di fare; farà qualcos'altro. '

Sorgente : MIT 6.00.1

    
risposta data 15.10.2016 - 07:19
fonte
-2
  1. La sintassi si riferisce a regole formali che governano la costruzione di affermazioni valide in una lingua. La semantica si riferisce all'insieme di regole che danno il significato di una dichiarazione.

  2. Gli errori dovuti alla sintassi si verificano in un programma quando i ruels del linguaggio di programmazione vengono violati o utilizzati in modo improprio. Gli errori dovuti alla semantica si verificano in un programma quando le affermazioni non sono significative.

  3. L'ordine delle parole è il principio di base della sintassi, quelli che cercano di farlo capire ciò che è scritto usa i riferimenti sintattici dell'ordine delle parole a aiuta a dare la struttura della frase e il significato. La semantica è una interpretazione personale del significato di a "frase" in base alla loro conoscenza precedente. Quindi una frase che apparentemente non ha senso sintattico, può avere un significato quando si usa spunti semantici.

  4. La sintassi riguarda solo ciò che è corretto dal punto di vista linguistico e grammaticale. La semantica richiede tutte quelle conoscenze pregresse che, ed è molto al di là di tutto ciò che è specifico della lingua.

  5. La frase "Baby milk drinks" non ha un significato sintattico, ma attraverso la semantica la maggior parte delle persone lo interpreterebbe come "Baby beve latte", come la nostra conoscenza precedente ci dice che un bambino beve latte, e quindi noi può trovare un significato dalle parole chiave.

risposta data 15.03.2013 - 06:48
fonte
-2

Sintassi e semantica sono come strategia e tattiche o sinistra e destra .

Non sono concetti universali realmente indipendenti, ma un paio di parole correlate che, quando sei in un particolare contesto, indicano direzioni opposte. Ma la stessa cosa che è la strategia su una scala è tattica su un'altra.

Quindi se stai scrivendo il codice in una lingua, la sintassi è la lingua che stai usando e il comportamento desiderato è la semantica. Ma se stai implementando, o discutendo, il compilatore per quel linguaggio, allora la sintassi è la grammatica e forse digiti il sistema e la semantica su ciò che è costruito. E così via.

    
risposta data 08.02.2014 - 11:12
fonte
-3

La sintassi è ciò che il computer capisce, la semantica è ciò che l'umano comprende.

Un compilatore / interprete non si preoccupa del tuo design, e in qualsiasi codice compilato a livello di macchina ti sarà difficile dedurre il design. Gli sviluppatori si preoccupano del design perché un buon design consiste nel ridurre la complessità attraverso l'astrazione di comportamenti e interazioni complesse, e diversi tipi di problemi si prestano a semantica diversa. La scelta del linguaggio riguarda in gran parte la facilità e l'efficienza con cui la semantica che si desidera utilizzare può essere espressa nella sua sintassi.

    
risposta data 12.10.2011 - 14:10
fonte
-3

Esempio molto breve con "plain c":

void main()
{
  int a = 10;
  int x = a - 1;
  int y = - 1;

  printf("x = %i", x);
  printf("y = %i", y);
    getch();
}

In questo esempio, la sintassi per il token "-" è la stessa, ma ha un significato diverso ("semantico"), a seconda di dove è stato utilizzato.

Nell'assegnazione "x", "-" significa operazione di "sottrazione", Nell'assegnazione "y", "-" indica l'operazione "segno negativo".

    
risposta data 12.10.2011 - 19:14
fonte

Leggi altre domande sui tag