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