Qual è la differenza tra sintassi e grammatica?

14

Comprendo la differenza tra sintassi e semantica -

Sintassi : in che modo i simboli vengono combinati per formare un'espressione o un'istruzione valida.
Semantica : il significato di quei simboli che formano un'espressione o un'istruzione.

Ma cos'è la grammatica? Ad esempio: a volte sento dire che alcuni costrutti sono "grammaticalmente scorretti ma sintatticamente è corretto". Cosa significa?

    
posta cpx 30.10.2011 - 21:25
fonte

3 risposte

6

Una grammatica è un insieme di regole che definiscono la sintassi per una lingua specifica.

Quando le persone parlano specificatamente di un parser (specialmente di uno generato con un generatore di parser come yacc, Byacc, ANTLR, ecc.), possono fare un po 'più di divisione dei capelli e parlare in modo specifico di quelle regole sintattiche codificate utilizzando le regole del generatore, rispetto a quelle parti che vengono applicate separatamente dal codice allegato a una regola. Ad esempio, in C quando si definisce un array, la dimensione specificata per l'array deve essere strettamente positiva (non zero). La regola della grammatica potrebbe sostanzialmente dire qualcosa del tipo:

typename var_name '[' unsigned_int ']'

... e poi separatamente, ci sarebbe un po 'di codice per verificare che unsigned_int fosse diverso da zero. In questo caso, potrebbe avere un senso parlare dei requisiti della sintassi e della grammatica separatamente gli uni dagli altri, con i due requisiti leggermente diversi (che, forzati insieme, presumiamo adatti ai requisiti della lingua stessa).

    
risposta data 30.10.2011 - 22:02
fonte
3

La differenza è sfocata e non vale la pena preoccuparsi troppo.

Le persone a volte includono vincoli sensibili al contesto sotto l'egida della correttezza sintattica. L'esempio più comune è un sistema di tipi. Un'altra è la regola "no statements after return" di Java. Questo semplifica la discussione formale: la sintassi produce un linguaggio (un insieme di frasi / espressioni / programmi) che è il dominio della semantica; qualsiasi altra cosa è "non un programma", e la semantica non ha bisogno di preoccuparsene.

Al contrario, "grammatica" si riferisce in genere a un metodo di descrizione delle lingue esenti dal contesto (a prescindere dalle grammatiche attribuite).

Il motivo per cui non vale la pena preoccuparsi di molto è che i sistemi di tipo sono spesso considerati "semantica " di una lingua in quanto sono una disciplina " sintattica per la correttezza ". E a volte una lingua non ha una grammatica corretta senza contesto; C, ad esempio, deve restituire le informazioni dal parser al lexer.

Pragmaticamente, chiunque faccia affidamento su una distinzione tra "sintattico" e "grammaticale" è meglio che lo dica e spiega che cosa significano.

    
risposta data 30.10.2011 - 22:53
fonte
0

Una grammatica è un insieme di regole per definire una lingua. Piuttosto, la grammatica descrive la sintassi e la semantica .   Una lingua potrebbe avere due grammatiche diverse:

  • Sintassi della grammatica (una serie di regole che descrivono l'ordinamento dei simboli nella lingua)
  • Grammatica semantica (un insieme di regole che descrivono il posizionamento semantico valido e l'uso di quei simboli)

Ad esempio, una parte della grammatica in C potrebbe essere simile a:

if statement -> if_keyword "(" expression ")" if_block
if_keyword -> "if"
logical_statement -> some other stuff here...

Significato:

an if statement is made of an if keyword followed by a parenthesis followed by an expression followed by a parenthesis followed by an if block
an if keyword is ....

Dai un'occhiata a questo modo di definire una grammatica . Se sei davvero curioso di grammatiche, dai un'occhiata a GNU Bison , che è fondamentalmente uno strumento per descrivere la grammatica di una lingua.

Il "grammaticalmente scorretto ma sintatticamente corretto" non ha molto senso. Forse si riferiscono a una grammatica che descrive la semantica di una lingua. Avrebbe certamente più senso dire semplicemente "non semanticamente corretto".

    
risposta data 30.10.2011 - 21:40
fonte

Leggi altre domande sui tag