¿Cuál es la diferencia entre sintaxis y gramática?

14

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 los símbolos que forman una expresión o declaración. / p>

¿Pero qué 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?

    
pregunta cpx 30.10.2011 - 21:25

3 respuestas

6

Una gramática es un conjunto de reglas que definen la sintaxis de un idioma en particular.

Cuando las personas están hablando específicamente sobre un analizador (especialmente uno generado con un generador de analizador como yacc, Byacc, ANTLR, etc.), pueden dividir el cabello un poco más, y hablar específicamente sobre esas reglas sintácticas que están codificadas usando las reglas del generador, en comparación con aquellas partes que se aplican por separado mediante un 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:

typename var_name '[' unsigned_int ']'

... y luego por separado, habría un poco de código para verificar que unsigned_int fuera distinto de cero. En este caso, podría tener algún sentido hablar de los requisitos de la sintaxis y la gramática por separado, ya que ambos tienen requisitos ligeramente diferentes (que, aplicados juntos, suponemos que se ajustan a los requisitos del propio lenguaje).

    
respondido por el Jerry Coffin 30.10.2011 - 22:02
3

La diferencia es borrosa y no vale la pena preocuparse demasiado.

La gente a veces incluirá restricciones sensibles al contexto bajo el paraguas de la corrección sintáctica. El ejemplo más común es un sistema de tipo. Otra es la regla de "no hay declaraciones después de la devolución" de Java. 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 es "no un programa", y la semántica no tiene por qué preocuparse.

En contraste, "gramática" generalmente se refiere a un método para describir lenguajes sin contexto (a pesar de las gramáticas).

La razón por la que no merece la pena preocuparse es que los sistemas de tipos a menudo se consideran la "sememática estática " de un lenguaje, ya que son una disciplina "sintaxis para la corrección. ". Y a veces un lenguaje no tiene una gramática adecuada sin contexto; C, por ejemplo, debe enviar información del analizador al lexer.

Pragmáticamente, cualquiera que confíe en una distinción entre "sintáctico" y "gramatical" será mejor que lo diga y explique lo que significan.

    
respondido por el Ryan Culpepper 30.10.2011 - 22:53
0

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:

  • Sintaxis gramática (un conjunto de reglas que describe el orden de los símbolos en el idioma)
  • Gramática semántica (un conjunto de reglas que describen la colocación semántica válida y el uso de esos símbolos)

Por ejemplo, una parte de la gramática en C podría tener el siguiente aspecto:

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

Significado:

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 ....

Echa un vistazo a esta forma de definir una gramática . Si realmente tienes curiosidad por las gramáticas, echa un vistazo a GNU Bison , que es básicamente una herramienta para describir la gramática. de un idioma.

El "gramaticalmente incorrecto pero sintácticamente correcto" no tiene mucho sentido. Tal vez se refieren a una gramática que describe la semántica de un idioma. Sin embargo, tendría más sentido decir "no es correcto semánticamente".

    
respondido por el Casey Patton 30.10.2011 - 21:40

Lea otras preguntas en las etiquetas

Comentarios Recientes

Todavía tengo que analizar profundamente la herramienta. Puede ampliar este concepto desde la Programación univalente y cómo funciona y modela ExprSearcher: desde perlrun o desde ASF, errores de análisis de la hoja de cálculo: la sesión ejecuta su código de forma asíncrona, lo que significa que todo el código fuente y los resultados deben poder reconocerse y enviarse a El IDE a un ritmo relativamente rápido. La salida se llama volcado, también conocido como detallado; todas las variables DWARF se restablecen... Lee mas