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