Qual é a mágica por trás Escape (\) Character
-
11-07-2019 - |
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?
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