Toda gramática livre de contexto é equivalente a uma gramática na Forma Normal de Chomsky, onde todas as produções podem ser colocadas nas formas
![]() |
![]() |
|
![]() |
![]() |
É possível representar esse tipo de gramática usando outros mecanismos de especificação no lugar da notação matemática de conjuntos. Dois mecanismos tipicamente utilizados são a notação BNF e a notação de grafos sintáticos.
A notação BNF (Backus-Naur Form) introduz uma forma de representação textual para descrever gramáticas livres de contexto. BNF foi inicialmente desenvolvida para especificar a linguagem Algol 60, uma das predecessoras da linguagem C.
O principal operador dessa linguagem é o operador binário , que
permite descrever as produções da gramática. O operando do lado
esquerdo do operador é o símbolo não-terminal; do lado direito, a sua
expansão, que pode conter símbolos terminais e não-terminais.
Na notação BNF, os símbolos não-terminais são delimitados por
colchetes angulares, <
e >
. Por exemplo, a regra
A notação BNF também introduz um conjunto de operadores destinados a simplificar a representação das regras da gramática que envolvam alternativas, repetições e combinações. Esses operadores são descritos na seqüência.
O operador |
(ou) permite expressar em uma mesma regra
produções alternativas. Por exemplo, a regra
![]() |
![]() |
|
![]() |
![]() |
O operador [ ]
(opcional) permite expressar zero ou uma ocorrência
do símbolo especificado. Por exemplo, a regra
![]() |
![]() |
|
![]() |
![]() |
O operador ( | )
(fatoração) permite expressar a combinação de
símbolos alternativos, como em
![]() |
![]() |
|
![]() |
![]() |
O operador *
(repetição), assim como para expressões regulares,
expressa 0 ou mais ocorrências do símbolo. Por exemplo, a regra
![]() |
![]() |
|
![]() |
![]() |
O operador
(concatenação) permite expressar
a repetição múltipla de símbolos concatenados. Por exemplo, a regra
![]() |
![]() |
|
![]() |
![]() |
|
![]() |
![]() |
Outro tipo de notação usual para gramáticas é a notação de grafos sintáticos. Esta notação tem o mesmo poder de expressão de BNF, porém define uma representação visual para as regras de uma gramática livre de contexto.
Na notação de grafos sintáticos, símbolos terminais são representados por círculos e símbolos não-terminais, por retângulos. Setas são utilizadas para indicar a seqüência de expansão de um símbolo não-terminal. A Figura 3.1 apresenta alguns exemplos de regras já descritas para o BNF expressas através dessa notação.