Entiendo la diferencia entre sintaxis y semántica:
Sintaxis : cómo se combinan los símbolos para formar una expresión o declaración válida.
Semántica : el significado de esos símbolos que forman una expresión o enunciado.
¿Pero cuál es la gramática? Por ejemplo: a veces escucho a la gente decir que alguna construcción es "gramaticalmente incorrecta pero sintácticamente es correcta". Qué significa eso?
int;
es gramaticalmente válido, pero sintácticamente mal formado en C ++. La gramática no tiene ningún problema con este código, pero las restricciones de sintaxis requieren que se proporcione un nombre si la primera parte de una declaración no contiene especificador de clase o especificador de enumeración o, en C ++ 11, especificador de amigo .Respuestas:
Una gramática es un conjunto de reglas que definen la sintaxis para un idioma en particular.
Cuando las personas hablan específicamente de un analizador sintáctico (especialmente uno generado con un generador de analizador sintáctico como yacc, Byacc, ANTLR, etc.), pueden dividir un poco más el cabello y hablar específicamente sobre esas reglas sintácticas que se codifican utilizando el generador reglas, frente a aquellas partes que se aplican por separado mediante el código adjunto a una regla. Por ejemplo, en C cuando define una matriz, el tamaño que especifique para la matriz debe ser estrictamente positivo (no cero). La regla gramatical básicamente podría decir algo como:
... y luego por separado, habría un poco de código para verificar que unsigned_int no era cero. En este caso, podría tener sentido hablar sobre los requisitos de la sintaxis y la gramática por separado, y los dos tienen requisitos ligeramente diferentes (que, aplicados juntos, suponemos que se ajustan a los requisitos del lenguaje en sí).
fuente
La diferencia es difusa y no vale la pena preocuparse demasiado.
Las personas a veces incluirán restricciones sensibles al contexto bajo el paraguas de la corrección sintáctica. El ejemplo más común es un sistema de tipos. Otra es la regla de Java "sin declaraciones después del retorno". Esto simplifica la discusión formal: la sintaxis produce un lenguaje (un conjunto de oraciones / expresiones / programas) que es el dominio de la semántica; cualquier otra cosa "no es un programa", y la semántica no necesita molestarse con él.
En contraste, la "gramática" típicamente se refiere a un método para describir lenguajes libres de contexto (a pesar de las gramáticas de atributos).
La razón por la que no vale la pena preocuparse demasiado es que los sistemas de tipos se consideran con tanta frecuencia la " semántica estática " de un lenguaje como una " disciplina sintáctica para la corrección". Y a veces un idioma no tiene una gramática adecuada sin contexto; C, por ejemplo, debe alimentar la información del analizador nuevamente al lexer.
Pragmáticamente, cualquiera que confíe en una distinción entre "sintáctico" y "gramatical" debería decirlo y explicar lo que significan.
fuente
Una gramática es un conjunto de reglas para definir un idioma. Más bien, la gramática describe la sintaxis y la semántica . Un idioma puede tener dos gramáticas diferentes:
Por ejemplo, una parte de la gramática en C podría verse así:
Sentido:
Eche un vistazo a esta forma de definir una gramática . Si realmente siente curiosidad por las gramáticas, eche un vistazo a GNU Bison , que es básicamente una herramienta para describir la gramática de un lenguaje.
El "gramaticalmente incorrecto pero sintácticamente correcto" no tiene demasiado sentido. Tal vez se refieren a una gramática que describe la semántica de un lenguaje. Sin embargo, tendría más sentido decir "no semánticamente correcto".
fuente