Cap2 Gramatica
a. Introdução
Um programa escrito numa linguagem de programação qualquer deve ser compilado antes de ser executado pelo computador. Nesse processo de compilação são executadas duas fases distintas, uma de verificação do código e outra de geração do código objeto. Mas como o compilador consegue identificar os erros gramaticais de um comando de uma linguagem de programação? Como será que o compilador é construído para possibilitar que um simples erro no código, como um ponto e vírgula esquecido, seja identificado? Vejamos um exemplo disso:
Imagine que o seguinte comando seja encontrado num programa fonte escrito na Linguagem C: scanf (“%f”, &numero);
O comando acima está sintaticamente correto, ou seja, foi escrito da forma prevista no manual da linguagem C. Observe que não está se mencionando aqui se o comando está correto do ponto de vista semântico. Erros do tipo variável não declarada podem ocorrer, pois este tipo de análise será realizado pelo módulo posterior do compilador.
Agora se o programador tivesse escrito esse mesmo comando da seguinte forma: (“%f”) &numero, scanf ;
Observe que as palavras escritas estão corretas, porém a ordem em que foram colocadas dentro do comando o torna inválido. Então, como definir uma regra, ou um conjunto de regras, para identificar se o comando escrito pelo programador está sintaticamente correto? Veja que o programador pode escrever diversas versões válidas do comando scanf. Como validar tudo isso? A resposta é simples: por meio da gramática da linguagem C que possui regras específicas para cada comando da linguagem.
Numa análise simplificada, vejamos como poderia ser descrita a gramática do comando scanf: primeiro vamos identificar os termos que sempre aparecem num comando scanf e aqueles que são variáveis, ou seja, podem ser alterados pelo programador.
scanf (“%f”, &numero); Ao analisar o comando acima, pode-se perceber que definir uma regra ou um conjunto de regras para especificar a forma correta