Pergunta

Como é que a C C ++ compilador manipular o personagem / fuga [ "\"] no código-fonte? Como é compilador gramática escrito para processar esse personagem? O que faz o compilador que depois de encontrar esse personagem?

Foi útil?

Solução

A maioria dos compiladores são divididos em duas partes, o front-end do compilador é chamado de lexical analisador ou um scanner. Esta parte do compilador lê os caracteres reais e cria tokens. Tem uma máquina de estado que decide, ao ver um caractere de escape, se é genuíno (por exemplo, quando ele aparece dentro de uma string) ou modifica o carácter seguinte. O sinal é emitido de acordo como o personagem de escape ou algum outro sinal (tal como um separador ou uma nova linha) para a parte seguinte do compilador ( o analisador ). A máquina grupo pode estado vários personagens em um token.

Outras dicas

Uma nota interessante sobre este assunto é On confiar Confiança [link PDF] .

O documento descreve uma maneira um compilador poderia lidar com este problema exatamente, mostra como o compilador c-escrita-em-c não tem uma tradução explícita dos códigos em valores ASCII; e como inicializar um novo código de escape para o compilador para que a compreensão do valor ASCII para o novo código também está implícita.

Ele geralmente escapa o seguinte caracteres:

  • Em um literal string ou literal de caracteres, isso significa escapar do próximo caractere. meios \a 'alerta' (piscar o terminal, apitar ou qualquer outro), meios \n 'linefeed', \xNUM significa um número hexadecimal, por exemplo.
  • (! E até mesmo dentro de um comentário de toda a linha)
  • Se ele aparece como o último caractere visível antes de uma nova linha, seja dentro de uma cadeia ou não, ele age como uma linha de continuação: O seguinte caractere de nova linha é ignorado, eo próxima linha é mesclada com a linha atual.

caractere de escape com um carácter seguinte (como \n) é um único caractere para compilador C -. Do scanner apresenta ao analisador como símbolo personagem, então não há necessidade de regras de sintaxe especiais em analisador de caractere de escape

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top