Una gramática formal es una cuaterna tal que:
- es un conjunto finito de símbolos no terminales.
- es un conjunto finito de símbolos terminales. Sea .
- es un conjunto finito de producciones.
- es un símbolo sentencia o elemento distinguido, siendo . Se considera que este es el nodo raíz del arbol de la gramática.
Cada producción en es un par ordenado de strings donde , , y . Cada producción se escribe de la forma , es decir que se cambia por .
Si se cambia por (siendo el string vacío tal que ), es decir que se borra un símbolo, se dice que hubo una contracción. Esto solo puede suceder en las gramáticas de tipo (Jerarquía de Chomsky). Esa capacidad de contracción distingue a las gramáticas de tipo de las de tipo .
Un string de símbolos en se conoce como forma sentencial. Sean formas sentenciales , , y . se deriva inmediatamente de en . Si es derivable: .
El lenguaje generado a partir de la gramática formal es el conjunto de strings terminales derivables a partir de : .
Si a la izquierda se tiene más de un símbolo, entonces se trata de una gramática o , ya que tiene contexto.
Ejemplo: sea la gramática con estas producciones:
Strings que puede generar: abc, aabbcc, aaabbbccc, aaaabbbbcccc, etc. El lenguaje generado es . Se observa que es una correspondencia triple ya que cada símbolo debe aparecer la misma cantidad de veces. Se considera que la gramática es de tipo porque un autómata pushdown ( no puede manejar correspondencias triples (solo puede manejar correspondencias dobles anidadas) y no existen contracciones por lo que no se necesita un .
Si una gramática permite llegar al mismo string por diferentes derivaciones, se dice que es una gramática ambigua. No siempre se puede solucionar el problema de la ambigüedad.
Tipos de Gramáticas
Dado , , , :

En resumen:
- Las tipo tienen producciones con contracción.
- Las tipo son similares a las tipo excepto que no producen contracción.
- Las tipo ya son libres de contexto porque sus producciones no presentan y .
- Las tipo solo permiten producciones por derecha () o por izquierda ().
Si es gramática regular, entonces es lenguaje regular.
Ambigüedad
Existe ambigüedad cuando para determinado string, la gramática provee árboles de derivación distintos. Es un problema que no siempre se soluciona, y no existe un método para solucionarlo.
Existen lenguajes inherentemente ambiguos que no pueden ser generados por una gramática no ambigua. No hay manera de decidir si un es inherentemente ambiguo. Por ejemplo, es inherentemente ambiguo.
Una derivación se indica como mediante donde . Una derivación es derivación por izquierda sí y solo sí el símbolo no terminal ubicado más a la izquierda de es reemplazado para obtener . Esto se verifica para Formalmente:
Un árbol de derivación solo sirve para gramáticas de tipo 2 o 3 porque no muestran el orden de derivación. Hay una correspondencia 1 a 1 entre derivaciones por izquierda y árboles de derivación. Si existen dos derivaciones por izquierda que dan el mismo string, existe ambigüedad.