Forma Normal de Chomsky Programa de Pós-graduação em Ciência da Computação - UFU Profa. Sandra de Amo Definição Uma gramática livre do contexto está na Forma Normal de Chomsky (FNC) se: suas regras de produção são do tipo A BC ; A, B, C são variáveis Aa; A variável e a terminal Sϵ a variável start S não aparece no corpo das regras Arvores de Derivação de uma FNC Arvores de derivação são binárias : cada nó tem no máximo 2 filhos Nós intermediários são variáveis Folhas só tem terminais A variável S só aparece na raiz Arvores de Derivação = Start S = Variáveis distintas de S = terminais Toda gramática LC é equivalente a uma gramática em FNC Transformação das regras em FNC Inserir novo simbolo start S0 e regra S0 S Desta forma, o simbolo start S0 não aparece em nenhum corpo de regra Remover todas as regras do tipo A ϵ (inclusive S ϵ ) Para cada regra onde A tem uma ocorrência do lado direito, inserir uma regra sem esta ocorrência de A Exemplo: se R uAvAw é uma regra então acrescentamos as regras: R uvAw R uAvw R uvw se R A é uma regra e R ϵ não foi removido em um passo precedente então acrescentamos a regra R ϵ Desta forma, obtemos uma gramática sem regras do tipo A ϵ (para A distinto da variável start S0 ) Toda gramática LC é equivalente a uma em FNC Eliminar regras unitárias do tipo A B. Para cada regra começando com B, acrescentar regra análoga, substituindo B por A na cabeça (a menos que a regra assim obtida seja uma regra unitária já removida) Exemplo: AB B C1C2a B C1C2a A C1C2a Resolver o problema de regras do tipo X = regras com corpo com comprimento maior do que 1 e contendo terminais. Para cada terminal a aparecendo no corpo de uma destas regras de tipo X inserir regra do tipo Ua a, onde Ua é uma nova variável. Substituir todas as ocorrências de a em regras do tipo X pela variável Ua. Exemplo: R aAB R UaAB Ua a Toda gramática LC é equivalente a uma em FNC Resolver o problema de regras do tipo Y = regras com corpo com comprimento maior do que 2: R ABCD R UD U ABC R UD U VC V AB Exemplo S ASA | aB AB|S Bb|ϵ S0 S S ASA | aB AB|S Bb|ϵ S0 S S ASA | aB | a AB|S|ϵ Bb (6 regras) S0 S S ASA | aB | a | AS | SA | S AB|S Bb S0 ASA | aB | a | AS | SA S ASA | aB | a | AS | SA A B | ASA | aB | a | AS | SA Bb S0 ASA | aB | a | AS | SA S ASA | aB | a | AS | SA A b | ASA | aB | a | AS | SA Bb S0 | AA1 | UB | a | AS | SA S AA1 | UB | a | AS | SA A b | AA1 | UB | a | AS | SA A1 SA Ua Bb (FNC : 20 regras)